From 42539643c396f9d8865dcf9a51b13dc869709d16 Mon Sep 17 00:00:00 2001
From: Marius Cramer <m.cramer@pixcept.de>
Date: Wed, 13 Aug 2014 07:16:50 -0400
Subject: [PATCH] Merge remote-tracking branch 'ispc/stable-3.0.5' into stable-3.0.5
---
interface/web/help/lib/lang/se_support_message.lng | 1
interface/web/dns/lib/lang/se_dns_template_list.lng | 1
interface/web/admin/lib/lang/se_language_edit.lng | 1
interface/web/sites/lib/lang/se_ftp_user.lng | 3
interface/web/sites/lib/lang/se_web_backup_list.lng | 1
interface/web/admin/lib/lang/es_server_config.lng | 52
interface/web/sites/lib/lang/fr_shell_user.lng | 3
interface/web/sites/lib/lang/se_web_domain.lng | 1
interface/web/mail/lib/lang/se_mail_user_filter.lng | 1
interface/web/mailuser/lib/lang/se_mail_user_cc.lng | 1
interface/web/admin/lib/lang/de_server_config.lng | 52
interface/web/admin/lib/lang/nl_server_config.lng | 52
interface/web/designer/lib/lang/se_form_show.lng | 1
interface/web/sites/lib/lang/en_web_folder_user_list.lng | 1
interface/web/sites/lib/lang/se_web_sites_stats_list.lng | 1
interface/web/admin/lib/lang/se_software_package_list.lng | 1
interface/web/sites/lib/lang/nl_web_folder_list.lng | 1
interface/web/sites/lib/lang/se_database_list.lng | 1
interface/web/admin/lib/lang/se_remote_user_list.lng | 1
interface/web/admin/lib/lang/se_groups.lng | 1
interface/web/help/lib/lang/se.lng | 1
interface/web/admin/lib/lang/se_language_list.lng | 1
interface/web/designer/lib/lang/se.lng | 1
interface/web/client/lib/lang/fr_client.lng | 2
interface/web/sites/lib/lang/fr_aps.lng | 16
interface/web/sites/lib/lang/ja_shell_user.lng | 3
interface/web/dns/lib/lang/en_dns_soa_admin_list.lng | 11
interface/web/sites/lib/lang/hu_ftp_user.lng | 2
interface/web/mailuser/lib/lang/se_mail_user_autoresponder.lng | 1
interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng | 11
install/tpl/opensuse_postfix.conf.master | 6
interface/web/admin/templates/server_config_server_edit.htm | 4
interface/web/sites/lib/lang/cz_web_folder_list.lng | 1
interface/web/admin/language_edit.php | 2
install/tpl/apps_php_fpm_pool.conf.master | 2
interface/web/admin/lib/lang/ru_server_config.lng | 52
install/lib/install.lib.php | 21
interface/web/mailuser/lib/lang/se_index.lng | 1
interface/web/admin/lib/lang/se_system_config.lng | 3
interface/web/sites/lib/lang/ar_web_folder_list.lng | 1
interface/web/sites/lib/lang/id_shell_user.lng | 3
server/plugins-available/shelluser_jailkit_plugin.inc.php | 14
server/plugins-available/cron_jailkit_plugin.inc.php | 16
docs/autoinstall_samples/autoinstall.ini.sample | 50
interface/web/admin/lib/lang/en_server_config.lng | 52
server/scripts/ispconfig_update.php | 4
interface/web/sites/lib/lang/id_ftp_user.lng | 2
interface/web/admin/lib/lang/se_server_ip_list.lng | 1
interface/web/dns/lib/lang/es_dns_slave_admin_list.lng | 10
interface/web/mail/lib/lang/se_mail_alias.lng | 1
interface/web/sites/lib/lang/sk_web_folder_list.lng | 1
interface/web/dns/lib/lang/ro_dns_slave_admin_list.lng | 10
interface/web/dns/lib/lang/se_dns_txt.lng | 1
interface/web/mail/lib/lang/se_mail_get_list.lng | 1
interface/web/sites/lib/lang/se_webdav_user.lng | 1
interface/web/strengthmeter/lib/lang/se_strengthmeter.lng | 1
interface/web/vm/lib/lang/se.lng | 1
interface/web/admin/lib/lang/se_software_package.lng | 1
interface/web/sites/lib/lang/cz_web_folder_user_list.lng | 1
interface/web/sites/lib/lang/fr_web_folder_user_list.lng | 1
interface/web/admin/lib/lang/hu_server_config.lng | 52
interface/web/admin/lib/lang/el_server_config.lng | 52
server/plugins-available/apache2_plugin.inc.php | 35
interface/web/tools/lib/lang/se_index.lng | 1
interface/web/help/lib/lang/se_faq_form.lng | 1
interface/web/dns/lib/lang/se_dns_import.lng | 1
interface/web/mail/lib/lang/se_mail_forward.lng | 1
interface/web/sites/lib/lang/ar_web_folder_user_list.lng | 1
interface/web/sites/web_vhost_subdomain_edit.php | 2
interface/lib/classes/session.inc.php | 21
interface/web/sites/lib/lang/se_database_user.lng | 1
interface/web/sites/lib/lang/sk_web_folder_user_list.lng | 1
interface/web/dns/lib/lang/br_dns_slave_admin_list.lng | 10
interface/web/mail/lib/lang/se_mail_aliasdomain.lng | 1
interface/lib/config.inc.php | 2
interface/web/sites/lib/lang/hr_web_folder_user_list.lng | 1
interface/web/sites/lib/lang/hu_shell_user.lng | 3
interface/web/dns/lib/lang/se_dns_a_list.lng | 1
interface/web/sites/lib/lang/it_ftp_user.lng | 2
interface/web/tools/lib/lang/se_interface.lng | 1
interface/web/mail/lib/lang/se_mail_user_filter_list.lng | 1
interface/web/designer/lib/lang/se_module_nav_item_edit.lng | 1
interface/web/sites/lib/lang/el_ftp_user.lng | 2
interface/web/help/lib/lang/se_faq_manage_questions_list.lng | 1
interface/web/admin/lib/lang/se.lng | 1
interface/web/sites/lib/lang/pl_web_folder_list.lng | 1
interface/web/admin/lib/lang/ro_server_config.lng | 52
interface/web/sites/lib/lang/hu_web_folder_list.lng | 1
install/tpl/opensuse_dovecot-sql.conf.master | 4
server/plugins-available/nginx_plugin.inc.php | 16
install/tpl/apache_ispconfig.conf.master | 3
interface/web/admin/lib/lang/br_server_config.lng | 52
interface/web/admin/lib/lang/hr_server_config.lng | 52
interface/web/sites/lib/lang/bg_ftp_user.lng | 2
interface/web/sites/lib/lang/ja_web_folder_user_list.lng | 1
interface/web/monitor/lib/lang/se_syslog_list.lng | 1
interface/web/designer/lib/lang/se_form_list.lng | 1
interface/web/dns/lib/lang/fr_dns_soa_admin_list.lng | 11
interface/web/dns/lib/lang/se_dns_mx.lng | 1
interface/web/admin/lib/lang/se_remote_user.lng | 1
server/plugins-available/cron_plugin.inc.php | 9
install/tpl/gentoo_postfix.conf.master | 2
interface/web/dns/lib/lang/se_dns_hinfo.lng | 1
interface/web/admin/lib/lang/se_firewall_list.lng | 1
server/plugins-available/shelluser_base_plugin.inc.php | 14
interface/web/mailuser/lib/lang/se_mail_user_filter.lng | 1
interface/web/sites/lib/lang/se_aps_update_packagelist.lng | 1
interface/web/sites/lib/lang/bg_shell_user.lng | 3
interface/lib/classes/validate_password.inc.php | 5
interface/web/dns/lib/lang/ar_dns_soa_admin_list.lng | 11
interface/web/admin/lib/lang/ja_server_config.lng | 52
interface/web/mail/lib/lang/se_mail_get.lng | 3
interface/web/sites/web_aliasdomain_edit.php | 10
interface/web/dns/lib/lang/hr_dns_slave_admin_list.lng | 10
interface/web/mail/lib/lang/se_spamfilter_blacklist.lng | 1
interface/web/admin/lib/lang/tr_server_config.lng | 52
interface/lib/classes/validate_domain.inc.php | 137 -
interface/web/monitor/lib/lang/se_datalog_list.lng | 1
interface/web/dns/lib/lang/el_dns_slave_admin_list.lng | 10
server/conf/vhost.conf.master | 40
interface/web/sites/lib/lang/se_aps.lng | 17
interface/web/tools/lib/lang/se.lng | 1
interface/web/sites/lib/lang/hr_web_folder_list.lng | 1
interface/web/dns/lib/lang/se_dns_slave_list.lng | 1
interface/web/help/lib/lang/se_support_message_list.lng | 1
interface/web/sites/lib/lang/nl_shell_user.lng | 3
interface/web/admin/lib/lang/se_server_config.lng | 53
interface/web/dns/lib/lang/ru_dns_slave_admin_list.lng | 10
interface/web/mail/lib/lang/se_spamfilter_users.lng | 1
interface/web/mail/lib/lang/se_spamfilter_config_list.lng | 1
interface/web/sites/lib/lang/es_shell_user.lng | 3
interface/web/admin/form/system_config.tform.php | 2
interface/web/sites/lib/lang/ro_ftp_user.lng | 2
interface/web/mail/lib/lang/se_mail_relay_recipient.lng | 1
interface/web/sites/lib/lang/el_shell_user.lng | 3
interface/web/sites/lib/lang/en_web_folder_list.lng | 1
interface/web/dns/lib/lang/it_dns_slave_admin_list.lng | 10
interface/web/sites/lib/lang/de_web_folder_list.lng | 1
interface/web/sites/lib/lang/id_web_folder_user_list.lng | 1
interface/web/admin/lib/lang/fr_system_config.lng | 2
interface/web/mail/form/mail_whitelist.tform.php | 2
interface/web/mail/lib/lang/se_spamfilter_whitelist_list.lng | 1
interface/web/client/lib/lang/se_client_template_list.lng | 1
interface/web/sites/lib/lang/fi_shell_user.lng | 3
interface/web/sites/lib/lang/se_database_user_admin_list.lng | 1
interface/web/sites/lib/lang/tr_ftp_user.lng | 2
interface/web/admin/lib/lang/se_language_complete.lng | 1
interface/web/sites/lib/lang/el_web_folder_list.lng | 1
interface/web/mail/lib/lang/se_mail_domain.lng | 1
interface/web/designer/lib/lang/se_form_edit.lng | 1
install/tpl/fedora_dovecot-sql.conf.master | 4
interface/web/dns/lib/lang/se_dns_wizard.lng | 1
interface/web/mail/lib/lang/se_mail_domain_list.lng | 1
install/dist/lib/opensuse.lib.php | 12
interface/web/sites/lib/lang/fi_web_folder_list.lng | 1
interface/web/sites/web_domain_edit.php | 6
interface/web/admin/lib/lang/se_tpl_default_admin.lng | 1
interface/web/admin/lib/lang/cz_server_config.lng | 52
interface/web/sites/lib/lang/se.lng | 3
interface/web/mail/lib/lang/se_mail_alias_list.lng | 1
interface/web/vm/lib/lang/se_openvz_template_list.lng | 1
interface/lib/app.inc.php | 6
server/plugins-available/firewall_plugin.inc.php | 30
interface/web/vm/lib/lang/se_openvz_ip_list.lng | 1
server/lib/classes/ispcmail.inc.php | 869 ++++++++++
interface/web/vm/lib/lang/se_openvz_ostemplate_list.lng | 1
install/dist/lib/fedora.lib.php | 10
interface/web/dns/lib/lang/se_dns_a.lng | 1
interface/web/admin/lib/lang/se_users_list.lng | 1
interface/web/dns/lib/lang/it_dns_soa_admin_list.lng | 11
interface/web/sites/lib/lang/se_database_user_list.lng | 1
install/lib/installer_base.lib.php | 52
interface/web/sites/lib/lang/se_web_domain_list.lng | 1
interface/web/mail/lib/lang/se_mail_content_filter.lng | 1
interface/web/sites/form/ftp_user.tform.php | 21
interface/web/sites/lib/lang/id_web_folder_list.lng | 1
interface/web/client/lib/lang/se_domain_list.lng | 1
interface/web/sites/lib/lang/se_aps_packages_list.lng | 1
interface/web/dns/lib/lang/id_dns_slave_admin_list.lng | 10
interface/web/mail/lib/lang/se_mail_blacklist_list.lng | 1
interface/web/client/lib/lang/se_domain.lng | 1
interface/web/dns/lib/lang/se.lng | 1
interface/web/admin/lib/lang/se_software_package_install.lng | 1
interface/web/dns/lib/lang/se_dns_srv.lng | 1
interface/web/mail/lib/lang/se_mail_forward_list.lng | 1
interface/web/admin/lib/lang/se_language_import.lng | 1
interface/web/admin/lib/lang/se_remote_action.lng | 1
interface/web/mailuser/lib/lang/se_mail_user_filter_list.lng | 1
interface/web/mail/lib/lang/se_mail_aliasdomain_list.lng | 1
interface/web/sites/lib/lang/tr_web_folder_user_list.lng | 1
interface/web/dns/lib/lang/se_dns_aaaa.lng | 1
interface/web/sites/lib/lang/bg_web_folder_user_list.lng | 1
interface/web/sites/lib/lang/en_ftp_user.lng | 2
interface/web/admin/lib/lang/se_server.lng | 1
interface/web/mail/lib/lang/se_mail_transport_list.lng | 1
interface/web/sites/lib/lang/se_database.lng | 1
interface/web/mail/mail_domain_edit.php | 11
interface/web/mail/lib/lang/fr_mail_get.lng | 2
interface/web/admin/lib/lang/se_directive_snippets_list.lng | 1
interface/web/client/lib/lang/se_client_circle.lng | 1
interface/web/admin/lib/lang/it_server_config.lng | 52
install/tpl/fedora_postfix.conf.master | 4
interface/web/client/lib/lang/se_client_circle_list.lng | 1
interface/web/monitor/lib/lang/se.lng | 1
interface/web/sites/lib/lang/ro_web_folder_user_list.lng | 1
interface/web/dns/list/dns_slave.list.php | 22
interface/web/dns/lib/lang/hr_dns_soa_admin_list.lng | 11
interface/web/client/lib/lang/se_client_message_template.lng | 1
interface/web/mail/mail_user_edit.php | 3
interface/web/dns/lib/lang/nl_dns_slave_admin_list.lng | 10
interface/web/tools/lib/lang/se_tpl_default.lng | 1
interface/web/mailuser/lib/lang/se.lng | 1
interface/web/mailuser/mail_user_password_edit.php | 3
server/plugins-available/mysql_clientdb_plugin.inc.php | 11
interface/web/tools/lib/lang/se_import_ispconfig.lng | 1
interface/web/sites/lib/lang/pt_shell_user.lng | 3
interface/web/admin/lib/lang/se_software_repo.lng | 1
interface/web/vm/lib/lang/se_openvz_ostemplate.lng | 1
interface/web/dns/lib/lang/cz_dns_slave_admin_list.lng | 10
interface/web/sites/lib/lang/de_ftp_user.lng | 2
server/plugins-available/backup_plugin.inc.php | 4
interface/web/dns/lib/lang/sk_dns_slave_admin_list.lng | 10
interface/web/mail/lib/lang/se_mail_spamfilter_list.lng | 1
interface/web/admin/lib/lang/fi_server_config.lng | 52
interface/web/themes/default_no_navimg/templates/main.tpl.htm | 1
interface/web/sites/lib/lang/tr_web_folder_list.lng | 1
interface/web/sites/lib/lang/se_webdav_user_list.lng | 1
interface/web/admin/lib/lang/el_system_config.lng | 2
docs/autoinstall_samples/autoinstall.conf_sample.php | 52
interface/web/client/lib/lang/se_client_message.lng | 1
interface/web/sites/lib/lang/se_ftp_user_list.lng | 1
interface/web/vm/lib/lang/se_openvz_vm.lng | 1
interface/web/admin/lib/lang/se_directive_snippets.lng | 1
install/tpl/debian_dovecot-sql.conf.master | 4
interface/web/admin/lib/lang/se_server_php_list.lng | 1
install/tpl/debian_postfix.conf.master | 4
interface/web/designer/lib/lang/se_module_show.lng | 1
interface/web/dns/lib/lang/pt_dns_soa_admin_list.lng | 11
interface/web/mail/lib/lang/se_mail_content_filter_list.lng | 1
interface/web/sites/lib/lang/fr.lng | 2
server/lib/classes/monitor_tools.inc.php | 21
interface/web/sites/lib/lang/se_aps_instances_list.lng | 1
interface/web/client/lib/lang/se_client_template.lng | 1
interface/web/dns/lib/lang/tr_dns_slave_admin_list.lng | 10
interface/web/designer/lib/lang/se_module_nav_edit.lng | 1
interface/web/dns/lib/lang/se_dns_ns.lng | 1
interface/web/themes/default-304/templates/main.tpl.htm | 1
interface/web/client/lib/lang/se_client.lng | 3
interface/web/help/lib/lang/se_faq_sections_form.lng | 1
interface/web/dns/lib/lang/ja_dns_slave_admin_list.lng | 10
interface/web/sites/form/database.tform.php | 4
interface/web/mail/lib/lang/se_user_quota_stats_list.lng | 1
interface/web/dns/lib/lang/bg_dns_slave_admin_list.lng | 10
interface/web/sites/lib/lang/se_web_folder.lng | 1
interface/web/sites/lib/lang/ar_ftp_user.lng | 2
server/lib/classes/system.inc.php | 65
interface/web/dns/templates/dns_soa_admin_list.htm | 86 +
interface/lib/lang/el.lng | 2
interface/web/sites/lib/lang/se_cron.lng | 1
interface/web/themes/default_combobox/templates/main.tpl.htm | 1
interface/web/sites/lib/lang/fi_ftp_user.lng | 2
interface/web/dns/lib/lang/fr_dns_slave_admin_list.lng | 10
interface/web/dns/lib/lang/se_dns_soa.lng | 1
install/install.php | 111
interface/web/dns/lib/lang/bg_dns_soa_admin_list.lng | 11
interface/web/sites/lib/lang/se_web_vhost_subdomain_list.lng | 1
interface/web/sites/lib/lang/br_ftp_user.lng | 2
interface/web/dns/lib/lang/el_dns_soa_admin_list.lng | 11
interface/web/sites/lib/lang/el_web_folder_user_list.lng | 1
interface/web/sites/lib/lang/fr_web_subdomain.lng | 2
interface/web/dns/lib/lang/de_dns_soa_admin_list.lng | 11
interface/web/mailuser/lib/lang/se_mail_user_spamfilter.lng | 1
interface/web/dashboard/lib/lang/se_dashlet_modules.lng | 1
interface/web/sites/lib/lang/se_web_aliasdomain.lng | 1
install/sql/ispconfig3.sql | 8
interface/web/admin/lib/lang/pl_server_config.lng | 52
interface/web/mail/lib/lang/se_mail_domain_catchall_list.lng | 1
interface/web/mail/lib/lang/se_mail_user.lng | 1
interface/web/sites/lib/lang/ja_ftp_user.lng | 2
interface/web/client/lib/lang/se_reseller.lng | 1
interface/web/dns/lib/lang/es_dns_soa_admin_list.lng | 11
interface/web/sites/lib/lang/en_shell_user.lng | 3
interface/web/dns/lib/lang/ro_dns_soa_admin_list.lng | 11
interface/web/js/scrigo.js.php | 2
interface/web/sites/lib/lang/bg_web_folder_list.lng | 1
interface/web/sites/lib/lang/br_shell_user.lng | 3
interface/web/vm/lib/lang/se_openvz_vm_list.lng | 1
interface/web/sites/lib/lang/se_database_admin_list.lng | 1
interface/web/dns/lib/lang/fi_dns_slave_admin_list.lng | 10
interface/web/mail/lib/lang/se_mail_domain_catchall.lng | 1
interface/web/sites/lib/lang/ru_web_folder_user_list.lng | 1
interface/web/admin/lib/lang/se_server_list.lng | 1
interface/web/themes/blue/ispconfig_version | 2
interface/web/admin/lib/lang/se_server_php.lng | 1
interface/web/mail/lib/lang/se_mail_mailinglist_list.lng | 1
interface/web/mail/lib/lang/se_mail_transport.lng | 1
interface/web/admin/lib/lang/sk_server_config.lng | 52
server/conf/apps_php_fpm_pool.conf.master | 2
interface/web/dns/lib/lang/nl_dns_soa_admin_list.lng | 11
interface/web/sites/lib/lang/it_web_folder_user_list.lng | 1
interface/web/sites/lib/lang/es_web_folder_list.lng | 1
interface/web/admin/lib/lang/id_server_config.lng | 52
interface/web/sites/lib/lang/se_web_subdomain_list.lng | 1
interface/web/dns/lib/lang/se_dns_slave.lng | 1
interface/web/admin/lib/lang/se_software_update_list.lng | 1
interface/web/sites/lib/lang/ja_web_folder_list.lng | 1
interface/web/dns/lib/lang/se_dns_cname.lng | 1
interface/web/dns/lib/lang/se_dns_soa_admin_list.lng | 11
interface/web/mail/form/mail_user_filter.tform.php | 2
interface/web/admin/form/server_config.tform.php | 368 +++-
interface/web/mail/lib/lang/se_mail_blacklist.lng | 1
interface/web/sites/lib/lang/se_web_vhost_subdomain.lng | 1
interface/web/dns/lib/lang/de_dns_slave_admin_list.lng | 10
interface/web/sites/shell_user_edit.php | 7
interface/web/sites/lib/lang/se_cron_list.lng | 1
interface/web/sites/form/shell_user.tform.php | 27
interface/web/sites/lib/lang/tr_shell_user.lng | 3
interface/web/sites/lib/lang/se_web_aliasdomain_list.lng | 1
interface/web/sites/lib/lang/hr_shell_user.lng | 3
server/cron_daily.php | 12
interface/web/admin/lib/lang/fr_server_config.lng | 52
interface/web/designer/lib/lang/se_module_edit.lng | 1
interface/web/themes/default/templates/main.tpl.htm | 1
interface/web/dns/lib/lang/fi_dns_soa_admin_list.lng | 11
interface/web/sites/lib/lang/cz_shell_user.lng | 3
interface/web/sites/lib/lang/sk_ftp_user.lng | 2
interface/web/sites/lib/lang/se_shell_user_list.lng | 1
interface/web/client/lib/lang/fr_reseller.lng | 2
interface/web/client/lib/lang/se.lng | 1
interface/web/help/lib/lang/se_help_faq_sections_list.lng | 1
interface/web/vm/lib/lang/se_openvz_template.lng | 1
interface/web/dns/list/dns_soa.list.php | 22
interface/web/admin/lib/lang/ar_server_config.lng | 52
interface/web/dns/lib/lang/pt_dns_slave_admin_list.lng | 10
interface/lib/classes/aps_guicontroller.inc.php | 2
interface/web/client/lib/lang/se_client_del.lng | 1
interface/web/sites/lib/lang/es_ftp_user.lng | 2
interface/web/sites/lib/lang/se_web_folder_user.lng | 1
interface/web/sites/lib/lang/se_user_quota_stats_list.lng | 1
interface/lib/classes/validate_systemuser.inc.php | 64
interface/web/sites/lib/lang/se_web_subdomain.lng | 3
interface/web/dns/templates/dns_slave_admin_list.htm | 83 +
interface/web/dns/lib/lang/se_dns_alias.lng | 1
interface/web/mail/lib/lang/se_mail_whitelist.lng | 1
interface/web/sites/lib/lang/ru_shell_user.lng | 3
interface/web/admin/lib/lang/se_server_config_list.lng | 1
interface/web/sites/lib/lang/fi_web_folder_user_list.lng | 1
interface/web/dns/lib/lang/sk_dns_soa_admin_list.lng | 11
interface/web/sites/lib/lang/de_web_folder_user_list.lng | 1
interface/web/dashboard/lib/lang/se_dashlet_mailquota.lng | 1
install/tpl/php_fpm_pool.conf.master | 2
interface/web/dns/lib/lang/br_dns_soa_admin_list.lng | 11
interface/web/dns/lib/lang/ja_dns_soa_admin_list.lng | 11
interface/web/admin/lib/lang/se_package_install.lng | 1
interface/web/admin/lib/lang/se_iptables.lng | 1
interface/web/sites/lib/lang/br_web_folder_user_list.lng | 1
interface/web/dns/lib/lang/ar_dns_slave_admin_list.lng | 10
install/tpl/debian6_dovecot-sql.conf.master | 4
interface/web/sites/lib/lang/ro_shell_user.lng | 3
interface/web/client/lib/lang/se_clients_list.lng | 1
interface/web/mail/lib/lang/se_spamfilter_whitelist.lng | 1
interface/web/sites/lib/lang/ro_web_folder_list.lng | 1
interface/web/dashboard/lib/lang/se_dashlet_limits.lng | 1
interface/web/dns/lib/lang/se_dns_soa_list.lng | 1
interface/web/mail/lib/lang/se_mail_mailinglist.lng | 1
interface/web/dashboard/lib/lang/se_dashlet_quota.lng | 1
interface/web/sites/lib/lang/se_web_domain_admin_list.lng | 1
interface/web/mail/lib/lang/se_mail_domain_admin_list.lng | 1
interface/web/admin/lib/lang/se_software_repo_list.lng | 1
interface/web/sites/lib/lang/fr_web_folder_list.lng | 1
interface/web/vm/lib/lang/se_openvz_action.lng | 1
interface/web/sites/lib/lang/ru_web_folder_list.lng | 1
interface/web/admin/lib/lang/se_language_export.lng | 1
interface/web/mail/lib/lang/se_spamfilter_config.lng | 1
server/plugins-available/mail_plugin.inc.php | 14
interface/web/dns/lib/lang/cz_dns_soa_admin_list.lng | 11
interface/web/sites/lib/lang/se_web_folder_user_list.lng | 2
interface/web/mail/lib/lang/se_spamfilter_policy_list.lng | 1
interface/web/dns/lib/lang/pl_dns_soa_admin_list.lng | 11
interface/web/dns/lib/lang/hu_dns_slave_admin_list.lng | 10
interface/web/tools/lib/lang/se_usersettings.lng | 1
interface/web/sites/lib/lang/de_shell_user.lng | 3
server/conf/apache_ispconfig.conf.master | 2
interface/web/mail/lib/lang/se_mail_user_stats_list.lng | 1
install/sql/incremental/upd_0078.sql | 1
interface/lib/classes/tform.inc.php | 10
interface/web/sites/lib/lang/it_shell_user.lng | 3
interface/web/dns/lib/lang/se_dns_template.lng | 1
interface/web/dns/lib/lang/pl_dns_slave_admin_list.lng | 10
interface/web/admin/templates/users_list.htm | 2
interface/web/sites/lib/lang/se_shell_user.lng | 4
server/plugins-available/bind_dlz_plugin.inc.php | 10
interface/web/admin/lib/lang/bg_server_config.lng | 52
interface/web/sites/lib/lang/cz_ftp_user.lng | 2
interface/lib/lang/fr.lng | 2
install/tpl/config.inc.php.master | 2
interface/web/sites/lib/lang/hr_ftp_user.lng | 2
interface/web/sites/lib/lang/pt_web_folder_user_list.lng | 1
interface/web/vm/lib/lang/se_openvz_ip.lng | 1
install/update.php | 73
interface/web/client/lib/lang/se_resellers_list.lng | 1
interface/web/sites/lib/lang/pl_shell_user.lng | 3
interface/web/sites/lib/lang/nl_web_folder_user_list.lng | 1
interface/web/dns/lib/lang/en_dns_slave_admin_list.lng | 10
interface/web/sites/lib/lang/br_web_folder_list.lng | 1
interface/web/mail/lib/lang/se_spamfilter_policy.lng | 1
server/plugins-available/network_settings_plugin.inc.php | 51
interface/web/mail/lib/lang/se_spamfilter_blacklist_list.lng | 1
interface/web/themes/default_64_navimg/templates/main.tpl.htm | 1
interface/web/sites/ftp_user_edit.php | 7
interface/lib/lang/se.lng | 3
interface/lib/classes/auth.inc.php | 2
interface/web/dashboard/lib/lang/se.lng | 1
interface/web/mailuser/lib/lang/se_mail_user_password.lng | 1
interface/web/sites/web_subdomain_edit.php | 9
interface/web/client/lib/lang/se_client_message_template_list.lng | 1
interface/web/designer/lib/lang/se_module_list.lng | 1
interface/web/dns/lib/lang/se_dns_ptr.lng | 1
interface/web/sites/lib/lang/ru_ftp_user.lng | 2
interface/web/admin/lib/lang/se_firewall.lng | 1
interface/lib/classes/functions.inc.php | 28
interface/web/dns/lib/lang/id_dns_soa_admin_list.lng | 11
interface/web/mail/lib/lang/se.lng | 1
interface/web/admin/lib/lang/se_iptables_list.lng | 1
interface/web/mail/lib/lang/se_spamfilter_users_list.lng | 1
interface/web/dns/lib/lang/se_dns_slave_admin_list.lng | 10
interface/web/sites/lib/lang/ar_shell_user.lng | 3
interface/web/dns/lib/lang/ru_dns_soa_admin_list.lng | 11
interface/web/client/lib/lang/el_reseller.lng | 2
install/tpl/server.ini.master | 1
interface/web/login/lib/lang/se.lng | 1
interface/web/admin/lib/lang/se_language_add.lng | 1
interface/web/sites/lib/lang/fr_ftp_user.lng | 2
interface/web/admin/lib/lang/se_server_ip.lng | 1
interface/web/help/lib/lang/se_help_faq_list.lng | 1
interface/web/sites/lib/lang/sk_shell_user.lng | 3
interface/web/sites/lib/lang/nl_ftp_user.lng | 2
interface/web/sites/lib/lang/se_web_folder_list.lng | 2
interface/web/sites/lib/lang/hu_web_folder_user_list.lng | 1
interface/lib/classes/listform.inc.php | 6
interface/web/mail/lib/lang/se_mail_relay_recipient_list.lng | 1
interface/web/sites/lib/lang/pl_ftp_user.lng | 2
interface/web/login/lib/lang/se_login_as.lng | 7
interface/web/dns/lib/lang/se_dns_rp.lng | 1
install/dist/lib/gentoo.lib.php | 10
interface/web/admin/lib/lang/se_groups_list.lng | 1
interface/web/themes/blue/templates/main.tpl.htm | 1
interface/web/sites/lib/lang/pt_web_folder_list.lng | 1
interface/web/sites/lib/lang/it_web_folder_list.lng | 1
interface/web/admin/lib/lang/se_users.lng | 1
/dev/null | 12
interface/web/dns/lib/lang/hu_dns_soa_admin_list.lng | 11
interface/web/sites/lib/lang/pl_web_folder_user_list.lng | 1
interface/web/mail/lib/lang/se_mail_user_list.lng | 1
install/dist/lib/debian60.lib.php | 1
interface/web/sites/lib/lang/es_web_folder_user_list.lng | 1
interface/web/sites/lib/lang/pt_ftp_user.lng | 2
interface/web/admin/lib/lang/pt_server_config.lng | 52
interface/web/mail/lib/lang/se_mail_spamfilter.lng | 1
interface/web/mail/lib/lang/se_mail_whitelist_list.lng | 1
460 files changed, 4,088 insertions(+), 719 deletions(-)
diff --git a/docs/autoinstall_samples/autoinstall.conf_sample.php b/docs/autoinstall_samples/autoinstall.conf_sample.php
new file mode 100644
index 0000000..ccd36aa
--- /dev/null
+++ b/docs/autoinstall_samples/autoinstall.conf_sample.php
@@ -0,0 +1,52 @@
+<?php
+$autoinstall['language'] = 'en'; // de, en (default)
+$autoinstall['install_mode'] = 'standard'; // standard (default), expert
+
+$autoinstall['hostname'] = 'server1.example.com'; // default
+$autoinstall['mysql_hostname'] = 'localhost'; // default: localhost
+$autoinstall['mysql_root_user'] = 'root'; // default: root
+$autoinstall['mysql_root_password'] = 'howtoforge';
+$autoinstall['mysql_database'] = 'dbispconfig'; // default: dbispcongig
+$autoinstall['mysql_charset'] = 'utf8'; // default: utf8
+$autoinstall['http_server'] = 'nginx'; // apache (default), nginx
+$autoinstall['ispconfig_port'] = '8080'; // default: 8080
+$autoinstall['ispconfig_use_ssl'] = 'y'; // y (default), n
+
+/* SSL Settings */
+$autoinstall['ssl_cert_country'] = 'AU';
+$autoinstall['ssl_cert_state'] = 'Some-State';
+$autoinstall['ssl_cert_locality'] = 'Chicago';
+$autoinstall['ssl_cert_organisation'] = 'Internet Widgits Pty Ltd';
+$autoinstall['ssl_cert_organisation_unit'] = 'IT department';
+$autoinstall['ssl_cert_common_name'] = $autoinstall['hostname'];
+
+/* optional expert mode settings, needed only for expert mode */
+$autoinstall['mysql_ispconfig_user'] = 'ispconfig'; // default: ispconfig
+$autoinstall['mysql_ispconfig_password'] = md5(uniqid(rand()));
+$autoinstall['join_multiserver_setup'] = 'n'; // y, n (default)
+$autoinstall['mysql_master_hostname'] = 'master.example.com';
+$autoinstall['mysql_master_root_user'] = 'root';
+$autoinstall['mysql_master_root_password'] = 'howtoforge';
+$autoinstall['mysql_master_database'] = 'dbispconfig'; // default: dbispconfig
+$autoinstall['configure_mail'] = 'y'; // y (default), n
+$autoinstall['configure_jailkit'] = 'y'; // y (default), n
+$autoinstall['configure_ftp'] = 'y'; // y (default), n
+$autoinstall['configure_dns'] = 'y'; // y (default), n
+$autoinstall['configure_apache'] = 'y'; // y (default), n
+$autoinstall['configure_nginx'] = 'y'; // y (default), n
+$autoinstall['configure_firewall'] = 'y'; // y (default), n
+$autoinstall['install_ispconfig_web_interface'] = 'y'; // y (default), n
+
+/* optional update settings, needed only for updates */
+$autoupdate['do_backup'] = 'yes'; // yes (default), no
+$autoupdate['mysql_root_password'] = 'howtoforge';
+$autoupdate['mysql_master_hostname'] = 'master.example.com';
+$autoupdate['mysql_master_root_user'] = 'root';
+$autoupdate['mysql_master_root_password'] = 'howtoforge';
+$autoupdate['mysql_master_database'] = 'dbispconfig'; // default: dbispconfig
+$autoupdate['reconfigure_permissions_in_master_database'] = 'no'; // no (default), yes
+$autoupdate['reconfigure_services'] = 'yes'; // yes (default), no
+$autoupdate['ispconfig_port'] = '8080'; // default: 8080
+$autoupdate['create_new_ispconfig_ssl_cert'] = 'no'; // no (default), yes
+$autoupdate['reconfigure_crontab'] = 'yes'; // yes (default), no
+?>
\ No newline at end of file
diff --git a/docs/autoinstall_samples/autoinstall.ini.sample b/docs/autoinstall_samples/autoinstall.ini.sample
new file mode 100644
index 0000000..1f4d9d7
--- /dev/null
+++ b/docs/autoinstall_samples/autoinstall.ini.sample
@@ -0,0 +1,50 @@
+[install]
+language=en
+install_mode=standard
+hostname=server1.example.com
+mysql_hostname=localhost
+mysql_root_user=root
+mysql_root_password=ispconfig
+mysql_database=dbispconfig
+mysql_charset=utf8
+http_server=apache
+ispconfig_port=8080
+ispconfig_use_ssl=y
+
+[ssl_cert]
+ssl_cert_country=AU
+ssl_cert_state=Some-State
+ssl_cert_locality=Chicago
+ssl_cert_organisation=Internet Widgits Pty Ltd
+ssl_cert_organisation_unit=IT department
+ssl_cert_common_name=server1.example.com
+
+[expert]
+mysql_ispconfig_user=ispconfig
+mysql_ispconfig_password=afStEratXBsgatRtsa42CadwhQ
+join_multiserver_setup=n
+mysql_master_hostname=master.example.com
+mysql_master_root_user=root
+mysql_master_root_password=ispconfig
+mysql_master_database=dbispconfig
+configure_mail=y
+configure_jailkit=y
+configure_ftp=y
+configure_dns=y
+configure_apache=y
+configure_nginx=y
+configure_firewall=y
+install_ispconfig_web_interface=y
+
+[update]
+do_backup=yes
+mysql_root_password=ispconfig
+mysql_master_hostname=master.example.com
+mysql_master_root_user=root
+mysql_master_root_password=ispconfig
+mysql_master_database=dbispconfig
+reconfigure_permissions_in_master_database=no
+reconfigure_services=yes
+ispconfig_port=8080
+create_new_ispconfig_ssl_cert=no
+reconfigure_crontab=yes
\ No newline at end of file
diff --git a/install/autoupdate.php b/install/autoupdate.php
deleted file mode 100644
index 8960e13..0000000
--- a/install/autoupdate.php
+++ /dev/null
@@ -1,338 +0,0 @@
-<?php
-/*
-Copyright (c) 2007-2010, Till Brehm, projektfarm Gmbh
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- * Neither the name of ISPConfig nor the names of its contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- ISPConfig 3 updater.
-*/
-
-die("Autoupdate has been removed.\nPlease start the update on the shell with the command ispconfig_update.sh as root user.\n");
-
-error_reporting(E_ALL|E_STRICT);
-
-/*
- * If the auto-updater flag is not on (the file does not exist) then cancel the auto-update!
-*/
-if (!file_exists('autoupdate')) {
-
- //** The banner on the command line
- echo "\n\n".str_repeat('-', 80)."\n";
- echo " _____ ___________ _____ __ _ ____
-|_ _/ ___| ___ \ / __ \ / _(_) /__ \
- | | \ `--.| |_/ / | / \/ ___ _ __ | |_ _ __ _ _/ /
- | | `--. \ __/ | | / _ \| '_ \| _| |/ _` | |_ |
- _| |_/\__/ / | | \__/\ (_) | | | | | | | (_| | ___\ \
- \___/\____/\_| \____/\___/|_| |_|_| |_|\__, | \____/
- __/ |
- |___/ ";
- echo "\n".str_repeat('-', 80)."\n";
- echo "\n\n>>This script is for internal use only! Please use update.php! \n\n";
- exit;
-}
-
-//** Include the library with the basic installer functions
-require_once 'lib/install.lib.php';
-
-//** Include the library with the basic updater functions
-require_once 'lib/update.lib.php';
-
-//** Include the base class of the installer class
-require_once 'lib/installer_base.lib.php';
-
-//** Ensure that current working directory is install directory
-$cur_dir = getcwd();
-if(realpath(dirname(__FILE__)) != $cur_dir) die("Please run installation/update from _inside_ the install directory!\n");
-
-//** Install logfile
-define('ISPC_LOG_FILE', '/var/log/ispconfig_install.log');
-define('ISPC_INSTALL_ROOT', realpath(dirname(__FILE__).'/../'));
-
-//** Get distribution identifier
-$dist = get_distname();
-
-include_once "/usr/local/ispconfig/server/lib/config.inc.php";
-$conf_old = $conf;
-unset($conf);
-
-if($dist['id'] == '') die('Linux distribution or version not recognized.');
-
-//** Include the distribution-specific installer class library and configuration
-if(is_file('dist/lib/'.$dist['baseid'].'.lib.php')) include_once 'dist/lib/'.$dist['baseid'].'.lib.php';
-include_once 'dist/lib/'.$dist['id'].'.lib.php';
-include_once 'dist/conf/'.$dist['id'].'.conf.php';
-
-//** Get hostname
-exec('hostname -f', $tmp_out);
-$conf['hostname'] = $tmp_out[0];
-unset($tmp_out);
-
-//** Set the mysql login information
-$conf["mysql"]["host"] = $conf_old["db_host"];
-$conf["mysql"]["database"] = $conf_old["db_database"];
-$conf['mysql']['charset'] = 'utf8';
-$conf["mysql"]["ispconfig_user"] = $conf_old["db_user"];
-$conf["mysql"]["ispconfig_password"] = $conf_old["db_password"];
-$conf['language'] = $conf_old['language'];
-if($conf['language'] == '{language}') $conf['language'] = 'en';
-
-if(isset($conf_old["dbmaster_host"])) $conf["mysql"]["master_host"] = $conf_old["dbmaster_host"];
-if(isset($conf_old["dbmaster_database"])) $conf["mysql"]["master_database"] = $conf_old["dbmaster_database"];
-if(isset($conf_old["dbmaster_user"])) $conf["mysql"]["master_ispconfig_user"] = $conf_old["dbmaster_user"];
-if(isset($conf_old["dbmaster_password"])) $conf["mysql"]["master_ispconfig_password"] = $conf_old["dbmaster_password"];
-
-//* Check if this is a master / slave setup
-$conf['mysql']['master_slave_setup'] = 'n';
-if($conf["mysql"]["master_host"] != '' && $conf["mysql"]["host"] != $conf["mysql"]["master_host"]) {
- $conf['mysql']['master_slave_setup'] = 'y';
-}
-
-// Resolve the IP address of the mysql hostname.
-if(!$conf['mysql']['ip'] = gethostbyname($conf['mysql']['host'])) die('Unable to resolve hostname'.$conf['mysql']['host']);
-
-$conf['server_id'] = intval($conf_old["server_id"]);
-$conf['ispconfig_log_priority'] = $conf_old["log_priority"];
-
-$inst = new installer();
-$inst->is_update = true;
-
-//** Detect the installed applications
-$inst->find_installed_apps();
-
-//** Initialize the MySQL server connection
-include_once 'lib/mysql.lib.php';
-
-//** Database update is a bit brute force and should be rebuild later ;)
-
-/*
- * Try to read the DB-admin settings
- */
-$clientdb_host = '';
-$clientdb_user = '';
-$clientdb_password = '';
-include_once "/usr/local/ispconfig/server/lib/mysql_clientdb.conf";
-$conf["mysql"]["admin_user"] = $clientdb_user;
-$conf["mysql"]["admin_password"] = $clientdb_password;
-$clientdb_host = '';
-$clientdb_user = '';
-$clientdb_password = '';
-
-//** There is a error if user for mysql admin_password if empty
-if( empty($conf["mysql"]["admin_password"]) ) {
- die("internal error - MYSQL-Root passord not known");
-}
-
-//** Test mysql root connection
-if(!@mysql_connect($conf["mysql"]["host"], $conf["mysql"]["admin_user"], $conf["mysql"]["admin_password"])) {
- die("internal error - MYSQL-Root passord wrong");
-}
-
-/*
- * Check all tables
-*/
-checkDbHealth();
-
-/*
- * Prepare the dump of the database
-*/
-prepareDBDump();
-
-//* initialize the database
-$inst->db = new db();
-
-/*
- * The next line is a bit tricky!
- * At the automated update we have no connection to the master-db (we don't need it, because
- * there are only TWO points, where this is needed)
- * 1) update the rights --> the autoupdater sets the rights of all clients when the server is
- * autoupdated)
- * 2) update the server-settings (is web installed, is mail installed) --> the autoupdates
- * doesn't change any of this settings, so there ist no need to update this.
- * This means, the autoupdater did not need any connection to the master-db (only to the local bd
- * of the master-server). To avoid any problems, we set the master-db to the local one.
- */
-$inst->dbmaster = $inst->db;
-
-/*
- * If it is NOT a master-slave - Setup then we are at the Master-DB. So set all rights
-*/
-if($conf['mysql']['master_slave_setup'] != 'y') {
- $inst->grant_master_database_rights(true);
-}
-
-/*
- * dump the new Database and reconfigure the server.ini
- */
-updateDbAndIni();
-
-/*
- * Reconfigure all Services
- */
-if($conf['services']['mail'] == true) {
- //** Configure postfix
- swriteln('Configuring Postfix');
- $inst->configure_postfix('dont-create-certs');
-
- //** Configure mailman
- if($conf['mailman']['installed'] == true) {
- swriteln('Configuring Mailman');
- $inst->configure_mailman('update');
- }
-
- //* Configure Jailkit
- swriteln('Configuring Jailkit');
- $inst->configure_jailkit();
-
- if($conf['dovecot']['installed'] == true) {
- //* Configure dovecot
- swriteln('Configuring Dovecot');
- $inst->configure_dovecot();
- } else {
- //** Configure saslauthd
- swriteln('Configuring SASL');
- $inst->configure_saslauthd();
-
- //** Configure PAM
- swriteln('Configuring PAM');
- $inst->configure_pam();
-
- //* Configure courier
- swriteln('Configuring Courier');
- $inst->configure_courier();
- }
-
- //** Configure Spamasassin
- swriteln('Configuring Spamassassin');
- $inst->configure_spamassassin();
-
- //** Configure Amavis
- swriteln('Configuring Amavisd');
- $inst->configure_amavis();
-
- //** Configure Getmail
- swriteln('Configuring Getmail');
- $inst->configure_getmail();
-}
-
-if($conf['services']['web'] == true) {
- //** Configure Pureftpd
- swriteln('Configuring Pureftpd');
- $inst->configure_pureftpd();
-}
-
-if($conf['services']['dns'] == true) {
- //* Configure DNS
- if($conf['powerdns']['installed'] == true) {
- swriteln('Configuring PowerDNS');
- $inst->configure_powerdns();
- } elseif($conf['bind']['installed'] == true) {
- swriteln('Configuring BIND');
- $inst->configure_bind();
- } else {
- swriteln('Configuring MyDNS');
- $inst->configure_mydns();
- }
-}
-
-if($conf['services']['web']) {
- if($conf['webserver']['server_type'] == 'apache'){
- //** Configure Apache
- swriteln('Configuring Apache');
- $inst->configure_apache();
-
- //** Configure vlogger
- swriteln('Configuring vlogger');
- $inst->configure_vlogger();
- } else {
- //** Configure nginx
- swriteln('Configuring nginx');
- $inst->configure_nginx();
- }
-
- //** Configure apps vhost
- swriteln('Configuring Apps vhost');
- $inst->configure_apps_vhost();
-}
-
-
-//* Configure DBServer
-swriteln('Configuring Database');
-$inst->configure_dbserver();
-
-
-//if(@is_dir('/etc/Bastille')) {
-//* Configure Firewall
-swriteln('Configuring Firewall');
-$inst->configure_firewall();
-//}
-
-//** Configure ISPConfig
-swriteln('Updating ISPConfig');
-
-
-//** Customise the port ISPConfig runs on
-$conf['apache']['vhost_port'] = get_ispconfig_port_number();
-
-$inst->install_ispconfig();
-
-//** Configure Crontab
-swriteln('Updating Crontab');
-$inst->install_crontab();
-
-//** Restart services:
-swriteln('Restarting services ...');
-if($conf['mysql']['installed'] == true && $conf['mysql']['init_script'] != '') system($inst->getinitcommand($conf['mysql']['init_script'], 'reload'));
-if($conf['services']['mail']) {
- if($conf['postfix']['installed'] == true && $conf['postfix']['init_script'] != '') system($inst->getinitcommand($conf['postfix']['init_script'], 'restart'));
- if($conf['saslauthd']['installed'] == true && $conf['saslauthd']['init_script'] != '') system($inst->getinitcommand($conf['saslauthd']['init_script'], 'restart'));
- if($conf['amavis']['installed'] == true && $conf['amavis']['init_script'] != '') system($inst->getinitcommand($conf['amavis']['init_script'], 'restart'));
- if($conf['clamav']['installed'] == true && $conf['clamav']['init_script'] != '') system($inst->getinitcommand($conf['clamav']['init_script'], 'restart'));
- if($conf['courier']['installed'] == true){
- if($conf['courier']['courier-authdaemon'] != '') system($inst->getinitcommand($conf['courier']['courier-authdaemon'], 'restart'));
- if($conf['courier']['courier-imap'] != '') system($inst->getinitcommand($conf['courier']['courier-imap'], 'restart'));
- if($conf['courier']['courier-imap-ssl'] != '') system($inst->getinitcommand($conf['courier']['courier-imap-ssl'], 'restart'));
- if($conf['courier']['courier-pop'] != '') system($inst->getinitcommand($conf['courier']['courier-pop'], 'restart'));
- if($conf['courier']['courier-pop-ssl'] != '') system($inst->getinitcommand($conf['courier']['courier-pop-ssl'], 'restart'));
- }
- if($conf['dovecot']['installed'] == true && $conf['dovecot']['init_script'] != '') system($inst->getinitcommand($conf['dovecot']['init_script'], 'restart'));
- if($conf['mailman']['installed'] == true && $conf['mailman']['init_script'] != '') system($inst->getinitcommand($conf['mailman']['init_script'], 'restart'));
-}
-if($conf['services']['web']) {
- if($conf['webserver']['server_type'] == 'apache' && $conf['apache']['init_script'] != '') system($inst->getinitcommand($conf['apache']['init_script'], 'restart'));
- //* Reload is enough for nginx
- if($conf['webserver']['server_type'] == 'nginx' && $conf['nginx']['init_script'] != '') system($inst->getinitcommand($conf['nginx']['init_script'], 'reload'));
- if($conf['pureftpd']['installed'] == true && $conf['pureftpd']['init_script'] != '') system($inst->getinitcommand($conf['pureftpd']['init_script'], 'restart'));
-}
-if($conf['services']['dns']) {
- if($conf['mydns']['installed'] == true && $conf['mydns']['init_script'] != '') system($inst->getinitcommand($conf['mydns']['init_script'], 'restart').' &> /dev/null');
- if($conf['powerdns']['installed'] == true && $conf['powerdns']['init_script'] != '') system($inst->getinitcommand($conf['powerdns']['init_script'], 'restart').' &> /dev/null');
- if($conf['bind']['installed'] == true && $conf['bind']['init_script'] != '') system($inst->getinitcommand($conf['bind']['init_script'], 'restart').' &> /dev/null');
-}
-
-echo "Update finished.\n";
-
-?>
diff --git a/install/dist/lib/debian60.lib.php b/install/dist/lib/debian60.lib.php
index 42da878..4932723 100644
--- a/install/dist/lib/debian60.lib.php
+++ b/install/dist/lib/debian60.lib.php
@@ -111,6 +111,7 @@
$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+ $content = str_replace('{server_id}', $conf['server_id'], $content);
wf($config_dir.'/'.$configfile, $content);
chmod($config_dir.'/'.$configfile, 0600);
diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php
index 87fadb0..7a08f93 100644
--- a/install/dist/lib/fedora.lib.php
+++ b/install/dist/lib/fedora.lib.php
@@ -229,8 +229,13 @@
if(!stristr($options, 'dont-create-certs')) {
//* Create the SSL certificate
- $command = 'cd '.$config_dir.'; '
- .'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509';
+ if(AUTOINSTALL){
+ $command = 'cd '.$config_dir.'; '
+ ."openssl req -new -subj '/C=".$autoinstall['ssl_cert_country']."/ST=".$autoinstall['ssl_cert_state']."/L=".$autoinstall['ssl_cert_locality']."/O=".$autoinstall['ssl_cert_organisation']."/OU=".$autoinstall['ssl_cert_organisation_unit']."/CN=".$autoinstall['ssl_cert_common_name']."' -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509";
+ } else {
+ $command = 'cd '.$config_dir.'; '
+ ."openssl req -new -subj '/C=".escapeshellcmd($autoinstall['ssl_cert_country'])."/ST=".escapeshellcmd($autoinstall['ssl_cert_state'])."/L=".escapeshellcmd($autoinstall['ssl_cert_locality'])."/O=".escapeshellcmd($autoinstall['ssl_cert_organisation'])."/OU=".escapeshellcmd($autoinstall['ssl_cert_organisation_unit'])."/CN=".escapeshellcmd($autoinstall['ssl_cert_common_name'])."' -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509";
+ }
exec($command);
$command = 'chmod o= '.$config_dir.'/smtpd.key';
@@ -445,6 +450,7 @@
$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+ $content = str_replace('{server_id}', $conf['server_id'], $content);
wf("$config_dir/$configfile", $content);
exec("chmod 600 $config_dir/$configfile");
diff --git a/install/dist/lib/gentoo.lib.php b/install/dist/lib/gentoo.lib.php
index b14cffe..4200a01 100644
--- a/install/dist/lib/gentoo.lib.php
+++ b/install/dist/lib/gentoo.lib.php
@@ -119,9 +119,13 @@
//* Create the SSL certificate
if (!stristr($options, 'dont-create-certs'))
{
- $command = 'cd '.$config_dir.'; '
- .'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509';
- exec($command);
+ if(AUTOINSTALL){
+ $command = 'cd '.$config_dir.'; '
+ ."openssl req -new -subj '/C=".escapeshellcmd($autoinstall['ssl_cert_country'])."/ST=".escapeshellcmd($autoinstall['ssl_cert_state'])."/L=".escapeshellcmd($autoinstall['ssl_cert_locality'])."/O=".escapeshellcmd($autoinstall['ssl_cert_organisation'])."/OU=".escapeshellcmd($autoinstall['ssl_cert_organisation_unit'])."/CN=".escapeshellcmd($autoinstall['ssl_cert_common_name'])."' -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509";
+ } else {
+ $command = 'cd '.$config_dir.'; '
+ .'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509';
+ }
$command = 'chmod o= '.$config_dir.'/smtpd.key';
caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
diff --git a/install/dist/lib/opensuse.lib.php b/install/dist/lib/opensuse.lib.php
index 6e6a618..f990e91 100644
--- a/install/dist/lib/opensuse.lib.php
+++ b/install/dist/lib/opensuse.lib.php
@@ -125,6 +125,7 @@
//* Create aliasaes
exec('/usr/lib/mailman/bin/genaliases 2>/dev/null');
+ if(is_file('/var/lib/mailman/data/virtual-mailman')) exec('postmap /var/lib/mailman/data/virtual-mailman');
}
function configure_postfix($options = '')
@@ -256,9 +257,13 @@
if(!stristr($options, 'dont-create-certs')) {
//* Create the SSL certificate
- $command = 'cd '.$config_dir.'; '
- .'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509';
- exec($command);
+ if(AUTOINSTALL){
+ $command = 'cd '.$config_dir.'; '
+ ."openssl req -new -subj '/C=".escapeshellcmd($autoinstall['ssl_cert_country'])."/ST=".escapeshellcmd($autoinstall['ssl_cert_state'])."/L=".escapeshellcmd($autoinstall['ssl_cert_locality'])."/O=".escapeshellcmd($autoinstall['ssl_cert_organisation'])."/OU=".escapeshellcmd($autoinstall['ssl_cert_organisation_unit'])."/CN=".escapeshellcmd($autoinstall['ssl_cert_common_name'])."' -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509";
+ } else {
+ $command = 'cd '.$config_dir.'; '
+ .'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509';
+ }
$command = 'chmod o= '.$config_dir.'/smtpd.key';
caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
@@ -494,6 +499,7 @@
$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+ $content = str_replace('{server_id}', $conf['server_id'], $content);
wf("$config_dir/$configfile", $content);
exec("chmod 600 $config_dir/$configfile");
diff --git a/install/install.php b/install/install.php
index 796b027..108ed05 100644
--- a/install/install.php
+++ b/install/install.php
@@ -30,6 +30,30 @@
/*
ISPConfig 3 installer.
+
+ -------------------------------------------------------------------------------------
+ - Interactive install
+ -------------------------------------------------------------------------------------
+ run:
+
+ php install.php
+
+ -------------------------------------------------------------------------------------
+ - Noninteractive (autoinstall) mode
+ -------------------------------------------------------------------------------------
+
+ The autoinstall mode can read the installer questions from a .ini style file or from
+ a php config file. Examples for both file types are in the docs folder.
+ See autoinstall.ini.sample and autoinstall.conf_sample.php.
+
+ run:
+
+ php install.php --autoinstall=autoinstall.ini
+
+ or
+
+ php install.php --autoinstall=autoinstall.conf.php
+
*/
error_reporting(E_ALL|E_STRICT);
@@ -78,6 +102,30 @@
if($dist['id'] == '') die('Linux distribution or version not recognized.');
+//** Include the autoinstaller configuration (for non-interactive setups)
+error_reporting(E_ALL ^ E_NOTICE);
+
+//** Get commandline options
+$cmd_opt = getopt('', array('autoinstall::'));
+
+//** Load autoinstall file
+if(isset($cmd_opt['autoinstall']) && is_file($cmd_opt['autoinstall'])) {
+ $path_parts = pathinfo($cmd_opt['autoinstall']);
+ if($path_parts['extension'] == 'php') {
+ include_once $cmd_opt['autoinstall'];
+ } elseif($path_parts['extension'] == 'ini') {
+ $tmp = ini_to_array(file_get_contents('autoinstall.ini'));
+ $autoinstall = $tmp['install'] + $tmp['ssl_cert'] + $tmp['expert'] + $tmp['update'];
+ unset($tmp);
+ }
+ unset($path_parts);
+ define('AUTOINSTALL', true);
+} else {
+ $autoinstall = array();
+ define('AUTOINSTALL', false);
+}
+
+
//** Include the distribution-specific installer class library and configuration
if(is_file('dist/lib/'.$dist['baseid'].'.lib.php')) include_once 'dist/lib/'.$dist['baseid'].'.lib.php';
include_once 'dist/lib/'.$dist['id'].'.lib.php';
@@ -109,7 +157,7 @@
$inst->find_installed_apps();
//** Select the language and set default timezone
-$conf['language'] = $inst->simple_query('Select language', array('en', 'de'), 'en');
+$conf['language'] = $inst->simple_query('Select language', array('en', 'de'), 'en','language');
$conf['timezone'] = get_system_timezone();
//* Set default theme
@@ -117,13 +165,13 @@
$conf['language_file_import_enabled'] = true;
//** Select installation mode
-$install_mode = $inst->simple_query('Installation mode', array('standard', 'expert'), 'standard');
+$install_mode = $inst->simple_query('Installation mode', array('standard', 'expert'), 'standard','install_mode');
//** Get the hostname
$tmp_out = array();
exec('hostname -f', $tmp_out);
-$conf['hostname'] = $inst->free_query('Full qualified hostname (FQDN) of the server, eg server1.domain.tld ', @$tmp_out[0]);
+$conf['hostname'] = $inst->free_query('Full qualified hostname (FQDN) of the server, eg server1.domain.tld ', @$tmp_out[0],'hostname');
unset($tmp_out);
// Check if the mysql functions are loaded in PHP
@@ -132,16 +180,17 @@
//** Get MySQL root credentials
$finished = false;
do {
- $tmp_mysql_server_host = $inst->free_query('MySQL server hostname', $conf['mysql']['host']);
- $tmp_mysql_server_admin_user = $inst->free_query('MySQL root username', $conf['mysql']['admin_user']);
- $tmp_mysql_server_admin_password = $inst->free_query('MySQL root password', $conf['mysql']['admin_password']);
- $tmp_mysql_server_database = $inst->free_query('MySQL database to create', $conf['mysql']['database']);
- $tmp_mysql_server_charset = $inst->free_query('MySQL charset', $conf['mysql']['charset']);
-
+ $tmp_mysql_server_host = $inst->free_query('MySQL server hostname', $conf['mysql']['host'],'mysql_hostname');
+ $tmp_mysql_server_admin_user = $inst->free_query('MySQL root username', $conf['mysql']['admin_user'],'mysql_root_user');
+ $tmp_mysql_server_admin_password = $inst->free_query('MySQL root password', $conf['mysql']['admin_password'],'mysql_root_password');
+ $tmp_mysql_server_database = $inst->free_query('MySQL database to create', $conf['mysql']['database'],'mysql_database');
+ $tmp_mysql_server_charset = $inst->free_query('MySQL charset', $conf['mysql']['charset'],'mysql_charset');
+
if($install_mode == 'expert') {
swriteln("The next two questions are about the internal ISPConfig database user and password.\nIt is recommended to accept the defaults which are 'ispconfig' as username and a random password.\nIf you use a different password, use only numbers and chars for the password.\n");
- $conf['mysql']['ispconfig_user'] = $inst->free_query('ISPConfig mysql database username', $conf['mysql']['ispconfig_user']);
- $conf['mysql']['ispconfig_password'] = $inst->free_query('ISPConfig mysql database password', $conf['mysql']['ispconfig_password']);
+
+ $conf['mysql']['ispconfig_user'] = $inst->free_query('ISPConfig mysql database username', $conf['mysql']['ispconfig_user'],'mysql_ispconfig_user');
+ $conf['mysql']['ispconfig_password'] = $inst->free_query('ISPConfig mysql database password', $conf['mysql']['ispconfig_password'],'mysql_ispconfig_password');
}
//* Initialize the MySQL server connection
@@ -176,7 +225,7 @@
//* Configure Webserver - Apache or nginx
if($conf['apache']['installed'] == true && $conf['nginx']['installed'] == true) {
- $http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache');
+ $http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache','http_server');
if($http_server_to_use == 'apache'){
$conf['nginx']['installed'] = false;
} else {
@@ -293,12 +342,12 @@
swriteln('Installing ISPConfig');
//** Customize the port ISPConfig runs on
- $ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080');
+ $ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080','ispconfig_port');
if($conf['apache']['installed'] == true) $conf['apache']['vhost_port'] = $ispconfig_vhost_port;
if($conf['nginx']['installed'] == true) $conf['nginx']['vhost_port'] = $ispconfig_vhost_port;
unset($ispconfig_vhost_port);
- if(strtolower($inst->simple_query('Do you want a secure (SSL) connection to the ISPConfig web interface', array('y', 'n'), 'y')) == 'y') {
+ if(strtolower($inst->simple_query('Do you want a secure (SSL) connection to the ISPConfig web interface', array('y', 'n'), 'y','ispconfig_use_ssl')) == 'y') {
$inst->make_ispconfig_ssl_cert();
}
@@ -354,17 +403,16 @@
//** Get Server ID
// $conf['server_id'] = $inst->free_query('Unique Numeric ID of the server','1');
// Server ID is an autoInc value of the mysql database now
-
- if(strtolower($inst->simple_query('Shall this server join an existing ISPConfig multiserver setup', array('y', 'n'), 'n')) == 'y') {
+ if(strtolower($inst->simple_query('Shall this server join an existing ISPConfig multiserver setup', array('y', 'n'), 'n','join_multiserver_setup')) == 'y') {
$conf['mysql']['master_slave_setup'] = 'y';
//** Get MySQL root credentials
$finished = false;
do {
- $tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host']);
- $tmp_mysql_server_admin_user = $inst->free_query('MySQL master server root username', $conf['mysql']['master_admin_user']);
- $tmp_mysql_server_admin_password = $inst->free_query('MySQL master server root password', $conf['mysql']['master_admin_password']);
- $tmp_mysql_server_database = $inst->free_query('MySQL master server database name', $conf['mysql']['master_database']);
+ $tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host'],'mysql_master_hostname');
+ $tmp_mysql_server_admin_user = $inst->free_query('MySQL master server root username', $conf['mysql']['master_admin_user'],'mysql_master_root_user');
+ $tmp_mysql_server_admin_password = $inst->free_query('MySQL master server root password', $conf['mysql']['master_admin_password'],'mysql_master_root_password');
+ $tmp_mysql_server_database = $inst->free_query('MySQL master server database name', $conf['mysql']['master_database'],'mysql_master_database');
//* Initialize the MySQL server connection
if(@mysql_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password)) {
@@ -397,7 +445,7 @@
//* Configure Webserver - Apache or nginx
if($conf['apache']['installed'] == true && $conf['nginx']['installed'] == true) {
- $http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache');
+ $http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache','http_server');
if($http_server_to_use == 'apache'){
$conf['nginx']['installed'] = false;
} else {
@@ -410,8 +458,7 @@
swriteln('');
$inst->add_database_server_record();
-
- if(strtolower($inst->simple_query('Configure Mail', array('y', 'n') , 'y') ) == 'y') {
+ if(strtolower($inst->simple_query('Configure Mail', array('y', 'n') , 'y','configure_mail') ) == 'y') {
$conf['services']['mail'] = true;
@@ -470,20 +517,20 @@
}
//** Configure Jailkit
- if(strtolower($inst->simple_query('Configure Jailkit', array('y', 'n'), 'y') ) == 'y') {
+ if(strtolower($inst->simple_query('Configure Jailkit', array('y', 'n'), 'y','configure_jailkit') ) == 'y') {
swriteln('Configuring Jailkit');
$inst->configure_jailkit();
}
//** Configure Pureftpd
- if(strtolower($inst->simple_query('Configure FTP Server', array('y', 'n'), 'y') ) == 'y') {
+ if(strtolower($inst->simple_query('Configure FTP Server', array('y', 'n'), 'y','configure_ftp') ) == 'y') {
swriteln('Configuring Pureftpd');
$inst->configure_pureftpd();
if($conf['pureftpd']['installed'] == true && $conf['pureftpd']['init_script'] != '') system($inst->getinitcommand($conf['pureftpd']['init_script'], 'restart'));
}
//** Configure DNS
- if(strtolower($inst->simple_query('Configure DNS Server', array('y', 'n'), 'y')) == 'y') {
+ if(strtolower($inst->simple_query('Configure DNS Server', array('y', 'n'), 'y','configure_dns')) == 'y') {
$conf['services']['dns'] = true;
//* Configure DNS
if($conf['powerdns']['installed'] == true) {
@@ -522,7 +569,7 @@
//** Configure Apache
if($conf['apache']['installed'] == true){
swriteln("\nHint: If this server shall run the ISPConfig interface, select 'y' in the 'Configure Apache Server' option.\n");
- if(strtolower($inst->simple_query('Configure Apache Server', array('y', 'n'), 'y')) == 'y') {
+ if(strtolower($inst->simple_query('Configure Apache Server', array('y', 'n'), 'y','configure_apache')) == 'y') {
$conf['services']['web'] = true;
swriteln('Configuring Apache');
$inst->configure_apache();
@@ -540,7 +587,7 @@
//** Configure nginx
if($conf['nginx']['installed'] == true){
swriteln("\nHint: If this server shall run the ISPConfig interface, select 'y' in the 'Configure nginx Server' option.\n");
- if(strtolower($inst->simple_query('Configure nginx Server', array('y', 'n'), 'y')) == 'y') {
+ if(strtolower($inst->simple_query('Configure nginx Server', array('y', 'n'), 'y','configure_nginx')) == 'y') {
$conf['services']['web'] = true;
swriteln('Configuring nginx');
$inst->configure_nginx();
@@ -556,7 +603,7 @@
}
//** Configure Firewall
- if(strtolower($inst->simple_query('Configure Firewall Server', array('y', 'n'), 'y')) == 'y') {
+ if(strtolower($inst->simple_query('Configure Firewall Server', array('y', 'n'), 'y','configure_firewall')) == 'y') {
//if($conf['bastille']['installed'] == true) {
//* Configure Bastille Firewall
$conf['services']['firewall'] = true;
@@ -579,7 +626,7 @@
//** Configure ISPConfig :-)
$install_ispconfig_interface_default = ($conf['mysql']['master_slave_setup'] == 'y')?'n':'y';
- if(strtolower($inst->simple_query('Install ISPConfig Web Interface', array('y', 'n'), $install_ispconfig_interface_default)) == 'y') {
+ if(strtolower($inst->simple_query('Install ISPConfig Web Interface', array('y', 'n'), $install_ispconfig_interface_default,'install_ispconfig_web_interface')) == 'y') {
swriteln('Installing ISPConfig');
//** We want to check if the server is a module or cgi based php enabled server
@@ -597,12 +644,12 @@
*/
//** Customise the port ISPConfig runs on
- $ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080');
+ $ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080','ispconfig_port');
if($conf['apache']['installed'] == true) $conf['apache']['vhost_port'] = $ispconfig_vhost_port;
if($conf['nginx']['installed'] == true) $conf['nginx']['vhost_port'] = $ispconfig_vhost_port;
unset($ispconfig_vhost_port);
- if(strtolower($inst->simple_query('Enable SSL for the ISPConfig web interface', array('y', 'n'), 'y')) == 'y') {
+ if(strtolower($inst->simple_query('Enable SSL for the ISPConfig web interface', array('y', 'n'), 'y','ispconfig_use_ssl')) == 'y') {
$inst->make_ispconfig_ssl_cert();
}
diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php
index 379ae78..04205cc 100644
--- a/install/lib/install.lib.php
+++ b/install/lib/install.lib.php
@@ -86,6 +86,15 @@
$mainver = array_filter($mainver);
$mainver = current($mainver).'.'.next($mainver);
switch ($mainver){
+ case "14.04":
+ $relname = "(Trusty Tahr)";
+ break;
+ case "13.10":
+ $relname = "(Saucy Salamander)";
+ break;
+ case "13.04":
+ $relname = "(Raring Ringtail)";
+ break;
case "12.10":
$relname = "(Quantal Quetzal)";
break;
@@ -246,6 +255,18 @@
$distid = 'centos53';
$distbaseid = 'fedora';
swriteln("Operating System: CentOS 5 or compatible\n");
+ } elseif(stristr($content, 'CentOS Linux release 6')) {
+ $distname = 'CentOS';
+ $distver = 'Unknown';
+ $distid = 'centos53';
+ $distbaseid = 'fedora';
+ swriteln("Operating System: CentOS 6 or compatible\n");
+ } elseif(stristr($content, 'CentOS Linux release 7')) {
+ $distname = 'CentOS';
+ $distver = 'Unknown';
+ $distid = 'centos53';
+ $distbaseid = 'fedora';
+ swriteln("Operating System: CentOS 7 or compatible\n");
} else {
$distname = 'Redhat';
$distver = 'Unknown';
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 7d6348b..548cf93 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -56,12 +56,21 @@
echo 'WARNING: '.$msg."\n";
}
- public function simple_query($query, $answers, $default) {
+ public function simple_query($query, $answers, $default, $name = '') {
+ global $autoinstall;
$finished = false;
do {
- $answers_str = implode(',', $answers);
- swrite($this->lng($query).' ('.$answers_str.') ['.$default.']: ');
- $input = sread();
+ if($name != '' && $autoinstall[$name] != '') {
+ if($autoinstall[$name] == 'default') {
+ $input = $default;
+ } else {
+ $input = $autoinstall[$name];
+ }
+ } else {
+ $answers_str = implode(',', $answers);
+ swrite($this->lng($query).' ('.$answers_str.') ['.$default.']: ');
+ $input = sread();
+ }
//* Stop the installation
if($input == 'quit') {
@@ -86,9 +95,18 @@
return $answer;
}
- public function free_query($query, $default) {
- swrite($this->lng($query).' ['.$default.']: ');
- $input = sread();
+ public function free_query($query, $default, $name = '') {
+ global $autoinstall;
+ if($name != '' && $autoinstall[$name] != '') {
+ if($autoinstall[$name] == 'default') {
+ $input = $default;
+ } else {
+ $input = $autoinstall[$name];
+ }
+ } else {
+ swrite($this->lng($query).' ['.$default.']: ');
+ $input = sread();
+ }
//* Stop the installation
if($input == 'quit') {
@@ -638,7 +656,7 @@
}
public function configure_postfix($options = '') {
- global $conf;
+ global $conf,$autoinstall;
$cf = $conf['postfix'];
$config_dir = $cf['config_dir'];
@@ -750,8 +768,13 @@
if(!stristr($options, 'dont-create-certs')) {
//* Create the SSL certificate
- $command = 'cd '.$config_dir.'; '
- .'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509';
+ if(AUTOINSTALL){
+ $command = 'cd '.$config_dir.'; '
+ ."openssl req -new -subj '/C=".escapeshellcmd($autoinstall['ssl_cert_country'])."/ST=".escapeshellcmd($autoinstall['ssl_cert_state'])."/L=".escapeshellcmd($autoinstall['ssl_cert_locality'])."/O=".escapeshellcmd($autoinstall['ssl_cert_organisation'])."/OU=".escapeshellcmd($autoinstall['ssl_cert_organisation_unit'])."/CN=".escapeshellcmd($autoinstall['ssl_cert_common_name'])."' -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509";
+ } else {
+ $command = 'cd '.$config_dir.'; '
+ .'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509';
+ }
exec($command);
$command = 'chmod o= '.$config_dir.'/smtpd.key';
@@ -992,6 +1015,7 @@
$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+ $content = str_replace('{server_id}', $conf['server_id'], $content);
wf($config_dir.'/'.$configfile, $content);
chmod($config_dir.'/'.$configfile, 0600);
@@ -1671,7 +1695,7 @@
}
public function make_ispconfig_ssl_cert() {
- global $conf;
+ global $conf,$autoinstall;
$install_dir = $conf['ispconfig_install_dir'];
@@ -1683,7 +1707,11 @@
$ssl_pw = substr(md5(mt_rand()), 0, 6);
exec("openssl genrsa -des3 -passout pass:$ssl_pw -out $ssl_key_file 4096");
- exec("openssl req -new -passin pass:$ssl_pw -passout pass:$ssl_pw -key $ssl_key_file -out $ssl_csr_file");
+ if(AUTOINSTALL){
+ exec("openssl req -new -passin pass:$ssl_pw -passout pass:$ssl_pw -subj '/C=".escapeshellcmd($autoinstall['ssl_cert_country'])."/ST=".escapeshellcmd($autoinstall['ssl_cert_state'])."/L=".escapeshellcmd($autoinstall['ssl_cert_locality'])."/O=".escapeshellcmd($autoinstall['ssl_cert_organisation'])."/OU=".escapeshellcmd($autoinstall['ssl_cert_organisation_unit'])."/CN=".escapeshellcmd($autoinstall['ssl_cert_common_name'])."' -key $ssl_key_file -out $ssl_csr_file");
+ } else {
+ exec("openssl req -new -passin pass:$ssl_pw -passout pass:$ssl_pw -key $ssl_key_file -out $ssl_csr_file");
+ }
exec("openssl req -x509 -passin pass:$ssl_pw -passout pass:$ssl_pw -key $ssl_key_file -in $ssl_csr_file -out $ssl_crt_file -days 3650");
exec("openssl rsa -passin pass:$ssl_pw -in $ssl_key_file -out $ssl_key_file.insecure");
rename($ssl_key_file, $ssl_key_file.'.secure');
diff --git a/install/sql/incremental/upd_0078.sql b/install/sql/incremental/upd_0078.sql
new file mode 100644
index 0000000..39b8c1c
--- /dev/null
+++ b/install/sql/incremental/upd_0078.sql
@@ -0,0 +1 @@
+ALTER TABLE `web_domain` DROP INDEX `serverdomain`, ADD UNIQUE `serverdomain` ( `server_id` , `ip_address`, `domain` );
\ No newline at end of file
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 21c0644..ab5f795 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -897,8 +897,8 @@
`login` varchar(255) NOT NULL default '',
`password` varchar(255) NOT NULL default '',
`name` varchar(255) NOT NULL default '',
- `uid` int(11) unsigned NOT NULL default '5000',
- `gid` int(11) unsigned NOT NULL default '5000',
+ `uid` int(11) NOT NULL default '5000',
+ `gid` int(11) NOT NULL default '5000',
`maildir` varchar(255) NOT NULL default '',
`quota` bigint(20) NOT NULL default '-1',
`cc` varchar(255) NOT NULL default '',
@@ -1879,7 +1879,7 @@
`added_date` date NOT NULL DEFAULT '0000-00-00',
`added_by` varchar(255) DEFAULT NULL,
PRIMARY KEY (`domain_id`),
- UNIQUE KEY `serverdomain` ( `server_id` , `domain` )
+ UNIQUE KEY `serverdomain` ( `server_id` , `ip_address`, `domain` )
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
@@ -2292,7 +2292,7 @@
-- Dumping data for table `sys_config`
--
-INSERT INTO sys_config VALUES ('db','db_version','3.0.5.4p1');
+INSERT INTO sys_config VALUES ('db','db_version','3.0.5.4p2');
INSERT INTO sys_config VALUES ('interface','session_timeout','0');
SET FOREIGN_KEY_CHECKS = 1;
diff --git a/install/tpl/apache_ispconfig.conf.master b/install/tpl/apache_ispconfig.conf.master
index be6f637..cd9924a 100644
--- a/install/tpl/apache_ispconfig.conf.master
+++ b/install/tpl/apache_ispconfig.conf.master
@@ -3,7 +3,7 @@
# ISPConfig Logfile configuration for vlogger
################################################
-LogFormat "%v %h %l %u %t \"%r\" %>s %B \"%{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
<Directory /var/www/clients>
@@ -18,6 +18,7 @@
# Do not allow access to the root file system of the server for security reasons
<Directory />
+ Options -Indexes
AllowOverride None
<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
Require all denied
diff --git a/install/tpl/apps_php_fpm_pool.conf.master b/install/tpl/apps_php_fpm_pool.conf.master
index ce6a92f..7997e9b 100644
--- a/install/tpl/apps_php_fpm_pool.conf.master
+++ b/install/tpl/apps_php_fpm_pool.conf.master
@@ -9,7 +9,7 @@
group = {fpm_group}
pm = dynamic
-pm.max_children = 50
+pm.max_children = 500
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 5
diff --git a/install/tpl/config.inc.php.master b/install/tpl/config.inc.php.master
index bae6061..6f40a1c 100644
--- a/install/tpl/config.inc.php.master
+++ b/install/tpl/config.inc.php.master
@@ -56,7 +56,7 @@
//** Application
define('ISPC_APP_TITLE', 'ISPConfig');
-define('ISPC_APP_VERSION', '3.0.5.4p1');
+define('ISPC_APP_VERSION', '3.0.5.4p2');
define('DEVSYSTEM', 0);
diff --git a/install/tpl/debian6_dovecot-sql.conf.master b/install/tpl/debian6_dovecot-sql.conf.master
index 86eb4df..61f86c4 100644
--- a/install/tpl/debian6_dovecot-sql.conf.master
+++ b/install/tpl/debian6_dovecot-sql.conf.master
@@ -13,8 +13,8 @@
connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password}
default_pass_scheme = CRYPT
-password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n'
-user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n'
+password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n' AND server_id = '{server_id}'
+user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}'
# The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.
# Do not enable it on Dovecot 1.x servers
diff --git a/install/tpl/debian_dovecot-sql.conf.master b/install/tpl/debian_dovecot-sql.conf.master
index 9c55df3..a4d5bbd 100644
--- a/install/tpl/debian_dovecot-sql.conf.master
+++ b/install/tpl/debian_dovecot-sql.conf.master
@@ -120,8 +120,8 @@
connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password}
default_pass_scheme = CRYPT
-password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n'
-user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n'
+password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n' AND server_id = '{server_id}'
+user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n' AND server_id = '{server_id}'
# The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.
# Do not enable it on Dovecot 1.x servers
diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master
index e17880e..4775002 100644
--- a/install/tpl/debian_postfix.conf.master
+++ b/install/tpl/debian_postfix.conf.master
@@ -1,7 +1,7 @@
alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
alias_database = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
virtual_alias_domains =
-virtual_alias_maps = proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf, hash:/var/lib/mailman/data/virtual-mailman
+virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf
virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf
virtual_mailbox_base = {vmail_mailbox_base}
@@ -11,7 +11,7 @@
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
-smtpd_recipient_restrictions = check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}
smtpd_use_tls = yes
smtpd_tls_security_level = may
smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/fedora_dovecot-sql.conf.master b/install/tpl/fedora_dovecot-sql.conf.master
index faf3be2..769e0a4 100644
--- a/install/tpl/fedora_dovecot-sql.conf.master
+++ b/install/tpl/fedora_dovecot-sql.conf.master
@@ -133,8 +133,8 @@
connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password}
default_pass_scheme = CRYPT
-password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n'
-user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n'
+password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n' AND server_id = '{server_id}'
+user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}'
# The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.
# Do not enable it on Dovecot 1.x servers
diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master
index 0911f2a..330b1f9 100644
--- a/install/tpl/fedora_postfix.conf.master
+++ b/install/tpl/fedora_postfix.conf.master
@@ -1,5 +1,5 @@
virtual_alias_domains =
-virtual_alias_maps = proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf, hash:/etc/mailman/virtual-mailman
+virtual_alias_maps = hash:/etc/mailman/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf
virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf
virtual_mailbox_base = {vmail_mailbox_base}
@@ -8,7 +8,7 @@
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
-smtpd_recipient_restrictions = check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}
smtpd_use_tls = yes
smtpd_tls_security_level = may
smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master
index 90ed285..a775c4b 100644
--- a/install/tpl/gentoo_postfix.conf.master
+++ b/install/tpl/gentoo_postfix.conf.master
@@ -8,7 +8,7 @@
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
-smtpd_recipient_restrictions = check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}
smtpd_use_tls = yes
smtpd_tls_security_level = may
smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/opensuse_dovecot-sql.conf.master b/install/tpl/opensuse_dovecot-sql.conf.master
index e33603a..57515af 100644
--- a/install/tpl/opensuse_dovecot-sql.conf.master
+++ b/install/tpl/opensuse_dovecot-sql.conf.master
@@ -133,8 +133,8 @@
connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password}
default_pass_scheme = CRYPT
-password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n'
-user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n'
+password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n' AND server_id = '{server_id}'
+user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}'
# The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.
# Do not enable it on Dovecot 1.x servers
diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master
index 90ed285..7baa703 100644
--- a/install/tpl/opensuse_postfix.conf.master
+++ b/install/tpl/opensuse_postfix.conf.master
@@ -1,5 +1,7 @@
+alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
+alias_database = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
virtual_alias_domains =
-virtual_alias_maps = proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
+virtual_alias_maps = hash:/etc/mailman/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf
virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf
virtual_mailbox_base = {vmail_mailbox_base}
@@ -8,7 +10,7 @@
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
-smtpd_recipient_restrictions = check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}
smtpd_use_tls = yes
smtpd_tls_security_level = may
smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/php_fpm_pool.conf.master b/install/tpl/php_fpm_pool.conf.master
index dfa3059..9cde75a 100644
--- a/install/tpl/php_fpm_pool.conf.master
+++ b/install/tpl/php_fpm_pool.conf.master
@@ -9,7 +9,7 @@
group = {fpm_group}
pm = dynamic
-pm.max_children = 10
+pm.max_children = 500
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 5
diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master
index dcac580..8af63c3 100644
--- a/install/tpl/server.ini.master
+++ b/install/tpl/server.ini.master
@@ -16,7 +16,6 @@
admin_notify_events=1
backup_dir=/var/backup
backup_dir_is_mount=n
-backup_dir_mount_cmd=
backup_mode=rootgz
monit_url=
monit_user=
diff --git a/install/update.php b/install/update.php
index 6a1b9d1..36eb201 100644
--- a/install/update.php
+++ b/install/update.php
@@ -30,6 +30,30 @@
/*
ISPConfig 3 updater.
+
+ -------------------------------------------------------------------------------------
+ - Interactive update
+ -------------------------------------------------------------------------------------
+ run:
+
+ php update.php
+
+ -------------------------------------------------------------------------------------
+ - Noninteractive (autoupdate) mode
+ -------------------------------------------------------------------------------------
+
+ The autoupdate mode can read the updater questions from a .ini style file or from
+ a php config file. Examples for both file types are in the docs folder.
+ See autoinstall.ini.sample and autoinstall.conf_sample.php.
+
+ run:
+
+ php update.php --autoinstall=autoinstall.ini
+
+ or
+
+ php update.php --autoinstall=autoinstall.conf.php
+
*/
error_reporting(E_ALL|E_STRICT);
@@ -83,6 +107,29 @@
if($dist['id'] == '') die('Linux distribution or version not recognized.');
+//** Include the autoinstaller configuration (for non-interactive setups)
+error_reporting(E_ALL ^ E_NOTICE);
+
+//** Get commandline options
+$cmd_opt = getopt('', array('autoinstall::'));
+
+//** Load autoinstall file
+if(isset($cmd_opt['autoinstall']) && is_file($cmd_opt['autoinstall'])) {
+ $path_parts = pathinfo($cmd_opt['autoinstall']);
+ if($path_parts['extension'] == 'php') {
+ include_once $cmd_opt['autoinstall'];
+ } elseif($path_parts['extension'] == 'ini') {
+ $tmp = ini_to_array(file_get_contents('autoinstall.ini'));
+ $autoinstall = $tmp['install'] + $tmp['ssl_cert'] + $tmp['expert'] + $tmp['update'];
+ unset($tmp);
+ }
+ unset($path_parts);
+ define('AUTOINSTALL', true);
+} else {
+ $autoinstall = array();
+ define('AUTOINSTALL', false);
+}
+
//** Include the distribution-specific installer class library and configuration
if(is_file('dist/lib/'.$dist['baseid'].'.lib.php')) include_once 'dist/lib/'.$dist['baseid'].'.lib.php';
include_once 'dist/lib/'.$dist['id'].'.lib.php';
@@ -131,7 +178,8 @@
echo "This application will update ISPConfig 3 on your server.\n\n";
//* Make a backup before we start the update
-$do_backup = $inst->simple_query('Shall the script create a ISPConfig backup in /var/backup/ now?', array('yes', 'no'), 'yes');
+$do_backup = $inst->simple_query('Shall the script create a ISPConfig backup in /var/backup/ now?', array('yes', 'no'), 'yes','do_backup');
+
if($do_backup == 'yes') {
//* Create the backup directory
@@ -180,7 +228,7 @@
$finished = true;
} else {
swriteln($inst->lng('Unable to connect to mysql server').' '.mysql_error());
- $conf["mysql"]["admin_password"] = $inst->free_query('MySQL root password', $conf['mysql']['admin_password']);
+ $conf["mysql"]["admin_password"] = $inst->free_query('MySQL root password', $conf['mysql']['admin_password'],'mysql_root_password');
}
} while ($finished == false);
unset($finished);
@@ -198,10 +246,10 @@
//** Get MySQL root credentials
$finished = false;
do {
- $tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host']);
- $tmp_mysql_server_admin_user = $inst->free_query('MySQL master server root username', $conf['mysql']['master_admin_user']);
- $tmp_mysql_server_admin_password = $inst->free_query('MySQL master server root password', $conf['mysql']['master_admin_password']);
- $tmp_mysql_server_database = $inst->free_query('MySQL master server database name', $conf['mysql']['master_database']);
+ $tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host'],'mysql_master_hostname');
+ $tmp_mysql_server_admin_user = $inst->free_query('MySQL master server root username', $conf['mysql']['master_admin_user'],'mysql_master_root_user');
+ $tmp_mysql_server_admin_password = $inst->free_query('MySQL master server root password', $conf['mysql']['master_admin_password'],'mysql_master_root_password');
+ $tmp_mysql_server_database = $inst->free_query('MySQL master server database name', $conf['mysql']['master_database'],'mysql_master_database');
//* Initialize the MySQL server connection
if(@mysql_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password)) {
@@ -244,7 +292,7 @@
*/
//if($conf_old['dbmaster_user'] != '' or $conf_old['dbmaster_host'] != '') {
//** Update master database rights
-$reconfigure_master_database_rights_answer = $inst->simple_query('Reconfigure Permissions in master database?', array('yes', 'no'), 'no');
+$reconfigure_master_database_rights_answer = $inst->simple_query('Reconfigure Permissions in master database?', array('yes', 'no'), 'no','reconfigure_permissions_in_master_database');
if($reconfigure_master_database_rights_answer == 'yes') {
$inst->grant_master_database_rights();
@@ -252,7 +300,7 @@
//}
//** Shall the services be reconfigured during update
-$reconfigure_services_answer = $inst->simple_query('Reconfigure Services?', array('yes', 'no'), 'yes');
+$reconfigure_services_answer = $inst->simple_query('Reconfigure Services?', array('yes', 'no'), 'yes','reconfigure_services');
if($reconfigure_services_answer == 'yes') {
@@ -379,15 +427,16 @@
if ($conf['services']['web'] && $inst->install_ispconfig_interface) {
//** Customise the port ISPConfig runs on
$ispconfig_port_number = get_ispconfig_port_number();
+ if($autoupdate['ispconfig_port'] == 'default') $autoupdate['ispconfig_port'] = $ispconfig_port_number;
if($conf['webserver']['server_type'] == 'nginx'){
- $conf['nginx']['vhost_port'] = $inst->free_query('ISPConfig Port', $ispconfig_port_number);
+ $conf['nginx']['vhost_port'] = $inst->free_query('ISPConfig Port', $ispconfig_port_number,'ispconfig_port');
} else {
- $conf['apache']['vhost_port'] = $inst->free_query('ISPConfig Port', $ispconfig_port_number);
+ $conf['apache']['vhost_port'] = $inst->free_query('ISPConfig Port', $ispconfig_port_number,'ispconfig_port');
}
// $ispconfig_ssl_default = (is_ispconfig_ssl_enabled() == true)?'y':'n';
- if(strtolower($inst->simple_query('Create new ISPConfig SSL certificate', array('yes', 'no'), 'no')) == 'yes') {
+ if(strtolower($inst->simple_query('Create new ISPConfig SSL certificate', array('yes', 'no'), 'no','create_new_ispconfig_ssl_cert')) == 'yes') {
$inst->make_ispconfig_ssl_cert();
}
}
@@ -395,7 +444,7 @@
$inst->install_ispconfig();
//** Configure Crontab
-$update_crontab_answer = $inst->simple_query('Reconfigure Crontab?', array('yes', 'no'), 'yes');
+$update_crontab_answer = $inst->simple_query('Reconfigure Crontab?', array('yes', 'no'), 'yes','reconfigure_crontab');
if($update_crontab_answer == 'yes') {
swriteln('Updating Crontab');
$inst->install_crontab();
diff --git a/interface/lib/app.inc.php b/interface/lib/app.inc.php
index 1d80b8a..8832f45 100755
--- a/interface/lib/app.inc.php
+++ b/interface/lib/app.inc.php
@@ -78,16 +78,16 @@
$tmp = $this->ini_parser->parse_ini_string(stripslashes($tmp['config']));
if(!isset($tmp['misc']['session_allow_endless']) || $tmp['misc']['session_allow_endless'] != 'y') {
$this->session->set_timeout($sess_timeout);
- session_set_cookie_params(($sess_timeout * 60) + 300); // make the cookie live 5 minutes longer
+ session_set_cookie_params(3600 * 24 * 365); // cookie timeout is never updated, so it must not be short
} else {
// we are doing login here, so we need to set the session data
$this->session->set_permanent(true);
$this->session->set_timeout(365 * 24 * 3600); // one year
- session_set_cookie_params(365 * 24 * 3600); // make the cookie live 5 minutes longer
+ session_set_cookie_params(3600 * 24 * 365); // cookie timeout is never updated, so it must not be short
}
} else {
$this->session->set_timeout($sess_timeout);
- session_set_cookie_params(($sess_timeout * 60) + 300); // make the cookie live 5 minutes longer
+ session_set_cookie_params(3600 * 24 * 365); // cookie timeout is never updated, so it must not be short
}
} else {
session_set_cookie_params(0); // until browser is closed
diff --git a/interface/lib/classes/aps_guicontroller.inc.php b/interface/lib/classes/aps_guicontroller.inc.php
index 7c4208f..f6a0ff4 100644
--- a/interface/lib/classes/aps_guicontroller.inc.php
+++ b/interface/lib/classes/aps_guicontroller.inc.php
@@ -333,7 +333,7 @@
}
//* Insert new package instance
- $insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `customer_id`, `package_id`, `instance_status`) VALUES (".$app->functions->intval($websrv['sys_userid']).", ".$app->functions->intval($websrv['sys_groupid']).", 'riud', '".$app->functions->intval($websrv['sys_perm_group'])."', '', ".$app->db->quote($webserver_id).",".$app->db->quote($customerid).", ".$app->db->quote($packageid).", ".INSTANCE_PENDING.")";
+ $insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `customer_id`, `package_id`, `instance_status`) VALUES (".$app->functions->intval($websrv['sys_userid']).", ".$app->functions->intval($websrv['sys_groupid']).", 'riud', '".$app->db->quote($websrv['sys_perm_group'])."', '', ".$app->db->quote($webserver_id).",".$app->db->quote($customerid).", ".$app->db->quote($packageid).", ".INSTANCE_PENDING.")";
$InstanceID = $app->db->datalogInsert('aps_instances', $insert_data, 'id');
//* Insert all package settings
diff --git a/interface/lib/classes/auth.inc.php b/interface/lib/classes/auth.inc.php
index 706dd04..070662f 100644
--- a/interface/lib/classes/auth.inc.php
+++ b/interface/lib/classes/auth.inc.php
@@ -50,7 +50,7 @@
$userid = $app->functions->intval($userid);
$client = $app->db->queryOneRecord("SELECT client.limit_client FROM sys_user, client WHERE sys_user.userid = $userid AND sys_user.client_id = client.client_id");
- if($client['limit_client'] > 0) {
+ if($client['limit_client'] != 0) {
return true;
} else {
return false;
diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php
index 5f62f52..8fed767 100644
--- a/interface/lib/classes/functions.inc.php
+++ b/interface/lib/classes/functions.inc.php
@@ -248,7 +248,7 @@
}
$ips = array();
- $results = $app->db->queryAllRecords("SELECT ip_address AS ip, server_id FROM server_ip WHERE ip_type = '".$type."'");
+ $results = $app->db->queryAllRecords("SELECT ip_address AS ip, server_id FROM server_ip WHERE ip_type = '".$app->db->quote($type)."'");
if(!empty($results) && is_array($results)){
foreach($results as $result){
if(preg_match($regex, $result['ip'])){
@@ -424,6 +424,32 @@
return implode("\n", $domains);
}
+ public function is_allowed_user($username, $restrict_names = false) {
+ global $app;
+
+ $name_blacklist = array('root','ispconfig','vmail','getmail');
+ if(in_array($username,$name_blacklist)) return false;
+
+ if(preg_match('/^[a-zA-Z0-9\.\-_]{1,32}$/', $username) == false) return false;
+
+ if($restrict_names == true && preg_match('/^web\d+$/', $username) == false) return false;
+
+ return true;
+ }
+
+ public function is_allowed_group($groupname, $restrict_names = false) {
+ global $app;
+
+ $name_blacklist = array('root','ispconfig','vmail','getmail');
+ if(in_array($groupname,$name_blacklist)) return false;
+
+ if(preg_match('/^[a-zA-Z0-9\.\-_]{1,32}$/', $groupname) == false) return false;
+
+ if($restrict_names == true && preg_match('/^client\d+$/', $groupname) == false) return false;
+
+ return true;
+ }
+
}
?>
diff --git a/interface/lib/classes/listform.inc.php b/interface/lib/classes/listform.inc.php
index 14c1a13..1b613a9 100644
--- a/interface/lib/classes/listform.inc.php
+++ b/interface/lib/classes/listform.inc.php
@@ -97,6 +97,7 @@
$querystring = str_replace("{AUTHSQL}", $app->tform->getAuthSQL('r'), $querystring);
$querystring = str_replace("{AUTHSQL-A}", $app->tform->getAuthSQL('r', 'a'), $querystring);
$querystring = str_replace("{AUTHSQL-B}", $app->tform->getAuthSQL('r', 'b'), $querystring);
+ $querystring = preg_replace_callback('@{AUTHSQL::(.+?)}@', create_function('$matches','global $app; $tmp = $app->tform->getAuthSQL("r", $matches[1]); return $tmp;'), $querystring);
//* Getting the records
$tmp_records = $app->db->queryAllRecords($querystring);
@@ -248,6 +249,8 @@
public function getPagingSQL($sql_where = '1')
{
global $app, $conf;
+
+ $old_search_limit = intval($_SESSION['search']['limit']);
//* Add Global Limit from selectbox
if(!empty($_POST['search_limit']) and $app->functions->intval($_POST['search_limit']) > 0){
@@ -272,6 +275,9 @@
//* set PAGE to worth request variable "PAGE" - ? setze page auf wert der request variablen "page"
if(isset($_REQUEST["page"])) $_SESSION["search"][$list_name]["page"] = $app->functions->intval($_REQUEST["page"]);
+
+ //* Set search to changed when search limit has been changed.
+ if(intval($_SESSION['search']['limit']) != $old_search_limit) $this->searchChanged = 1;
//* PAGE to 0 set, if look for themselves ? page auf 0 setzen, wenn suche sich ge�ndert hat.
if($this->searchChanged == 1) $_SESSION['search'][$list_name]['page'] = 0;
diff --git a/interface/lib/classes/session.inc.php b/interface/lib/classes/session.inc.php
index dcb187b..8b3a7cf 100644
--- a/interface/lib/classes/session.inc.php
+++ b/interface/lib/classes/session.inc.php
@@ -88,25 +88,21 @@
// Dont write session_data to DB if session data has not been changed after reading it.
if(isset($this->session_array['session_data']) && $this->session_array['session_data'] != '' && $this->session_array['session_data'] == $session_data) {
$session_id = $this->db->quote($session_id);
- $last_updated = date('Y-m-d H:i:s');
- $this->db->query("UPDATE sys_session SET last_updated = '$last_updated' WHERE session_id = '$session_id'");
+ $this->db->query("UPDATE sys_session SET last_updated = NOW() WHERE session_id = '$session_id'");
return true;
}
if (@$this->session_array['session_id'] == '') {
$session_id = $this->db->quote($session_id);
- $date_created = date('Y-m-d H:i:s');
- $last_updated = date('Y-m-d H:i:s');
$session_data = $this->db->quote($session_data);
- $sql = "INSERT INTO sys_session (session_id,date_created,last_updated,session_data,permanent) VALUES ('$session_id','$date_created','$last_updated','$session_data','" . ($this->permanent ? 'y' : 'n') . "')";
+ $sql = "REPLACE INTO sys_session (session_id,date_created,last_updated,session_data,permanent) VALUES ('$session_id',NOW(),NOW(),'$session_data','" . ($this->permanent ? 'y' : 'n') . "')";
$this->db->query($sql);
} else {
$session_id = $this->db->quote($session_id);
- $last_updated = date('Y-m-d H:i:s');
$session_data = $this->db->quote($session_data);
- $sql = "UPDATE sys_session SET last_updated = '$last_updated', session_data = '$session_data'" . ($this->permanent ? ", `permanent` = 'y'" : "") . " WHERE session_id = '$session_id'";
+ $sql = "UPDATE sys_session SET last_updated = NOW(), session_data = '$session_data'" . ($this->permanent ? ", `permanent` = 'y'" : "") . " WHERE session_id = '$session_id'";
$this->db->query($sql);
}
@@ -128,18 +124,11 @@
/*if($this->timeout > 0) {
$this->db->query("DELETE FROM sys_session WHERE last_updated < DATE_SUB(NOW(), INTERVAL " . intval($this->timeout) . " MINUTE)");
} else {*/
- $real_now = date('Y-m-d H:i:s');
- $dt1 = strtotime("$real_now -$max_lifetime seconds");
- $dt2 = date('Y-m-d H:i:s', $dt1);
-
- $sql = "DELETE FROM sys_session WHERE last_updated < '$dt2' AND `permanent` != 'y'";
+ $sql = "DELETE FROM sys_session WHERE last_updated < DATE_SUB(NOW(), INTERVAL " . intval($max_lifetime) . " SECOND) AND `permanent` != 'y'";
$this->db->query($sql);
/* delete very old even if they are permanent */
- $dt1 = strtotime("$real_now -365 days");
- $dt2 = date('Y-m-d H:i:s', $dt1);
-
- $sql = "DELETE FROM sys_session WHERE last_updated < '$dt2'";
+ $sql = "DELETE FROM sys_session WHERE last_updated < DATE_SUB(NOW(), INTERVAL 1 YEAR)";
$this->db->query($sql);
//}
diff --git a/interface/lib/classes/tform.inc.php b/interface/lib/classes/tform.inc.php
index 5fc0627..4522304 100644
--- a/interface/lib/classes/tform.inc.php
+++ b/interface/lib/classes/tform.inc.php
@@ -252,7 +252,9 @@
unset($tmp_recordid);
$querystring = str_replace("{AUTHSQL}", $this->getAuthSQL('r'), $querystring);
- $querystring = preg_replace_callback('@{AUTHSQL::(.+?)}@', "self::table_auth_sql", $querystring);
+ //$querystring = preg_replace_callback('@{AUTHSQL::(.+?)}@', "self::table_auth_sql", $querystring);
+ //*Used the ld form to be compatible with php < 5.3
+ $querystring = preg_replace_callback('@{AUTHSQL::(.+?)}@', create_function('$matches','global $app; $tmp = $app->tform->getAuthSQL("r", $matches[1]); return $tmp;'), $querystring);
// Getting the records
$tmp_records = $app->db->queryAllRecords($querystring);
@@ -293,10 +295,12 @@
return $values;
}
-
+
+ /*
function table_auth_sql($matches){
return $this->getAuthSQL('r', $matches[1]);
}
+ */
//* If the parameter 'valuelimit' is set
function applyValueLimit($limit, $values) {
@@ -1509,7 +1513,7 @@
*/
function _getDateTimeHTML($form_element, $default_value, $display_seconds=false)
{
- $_datetime = strtotime($default_value);
+ $_datetime = ($default_value && $default_value != '0000-00-00 00:00:00' ? strtotime($default_value) : false);
$_showdate = ($_datetime === false) ? false : true;
$dselect = array('day', 'month', 'year', 'hour', 'minute');
diff --git a/interface/lib/classes/validate_domain.inc.php b/interface/lib/classes/validate_domain.inc.php
index 988945d..d92de9b 100644
--- a/interface/lib/classes/validate_domain.inc.php
+++ b/interface/lib/classes/validate_domain.inc.php
@@ -123,156 +123,41 @@
}
// check if domain has alias/subdomains - if we move a web to another IP, make sure alias/subdomains are checked as well
- $aliassubdomains = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE parent_domain_id = ".$app->functions->intval($primary_id)." AND (type = 'alias' OR type = 'subdomain')");
+ $aliassubdomains = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE parent_domain_id = ".$app->functions->intval($primary_id)." AND (type = 'alias' OR type = 'subdomain' OR type = 'vhostsubdomain')");
$additional_sql1 = '';
$additional_sql2 = '';
if(is_array($aliassubdomains) && !empty($aliassubdomains)){
foreach($aliassubdomains as $aliassubdomain){
- $additional_sql1 .= " OR `domain` = '".$app->db->quote($aliassubdomain['domain'])."'";
- $additional_sql2 .= " OR CONCAT(`subdomain`, '.', `domain`) = '".$app->db->quote($aliassubdomain['domain'])."'";
+ $additional_sql1 .= " OR d.domain = '".$app->db->quote($aliassubdomain['domain'])."'";
+ $additional_sql2 .= " OR CONCAT(d.subdomain, '.', d.domain) = '".$app->db->quote($aliassubdomain['domain'])."'";
}
}
-
- //$check = $app->db->queryOneRecord("SELECT COUNT(*) as `cnt` FROM `web_domain` WHERE `domain` = '" . $app->db->quote($domain_name) . "' AND `domain_id` != " . $app->functions->intval($primary_id));
- //if($check['cnt'] > 0) return false;
-
- // we can have the same domain on different servers or different IPs, so we have to check for identical domains on the same IP (or wildcard IPs)
- $checks = $app->db->queryAllRecords("SELECT * FROM `web_domain` WHERE (`domain` = '" . $app->db->quote($domain_name) . "'".$additional_sql1.") AND `server_id` = ".intval($domain['server_id'])." AND `domain_id` != " . $app->functions->intval($primary_id).($additional_sql1 != '' ? " AND `parent_domain_id` != ".$app->functions->intval($primary_id) : ""));
-
+
+
+ $qrystr = "SELECT d.domain_id, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ip_address, d.ip_address) as `ip_address`, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ipv6_address, d.ipv6_address) as `ipv6_address` FROM `web_domain` as d LEFT JOIN `web_domain` as p ON (p.domain_id = d.parent_domain_id) WHERE (d.domain = '" . $app->db->quote($domain_name) . "'" . $additional_sql1 . ") AND d.server_id = " . $app->functions->intval($domain['server_id']) . " AND d.domain_id != " . $app->functions->intval($primary_id) . ($primary_id ? " AND d.parent_domain_id != " . $app->functions->intval($primary_id) : "");
+ $checks = $app->db->queryAllRecords($qrystr);
if(is_array($checks) && !empty($checks)){
foreach($checks as $check){
if($domain['ip_address'] == '*') return false;
if($check['ip_address'] == '*') return false;
if($domain['ip_address'] != '' && $check['ip_address'] == $domain['ip_address']) return false;
if($domain['ipv6_address'] != '' && $check['ipv6_address'] == $domain['ipv6_address']) return false;
- // if alias/subdomain: check IP addresses of parent domain
- if($check['ip_address'] == '' || $check['ipv6_address'] == ''){
- if($check['parent_domain_id'] > 0){
- $check_parent_domain = $app->db->queryOneRecord("SELECT * FROM `web_domain` WHERE `domain_id` = ".$check['parent_domain_id']);
- }
- }
-
- if($domain['ip_address'] == '' && $check['ip_address'] != ''){
- if(is_array($parent_domain) && !empty($parent_domain)){
- if($parent_domain['ip_address'] == '*') return false;
- if($parent_domain['ip_address'] != '' && $check['ip_address'] == $parent_domain['ip_address']) return false;
- }
- }
-
- if($domain['ip_address'] == '' && $check['ip_address'] == ''){
- if($check['parent_domain_id'] > 0){
- if(is_array($check_parent_domain) && !empty($check_parent_domain)){
- if($check_parent_domain['ip_address'] == '*') return false;
- }
- }
- if(is_array($parent_domain) && !empty($parent_domain)){
- if($parent_domain['ip_address'] == '*') return false;
- if($parent_domain['ip_address'] != '' && $check_parent_domain['ip_address'] == $parent_domain['ip_address']) return false;
- }
- }
-
- if($check['ip_address'] == '' && $domain['ip_address'] != ''){
- if($check['parent_domain_id'] > 0){
- if(is_array($check_parent_domain) && !empty($check_parent_domain)){
- if($check_parent_domain['ip_address'] == '*') return false;
- if($check_parent_domain['ip_address'] != '' && $check_parent_domain['ip_address'] == $domain['ip_address']) return false;
- }
- }
- }
-
- if($domain['ipv6_address'] == '' && $check['ipv6_address'] != ''){
- if(is_array($parent_domain) && !empty($parent_domain)){
- if($parent_domain['ipv6_address'] != '' && $check['ipv6_address'] == $parent_domain['ipv6_address']) return false;
- }
- }
-
- if($domain['ipv6_address'] == '' && $check['ipv6_address'] == ''){
- if(is_array($parent_domain) && !empty($parent_domain)){
- if($parent_domain['ipv6_address'] != '' && $check_parent_domain['ipv6_address'] == $parent_domain['ipv6_address']) return false;
- }
- }
-
- if($check['ipv6_address'] == '' && $domain['ipv6_address'] != ''){
- if($check['parent_domain_id'] > 0){
- if(is_array($check_parent_domain) && !empty($check_parent_domain)){
- if($check_parent_domain['ipv6_address'] != '' && $check_parent_domain['ipv6_address'] == $domain['ipv6_address']) return false;
- }
- }
- }
}
}
-
-
+
if($only_domain == false) {
- //$check = $app->db->queryOneRecord("SELECT COUNT(*) as `cnt` FROM `web_domain` WHERE CONCAT(`subdomain`, '.', `domain`) = '" . $app->db->quote($domain_name) . "' AND `domain_id` != " . $app->functions->intval($primary_id));
- //if($check['cnt'] > 0) return false;
- // we can have the same domain on different servers or different IPs, so we have to check for identical domains on the same IP (or wildcard IPs)
- $checks = $app->db->queryAllRecords("SELECT * FROM `web_domain` WHERE (CONCAT(`subdomain`, '.', `domain`) = '" . $app->db->quote($domain_name) . "'".$additional_sql2.") AND `server_id` = ".intval($domain['server_id'])." AND `domain_id` != " . $app->functions->intval($primary_id).($additional_sql2 != '' ? " AND `parent_domain_id` != ".$app->functions->intval($primary_id) : ""));
+ $qrystr = "SELECT d.domain_id, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ip_address, d.ip_address) as `ip_address`, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ipv6_address, d.ipv6_address) as `ipv6_address` FROM `web_domain` as d LEFT JOIN `web_domain` as p ON (p.domain_id = d.parent_domain_id) WHERE (CONCAT(d.subdomain, '.', d.domain)= '" . $app->db->quote($domain_name) . "'" . $additional_sql2 . ") AND d.server_id = " . $app->functions->intval($domain['server_id']) . " AND d.domain_id != " . $app->functions->intval($primary_id) . ($primary_id ? " AND d.parent_domain_id != " . $app->functions->intval($primary_id) : "");
+ $checks = $app->db->queryAllRecords($qrystr);
if(is_array($checks) && !empty($checks)){
foreach($checks as $check){
if($domain['ip_address'] == '*') return false;
if($check['ip_address'] == '*') return false;
if($domain['ip_address'] != '' && $check['ip_address'] == $domain['ip_address']) return false;
if($domain['ipv6_address'] != '' && $check['ipv6_address'] == $domain['ipv6_address']) return false;
- // if alias/subdomain: check IP addresses of parent domain
- if($check['ip_address'] == '' || $check['ipv6_address'] == ''){
- if($check['parent_domain_id'] > 0){
- $check_parent_domain = $app->db->queryOneRecord("SELECT * FROM `web_domain` WHERE `domain_id` = ".$app->functions->intval($check['parent_domain_id']));
- }
- }
-
- if($domain['ip_address'] == '' && $check['ip_address'] != ''){
- if(is_array($parent_domain) && !empty($parent_domain)){
- if($parent_domain['ip_address'] == '*') return false;
- if($parent_domain['ip_address'] != '' && $check['ip_address'] == $parent_domain['ip_address']) return false;
- }
- }
-
- if($domain['ip_address'] == '' && $check['ip_address'] == ''){
- if($check['parent_domain_id'] > 0){
- if(is_array($check_parent_domain) && !empty($check_parent_domain)){
- if($check_parent_domain['ip_address'] == '*') return false;
- }
- }
- if(is_array($parent_domain) && !empty($parent_domain)){
- if($parent_domain['ip_address'] == '*') return false;
- if($parent_domain['ip_address'] != '' && $check_parent_domain['ip_address'] == $parent_domain['ip_address']) return false;
- }
- }
-
- if($check['ip_address'] == '' && $domain['ip_address'] != ''){
- if($check['parent_domain_id'] > 0){
- if(is_array($check_parent_domain) && !empty($check_parent_domain)){
- if($check_parent_domain['ip_address'] == '*') return false;
- if($check_parent_domain['ip_address'] != '' && $check_parent_domain['ip_address'] == $domain['ip_address']) return false;
- }
- }
- }
-
- if($domain['ipv6_address'] == '' && $check['ipv6_address'] != ''){
- if(is_array($parent_domain) && !empty($parent_domain)){
- if($parent_domain['ipv6_address'] != '' && $check['ipv6_address'] == $parent_domain['ipv6_address']) return false;
- }
- }
-
- if($domain['ipv6_address'] == '' && $check['ipv6_address'] == ''){
- if(is_array($parent_domain) && !empty($parent_domain)){
- if($parent_domain['ipv6_address'] != '' && $check_parent_domain['ipv6_address'] == $parent_domain['ipv6_address']) return false;
- }
- }
-
- if($check['ipv6_address'] == '' && $domain['ipv6_address'] != ''){
- if($check['parent_domain_id'] > 0){
- if(is_array($check_parent_domain) && !empty($check_parent_domain)){
- if($check_parent_domain['ipv6_address'] != '' && $check_parent_domain['ipv6_address'] == $domain['ipv6_address']) return false;
- }
- }
- }
}
}
-
}
-
+
return true;
}
diff --git a/interface/lib/classes/validate_password.inc.php b/interface/lib/classes/validate_password.inc.php
index 998c37c..da044c6 100644
--- a/interface/lib/classes/validate_password.inc.php
+++ b/interface/lib/classes/validate_password.inc.php
@@ -53,10 +53,11 @@
$different += 1;
}
- if (preg_match('/[`~!@#$%^&*()_+|\\=-[]}{\';:\/?.>,<" ]/', $password)) {
+ if (preg_match('/[`~!@#$%^&*()_+|\\=-\[\]}{\';:\/?.>,<" ]/', $password)) {
$points += 1;
$different += 1;
}
+
if ($points == 0 || $different < 3) {
if ($length >= 5 && $length <= 6) {
@@ -122,7 +123,7 @@
$lng_text = str_replace('{chars}', $min_password_length, $lng_text);
}
if(!$lng_text) $lng_text = 'weak_password_txt'; // always return a string, even if language is missing - otherwise validator is NOT MATCHING!
-
+
if(strlen($field_value) < $min_password_length) return $lng_text;
if($this->_get_password_strength($field_value) < $min_password_strength) return $lng_text;
diff --git a/interface/lib/classes/validate_systemuser.inc.php b/interface/lib/classes/validate_systemuser.inc.php
new file mode 100644
index 0000000..f1bbd2b
--- /dev/null
+++ b/interface/lib/classes/validate_systemuser.inc.php
@@ -0,0 +1,64 @@
+<?php
+
+/*
+Copyright (c) 2014, Till Brehm, projektfarm Gmbh
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of ISPConfig nor the names of its contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+class validate_systemuser {
+
+ /*
+ Validator function to check if a given user is ok.
+ */
+ function check_sysuser($field_name, $field_value, $validator) {
+ global $app;
+
+ $errmsg = $validator['errmsg'];
+ $check_names = (isset($validator['check_names']) && $validator['check_names'] == true)?true:false;
+
+ if($app->functions->is_allowed_user(trim(strtolower($field_value)),$check_names) == false) {
+ return $app->tform->wordbook[$errmsg]."<br>\r\n";
+ }
+ }
+
+ /*
+ Validator function to check if a given group is ok.
+ */
+ function check_sysgroup($field_name, $field_value, $validator) {
+ global $app;
+
+ $errmsg = $validator['errmsg'];
+ $check_names = (isset($validator['check_names']) && $validator['check_names'] == true)?true:false;
+
+ if($app->functions->is_allowed_group(trim(strtolower($field_value)),$check_names) == false) {
+ return $app->tform->wordbook[$errmsg]."<br>\r\n";
+ }
+ }
+
+
+
+
+}
diff --git a/interface/lib/config.inc.php b/interface/lib/config.inc.php
index 7fcbfe2..179acc9 100644
--- a/interface/lib/config.inc.php
+++ b/interface/lib/config.inc.php
@@ -44,7 +44,7 @@
//** Application
define('ISPC_APP_TITLE', 'ISPConfig');
-define('ISPC_APP_VERSION', '3.0.5.4p1');
+define('ISPC_APP_VERSION', '3.0.5.4p2');
define('DEVSYSTEM', 0);
diff --git a/interface/lib/lang/el.lng b/interface/lib/lang/el.lng
index 5f7cb70..20f26a4 100644
--- a/interface/lib/lang/el.lng
+++ b/interface/lib/lang/el.lng
@@ -145,6 +145,6 @@
$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_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.';
?>
diff --git a/interface/lib/lang/fr.lng b/interface/lib/lang/fr.lng
index f344dc3..613f2a3 100644
--- a/interface/lib/lang/fr.lng
+++ b/interface/lib/lang/fr.lng
@@ -145,6 +145,6 @@
$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_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.';
?>
diff --git a/interface/lib/lang/se.lng b/interface/lib/lang/se.lng
index 5f49333..41a972f 100644
--- a/interface/lib/lang/se.lng
+++ b/interface/lib/lang/se.lng
@@ -145,7 +145,6 @@
$wb['strength_3'] = 'Bra';
$wb['strength_4'] = 'Starkt';
$wb['strength_5'] = 'Väldigt starkt';
-$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_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.';
?>
-
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index e115c8b..01ac568 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -126,8 +126,11 @@
2 => array( 'event' => 'SAVE',
'type' => 'TOLOWER')
),
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'hostname_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'hostname_error_empty'),
+ 1 => array ('type' => 'REGEX',
+ 'regex' => '/^[\w\.\-]{2,255}\.[a-zA-Z0-9\-]{2,30}$/',
+ 'errmsg'=> 'hostname_error_regex'),
),
'value' => '',
'width' => '40',
@@ -164,8 +167,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '/var/backup',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'backup_dir_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'backup_dir_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+ 'errmsg'=> 'backup_dir_error_regex'),
),
'value' => '',
'width' => '40',
@@ -176,14 +182,6 @@
'formtype' => 'CHECKBOX',
'default' => 'n',
'value' => array(0 => 'n', 1 => 'y')
- ),
- 'backup_dir_mount_cmd' => array(
- 'datatype' => 'VARCHAR',
- 'formtype' => 'TEXT',
- 'default' => '',
- 'value' => '',
- 'width' => '40',
- 'maxlength' => '255'
),
'backup_mode' => array(
'datatype' => 'VARCHAR',
@@ -279,8 +277,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '/home/vmail/[domain]/[localpart]/',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'maildir_path_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'maildir_path_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{5,128}$/',
+ 'errmsg'=> 'maildir_path_error_regex'),
),
'value' => '',
'width' => '40',
@@ -290,8 +291,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '/home/vmail/',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'homedir_path_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'homedir_path_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+ 'errmsg'=> 'homedir_path_error_regex'),
),
'value' => '',
'width' => '40',
@@ -313,8 +317,11 @@
'datatype' => 'INTEGER',
'formtype' => 'TEXT',
'default' => '5000',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'mailuser_uid_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'mailuser_uid_error_empty'),
+ 1 => array('type' => 'RANGE',
+ 'range' => '1999:',
+ 'errmsg' => 'mailuser_uid_error_range'),
),
'value' => '',
'width' => '10',
@@ -324,8 +331,11 @@
'datatype' => 'INTEGER',
'formtype' => 'TEXT',
'default' => '5000',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'mailuser_gid_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'mailuser_gid_error_empty'),
+ 1 => array('type' => 'RANGE',
+ 'range' => '1999:',
+ 'errmsg' => 'mailuser_gid_error_range'),
),
'value' => '',
'width' => '10',
@@ -335,8 +345,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => 'vmail',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'mailuser_name_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'mailuser_name_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^(?!ispconfig|root)([a-zA-Z0-9]{1,20})$/',
+ 'errmsg'=> 'mailuser_name_error_regex'),
),
'value' => '',
'width' => '10',
@@ -346,8 +359,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => 'vmail',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'mailuser_group_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'mailuser_group_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^(?!ispconfig|root)([a-zA-Z0-9]{1,20})$/',
+ 'errmsg'=> 'mailuser_group_name_error_regex'),
),
'value' => '',
'width' => '10',
@@ -455,8 +471,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'getmail_config_dir_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'getmail_config_dir_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+ 'errmsg'=> 'getmail_config_dir_error_regex'),
),
'value' => '',
'width' => '40',
@@ -486,8 +505,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'website_basedir_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'website_basedir_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+ 'errmsg'=> 'website_basedir_error_regex'),
),
'value' => '',
'width' => '40',
@@ -497,8 +519,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'website_path_error_empty'),
+ 'validators' => array( 0 => array( 'type' => 'NOTEMPTY',
+ 'errmsg' => 'website_path_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{5,128}$/',
+ 'errmsg'=> 'website_path_error_regex'),
),
'value' => '',
'width' => '40',
@@ -508,8 +533,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'website_symlinks_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'website_symlinks_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]\:]{5,128}$/',
+ 'errmsg'=> 'website_symlinks_error_regex'),
),
'value' => '',
'width' => '40',
@@ -541,8 +569,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'vhost_conf_dir_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'vhost_conf_dir_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+ 'errmsg'=> 'vhost_conf_dir_error_regex'),
),
'value' => '',
'width' => '40',
@@ -552,8 +583,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'vhost_conf_enabled_dir_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'vhost_conf_enabled_dir_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+ 'errmsg'=> 'vhost_conf_enabled_dir_error_regex'),
),
'value' => '',
'width' => '40',
@@ -563,8 +597,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'nginx_vhost_conf_dir_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'nginx_vhost_conf_dir_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+ 'errmsg'=> 'nginx_vhost_conf_dir_error_regex'),
),
'value' => '',
'width' => '40',
@@ -574,8 +611,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'nginx_vhost_conf_enabled_dir_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'nginx_vhost_conf_enabled_dir_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+ 'errmsg'=> 'nginx_vhost_conf_enabled_dir_error_regex'),
),
'value' => '',
'width' => '40',
@@ -584,6 +624,10 @@
'CA_path' => array(
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
+ 'validators' => array( 0 => array ( 'type' => 'REGEX',
+ 'regex' => '/^[a-zA-Z0-9\.\-\_\/]{0,128}$/',
+ 'errmsg'=> 'ca_path_error_regex'),
+ ),
'default' => '',
'value' => '',
'width' => '40',
@@ -683,6 +727,13 @@
'default' => '',
'validators' => array(0 => array('type' => 'NOTEMPTY',
'errmsg' => 'apache_user_error_empty'),
+ 1 => array(
+ 'type' => 'CUSTOM',
+ 'class' => 'validate_systemuser',
+ 'function' => 'check_sysuser',
+ 'check_names' => false,
+ 'errmsg' => 'invalid_apache_user_txt'
+ ),
),
'value' => '',
'width' => '40',
@@ -694,6 +745,13 @@
'default' => '',
'validators' => array(0 => array('type' => 'NOTEMPTY',
'errmsg' => 'apache_group_error_empty'),
+ 1 => array(
+ 'type' => 'CUSTOM',
+ 'class' => 'validate_systemuser',
+ 'function' => 'check_sysgroup',
+ 'check_names' => false,
+ 'errmsg' => 'invalid_apache_group_txt'
+ ),
),
'value' => '',
'width' => '40',
@@ -720,8 +778,15 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'nginx_user_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'nginx_user_error_empty'),
+ 1 => array(
+ 'type' => 'CUSTOM',
+ 'class' => 'validate_systemuser',
+ 'function' => 'check_sysuser',
+ 'check_names' => false,
+ 'errmsg' => 'invalid_nginx_user_txt'
+ ),
),
'value' => '',
'width' => '40',
@@ -731,8 +796,15 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'nginx_group_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'nginx_group_error_empty'),
+ 1 => array(
+ 'type' => 'CUSTOM',
+ 'class' => 'validate_systemuser',
+ 'function' => 'check_sysgroup',
+ 'check_names' => false,
+ 'errmsg' => 'invalid_nginx_group_txt'
+ ),
),
'value' => '',
'width' => '40',
@@ -742,8 +814,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'php_ini_path_apache_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'php_ini_path_apache_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+ 'errmsg'=> 'php_ini_path_apache_error_regex'),
),
'value' => '',
'width' => '40',
@@ -753,8 +828,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'php_ini_path_cgi_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'php_ini_path_cgi_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+ 'errmsg'=> 'php_ini_path_cgi_error_regex'),
),
'value' => '',
'width' => '40',
@@ -764,8 +842,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'php_fpm_init_script_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'php_fpm_init_script_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^[a-zA-Z0-9\.\-\_]{1,128}$/',
+ 'errmsg'=> 'php_fpm_init_script_error_regex'),
),
'value' => '',
'width' => '40',
@@ -775,8 +856,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'php_fpm_ini_path_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'php_fpm_ini_path_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+ 'errmsg'=> 'php_fpm_ini_path_error_regex'),
),
'value' => '',
'width' => '40',
@@ -786,8 +870,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'php_fpm_pool_dir_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'php_fpm_pool_dir_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+ 'errmsg'=> 'php_fpm_pool_dir_error_regex'),
),
'value' => '',
'width' => '40',
@@ -797,7 +884,7 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
+ 'validators' => array(0 => array('type' => 'ISPOSITIVE',
'errmsg' => 'php_fpm_start_port_error_empty'),
),
'value' => '',
@@ -808,8 +895,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'php_fpm_socket_dir_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'php_fpm_socket_dir_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+ 'errmsg'=> 'php_fpm_socket_dir_error_regex'),
),
'value' => '',
'width' => '40',
@@ -819,8 +909,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'php_open_basedir_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'php_open_basedir_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^[a-zA-Z0-9\.\-\_\/\]\[\:]{1,}$/',
+ 'errmsg'=> 'php_open_basedir_error_regex'),
),
'value' => '',
'width' => '40',
@@ -830,8 +923,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'nginx_cgi_socket_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'nginx_cgi_socket_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+ 'errmsg'=> 'nginx_cgi_socket_error_regex'),
),
'value' => '',
'width' => '40',
@@ -841,8 +937,8 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'htaccess_allow_override_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'htaccess_allow_override_error_empty'),
),
'value' => '',
'width' => '40',
@@ -889,6 +985,12 @@
'awstats_data_dir' => array(
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'awstats_data_dir_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+ 'errmsg'=> 'awstats_data_dir_error_regex'),
+ ),
'default' => '',
'value' => '',
'width' => '40',
@@ -897,6 +999,12 @@
'awstats_pl' => array(
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'awstats_pl_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+ 'errmsg'=> 'awstats_pl_error_regex'),
+ ),
'default' => '',
'value' => '',
'width' => '40',
@@ -905,6 +1013,12 @@
'awstats_buildstaticpages_pl' => array(
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'awstats_buildstaticpages_pl_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+ 'errmsg'=> 'awstats_buildstaticpages_pl_error_regex'),
+ ),
'default' => '',
'value' => '',
'width' => '40',
@@ -928,8 +1042,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'bind_user_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'bind_user_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^(?!ispconfig)([a-zA-Z0-9]{1,20})$/',
+ 'errmsg'=> 'invalid_bind_user_txt'),
),
'value' => '',
'width' => '40',
@@ -939,8 +1056,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'bind_group_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'bind_group_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^(?!ispconfig)([a-zA-Z0-9]{1,20})$/',
+ 'errmsg'=> 'invalid_bind_group_txt'),
),
'value' => '',
'width' => '40',
@@ -950,8 +1070,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'bind_zonefiles_dir_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'bind_zonefiles_dir_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+ 'errmsg'=> 'bind_zonefiles_dir_error_regex'),
),
'value' => '',
'width' => '40',
@@ -961,8 +1084,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'named_conf_path_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'named_conf_path_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+ 'errmsg'=> 'named_conf_path_error_regex'),
),
'value' => '',
'width' => '40',
@@ -972,8 +1098,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'named_conf_local_path_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'named_conf_local_path_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+ 'errmsg'=> 'named_conf_local_path_error_regex'),
),
'value' => '',
'width' => '40',
@@ -997,8 +1126,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'fastcgi_starter_path_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'fastcgi_starter_path_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{1,128}$/',
+ 'errmsg'=> 'fastcgi_starter_path_error_regex'),
),
'value' => '',
'width' => '40',
@@ -1008,8 +1140,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'fastcgi_starter_script_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'fastcgi_starter_script_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+ 'errmsg'=> 'fastcgi_starter_script_error_regex'),
),
'value' => '',
'width' => '40',
@@ -1019,8 +1154,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'fastcgi_alias_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'fastcgi_alias_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+ 'errmsg'=> 'fastcgi_alias_error_regex'),
),
'value' => '',
'width' => '40',
@@ -1030,8 +1168,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'fastcgi_phpini_path_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'fastcgi_phpini_path_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{1,128}$/',
+ 'errmsg'=> 'fastcgi_phpini_path_error_regex'),
),
'value' => '',
'width' => '40',
@@ -1041,7 +1182,7 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
+ 'validators' => array(0 => array('type' => 'ISPOSITIVE',
'errmsg' => 'fastcgi_children_error_empty'),
),
'value' => '',
@@ -1066,8 +1207,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'fastcgi_bin_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'fastcgi_bin_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{1,128}$/',
+ 'errmsg'=> 'fastcgi_bin_error_regex'),
),
'value' => '',
'width' => '40',
@@ -1100,8 +1244,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'jailkit_chroot_home_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'jailkit_chroot_home_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{1,128}$/',
+ 'errmsg'=> 'jailkit_chroot_home_error_regex'),
),
'value' => '',
'width' => '40',
@@ -1111,8 +1258,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'jailkit_chroot_app_sections_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'jailkit_chroot_app_sections_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^[a-zA-Z0-9\-\_\ ]{1,128}$/',
+ 'errmsg'=> 'jailkit_chroot_app_sections_error_regex'),
),
'value' => '',
'width' => '40',
@@ -1122,8 +1272,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'jailkit_chroot_app_programs_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'jailkit_chroot_app_programs_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^[a-zA-Z0-9\.\-\_\/\ ]{1,}$/',
+ 'errmsg'=> 'jailkit_chroot_app_programs_error_regex'),
),
'value' => '',
'width' => '40',
@@ -1133,8 +1286,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'jailkit_chroot_cron_programs_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'jailkit_chroot_cron_programs_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^[a-zA-Z0-9\.\-\_\/\ ]{1,}$/',
+ 'errmsg'=> 'jailkit_chroot_cron_programs_error_regex'),
),
'value' => '',
'width' => '40',
@@ -1222,8 +1378,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'vlogger_config_dir_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'vlogger_config_dir_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+ 'errmsg'=> 'vlogger_config_dir_error_regex'),
),
'value' => '',
'width' => '40',
@@ -1249,8 +1408,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'cron_init_script_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'cron_init_script_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^[a-zA-Z0-9\-\_]{1,30}$/',
+ 'errmsg'=> 'cron_init_script_error_regex'),
),
'value' => '',
'width' => '40',
@@ -1260,8 +1422,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'crontab_dir_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'crontab_dir_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+ 'errmsg'=> 'crontab_dir_error_regex'),
),
'value' => '',
'width' => '40',
@@ -1271,8 +1436,11 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
- 'validators' => array(0 => array('type' => 'NOTEMPTY',
- 'errmsg' => 'cron_wget_error_empty'),
+ 'validators' => array( 0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'cron_wget_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+ 'errmsg'=> 'cron_wget_error_regex'),
),
'value' => '',
'width' => '40',
diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php
index ce4a0cb..c53d02b 100644
--- a/interface/web/admin/form/system_config.tform.php
+++ b/interface/web/admin/form/system_config.tform.php
@@ -449,7 +449,7 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'validators' => array ( 0 => array ( 'type' => 'REGEX',
- 'regex' => '/^[a-zA-Z0-0\-\_\[\]]{0,50}$/',
+ 'regex' => '/^[a-zA-Z0-9\-\_\[\]]{0,50}$/',
'errmsg'=> 'customer_no_template_error_regex'),
),
'default' => '',
diff --git a/interface/web/admin/language_edit.php b/interface/web/admin/language_edit.php
index fda70a6..8199244 100644
--- a/interface/web/admin/language_edit.php
+++ b/interface/web/admin/language_edit.php
@@ -57,7 +57,7 @@
$file_content = "<?php\n";
foreach($_POST['records'] as $key => $val) {
$val = stripslashes($val);
- $val = str_replace('"', '\"', $val);
+ $val = preg_replace('/(^|[^\\\\])((\\\\\\\\)*)"/', '$1$2\\"', $val);
$val = str_replace('$', '', $val);
$file_content .= '$wb['."'$key'".'] = "'.$val.'";'."\n";
$msg = 'File saved.';
diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng
index 2a404c6..7f23b7d 100644
--- a/interface/web/admin/lib/lang/ar_server_config.lng
+++ b/interface/web/admin/lib/lang/ar_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng
index ef13ef5..b15c3c6 100644
--- a/interface/web/admin/lib/lang/bg_server_config.lng
+++ b/interface/web/admin/lib/lang/bg_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng
index 66bacf2..2b0dd67 100644
--- a/interface/web/admin/lib/lang/br_server_config.lng
+++ b/interface/web/admin/lib/lang/br_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng
index 41d1bf8..c2db3ba 100644
--- a/interface/web/admin/lib/lang/cz_server_config.lng
+++ b/interface/web/admin/lib/lang/cz_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Zástupný symbol';
$wb['backup_dir_is_mount_txt'] = 'Připojit adresář pro zálohy ?';
-$wb['backup_dir_mount_cmd_txt'] = 'Příkaz připojení, pokud adresář pro zálohy není připojen . (např. mount ...)';
$wb['monitor_system_updates_txt'] = 'Kontrolovat aktualizace Linuxu';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index 3711d4a..b040dba 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Ungültige Munin-URL';
$wb['munin_url_note_txt'] = '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['monitor_system_updates_txt'] = 'Suche nach Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng
index 38da1e4..6ab52a9 100644
--- a/interface/web/admin/lib/lang/el_server_config.lng
+++ b/interface/web/admin/lib/lang/el_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/el_system_config.lng b/interface/web/admin/lib/lang/el_system_config.lng
index 41dff65..6c4f9a6 100644
--- a/interface/web/admin/lib/lang/el_system_config.lng
+++ b/interface/web/admin/lib/lang/el_system_config.lng
@@ -64,7 +64,7 @@
$wb['customer_no_start_txt'] = 'Customer No. start value';
$wb['customer_no_counter_txt'] = 'Customer No. counter';
$wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
$wb['No'] = 'No';
$wb['min_password_length_txt'] = 'Minimum password length';
$wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index 3dc1d0a..cc34e05 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -49,6 +49,7 @@
$wb["netmask_error_wrong"] = 'Invalid Netmask format.';
$wb["gateway_error_wrong"] = 'Invalid Gateway format.';
$wb["hostname_error_empty"] = 'Hostname is empty.';
+$wb["hostname_error_regex"] = 'Invalid Hostname.';
$wb["nameservers_error_empty"] = 'Nameserver is empty.';
$wb["config_dir_txt"] = 'Config directory';
$wb["init_script_txt"] = 'Cron init script name';
@@ -189,6 +190,55 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
index 1942704..42aeb09 100644
--- a/interface/web/admin/lib/lang/es_server_config.lng
+++ b/interface/web/admin/lib/lang/es_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
index a1a5c63..13ef9f3 100755
--- a/interface/web/admin/lib/lang/fi_server_config.lng
+++ b/interface/web/admin/lib/lang/fi_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng
index cee1433..d66d977 100644
--- a/interface/web/admin/lib/lang/fr_server_config.lng
+++ b/interface/web/admin/lib/lang/fr_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/fr_system_config.lng b/interface/web/admin/lib/lang/fr_system_config.lng
index 9abcd05..3c07c65 100644
--- a/interface/web/admin/lib/lang/fr_system_config.lng
+++ b/interface/web/admin/lib/lang/fr_system_config.lng
@@ -64,7 +64,7 @@
$wb['customer_no_start_txt'] = 'Customer No. start value';
$wb['customer_no_counter_txt'] = 'Customer No. counter';
$wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
$wb['No'] = 'No';
$wb['min_password_length_txt'] = 'Minimum password length';
$wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng
index 39bbc2a..1b71f0b 100644
--- a/interface/web/admin/lib/lang/hr_server_config.lng
+++ b/interface/web/admin/lib/lang/hr_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng
index 178a323..4a17525 100644
--- a/interface/web/admin/lib/lang/hu_server_config.lng
+++ b/interface/web/admin/lib/lang/hu_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng
index 4ef6414..ac67571 100644
--- a/interface/web/admin/lib/lang/id_server_config.lng
+++ b/interface/web/admin/lib/lang/id_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng
index d2a6288..fac8b35 100644
--- a/interface/web/admin/lib/lang/it_server_config.lng
+++ b/interface/web/admin/lib/lang/it_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng
index 06e2bb6..110148c 100644
--- a/interface/web/admin/lib/lang/ja_server_config.lng
+++ b/interface/web/admin/lib/lang/ja_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng
index d94b567..fb97a2c 100644
--- a/interface/web/admin/lib/lang/nl_server_config.lng
+++ b/interface/web/admin/lib/lang/nl_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng
index 6d74f7d..ada9888 100644
--- a/interface/web/admin/lib/lang/pl_server_config.lng
+++ b/interface/web/admin/lib/lang/pl_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng
index b31598c..e9fcd37 100644
--- a/interface/web/admin/lib/lang/pt_server_config.lng
+++ b/interface/web/admin/lib/lang/pt_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng
index 06b78eb..078910f 100644
--- a/interface/web/admin/lib/lang/ro_server_config.lng
+++ b/interface/web/admin/lib/lang/ro_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng
index 9c8e58f..9f881ae 100644
--- a/interface/web/admin/lib/lang/ru_server_config.lng
+++ b/interface/web/admin/lib/lang/ru_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/se.lng b/interface/web/admin/lib/lang/se.lng
index 5101192..0df5d1a 100644
--- a/interface/web/admin/lib/lang/se.lng
+++ b/interface/web/admin/lib/lang/se.lng
@@ -48,4 +48,3 @@
$wb['Do ISPConfig-Update'] = 'Utför ISPConfig-uppdatering';
$wb['Directive Snippets'] = 'Directive Snippets';
?>
-
diff --git a/interface/web/admin/lib/lang/se_directive_snippets.lng b/interface/web/admin/lib/lang/se_directive_snippets.lng
index 5366bf1..0f09c12 100644
--- a/interface/web/admin/lib/lang/se_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/se_directive_snippets.lng
@@ -8,4 +8,3 @@
$wb['directive_snippets_name_error_unique'] = 'There is already a directive snippet with this name.';
$wb['variables_txt'] = 'Variables';
?>
-
diff --git a/interface/web/admin/lib/lang/se_directive_snippets_list.lng b/interface/web/admin/lib/lang/se_directive_snippets_list.lng
index 3eac528..4124ea3 100644
--- a/interface/web/admin/lib/lang/se_directive_snippets_list.lng
+++ b/interface/web/admin/lib/lang/se_directive_snippets_list.lng
@@ -5,4 +5,3 @@
$wb['type_txt'] = 'Type';
$wb['add_new_record_txt'] = 'Add Directive Snippet';
?>
-
diff --git a/interface/web/admin/lib/lang/se_firewall.lng b/interface/web/admin/lib/lang/se_firewall.lng
index 4ae1ed6..123a648 100644
--- a/interface/web/admin/lib/lang/se_firewall.lng
+++ b/interface/web/admin/lib/lang/se_firewall.lng
@@ -9,4 +9,3 @@
$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 ,.';
?>
-
diff --git a/interface/web/admin/lib/lang/se_firewall_list.lng b/interface/web/admin/lib/lang/se_firewall_list.lng
index eff32d3..6f6f9ce 100644
--- a/interface/web/admin/lib/lang/se_firewall_list.lng
+++ b/interface/web/admin/lib/lang/se_firewall_list.lng
@@ -6,4 +6,3 @@
$wb['udp_port_txt'] = 'Öppna UDP-portar';
$wb['add_new_record_txt'] = 'Lägg till brandväggsinlägg';
?>
-
diff --git a/interface/web/admin/lib/lang/se_groups.lng b/interface/web/admin/lib/lang/se_groups.lng
index 175a422..4bb34b1 100644
--- a/interface/web/admin/lib/lang/se_groups.lng
+++ b/interface/web/admin/lib/lang/se_groups.lng
@@ -3,4 +3,3 @@
$wb['name_txt'] = 'Grupp';
$wb['name_err'] = 'Gruppnamnet måste ha minst 1 och max 30 tecken.';
?>
-
diff --git a/interface/web/admin/lib/lang/se_groups_list.lng b/interface/web/admin/lib/lang/se_groups_list.lng
index b5486da..fe3f4be 100644
--- a/interface/web/admin/lib/lang/se_groups_list.lng
+++ b/interface/web/admin/lib/lang/se_groups_list.lng
@@ -5,4 +5,3 @@
$wb['add_new_record_txt'] = 'Lägg till ny grupp';
$wb['warning_txt'] = '<b>VARNING:</b> Ändra inte några användarinställningar här. Use the Client- and Reseller settings in the Client module instead. Modifying or changing Users or groups here may cause data loss!';
?>
-
diff --git a/interface/web/admin/lib/lang/se_iptables.lng b/interface/web/admin/lib/lang/se_iptables.lng
index 7c7dbfd..b4e6bf8 100644
--- a/interface/web/admin/lib/lang/se_iptables.lng
+++ b/interface/web/admin/lib/lang/se_iptables.lng
@@ -11,4 +11,3 @@
$wb['active_txt'] = 'Aktiv';
$wb['iptables_error_unique'] = 'Det finns redan brandväggsinlägg för den här servern';
?>
-
diff --git a/interface/web/admin/lib/lang/se_iptables_list.lng b/interface/web/admin/lib/lang/se_iptables_list.lng
index 3d400b4..74a06df 100644
--- a/interface/web/admin/lib/lang/se_iptables_list.lng
+++ b/interface/web/admin/lib/lang/se_iptables_list.lng
@@ -13,4 +13,3 @@
$wb['active_txt'] = 'Aktiv';
$wb['iptables_error_unique'] = 'Det finns redan ett brandväggsinlägg för den här servern';
?>
-
diff --git a/interface/web/admin/lib/lang/se_language_add.lng b/interface/web/admin/lib/lang/se_language_add.lng
index a0607f2..59dbeee 100644
--- a/interface/web/admin/lib/lang/se_language_add.lng
+++ b/interface/web/admin/lib/lang/se_language_add.lng
@@ -6,4 +6,3 @@
$wb['btn_cancel_txt'] = 'Tillbaka';
$wb['language_new_hint_txt'] = '2 characters ISO 639-1 language-code (See http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)';
?>
-
diff --git a/interface/web/admin/lib/lang/se_language_complete.lng b/interface/web/admin/lib/lang/se_language_complete.lng
index 9fc8458..539c956 100644
--- a/interface/web/admin/lib/lang/se_language_complete.lng
+++ b/interface/web/admin/lib/lang/se_language_complete.lng
@@ -5,4 +5,3 @@
$wb['btn_cancel_txt'] = 'Tillbaka';
$wb['list_desc_txt'] = 'Slå ihop språkfilen med den engelska huvudfilen. <br />Detta lägger till saknade fraser från den engelska språkfilen till den valda språkfilen';
?>
-
diff --git a/interface/web/admin/lib/lang/se_language_edit.lng b/interface/web/admin/lib/lang/se_language_edit.lng
index e02c9a9..076caaa 100644
--- a/interface/web/admin/lib/lang/se_language_edit.lng
+++ b/interface/web/admin/lib/lang/se_language_edit.lng
@@ -6,4 +6,3 @@
$wb['btn_save_txt'] = 'Spara';
$wb['btn_cancel_txt'] = 'Tillbaka';
?>
-
diff --git a/interface/web/admin/lib/lang/se_language_export.lng b/interface/web/admin/lib/lang/se_language_export.lng
index a4d7147..21ff513 100644
--- a/interface/web/admin/lib/lang/se_language_export.lng
+++ b/interface/web/admin/lib/lang/se_language_export.lng
@@ -4,4 +4,3 @@
$wb['btn_save_txt'] = 'Exportera de valda språkfilerna';
$wb['btn_cancel_txt'] = 'Tillbaka';
?>
-
diff --git a/interface/web/admin/lib/lang/se_language_import.lng b/interface/web/admin/lib/lang/se_language_import.lng
index 8ecca37..59af5bc 100644
--- a/interface/web/admin/lib/lang/se_language_import.lng
+++ b/interface/web/admin/lib/lang/se_language_import.lng
@@ -7,4 +7,3 @@
$wb['ignore_version_txt'] = 'Hoppa över ISPConfig versionskontroll';
$wb['list_desc_txt'] = 'VARNING: Importera inte språkfiler från opålitliga källor!';
?>
-
diff --git a/interface/web/admin/lib/lang/se_language_list.lng b/interface/web/admin/lib/lang/se_language_list.lng
index b23024d..9949044 100644
--- a/interface/web/admin/lib/lang/se_language_list.lng
+++ b/interface/web/admin/lib/lang/se_language_list.lng
@@ -5,4 +5,3 @@
$wb['lang_file_txt'] = 'Språkfil';
$wb['lang_file_date_txt'] = 'Senast ändrad';
?>
-
diff --git a/interface/web/admin/lib/lang/se_login_as.lng b/interface/web/admin/lib/lang/se_login_as.lng
deleted file mode 100644
index 284a75b..0000000
--- a/interface/web/admin/lib/lang/se_login_as.lng
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-$wb['login_1_txt'] = 'Vill du logga in som användare';
-$wb['login_2_txt'] = 'Om du gör det kan du klicka på "gå tillbaka" genom att först klicka på logga ut.';
-$wb['btn_yes_txt'] = 'Ja, logga in som kund';
-$wb['btn_back_txt'] = 'Nej, tillbaka till listan';
-$wb['udp_port_help_txt'] = 'Kommaseparerade';
-$wb['active_txt'] = 'Aktiv';
-$wb['firewall_error_unique'] = 'Det finns redan ett brandväggsinlägg för den här servern.';
-$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 ",".';
-?>
-
diff --git a/interface/web/admin/lib/lang/se_package_install.lng b/interface/web/admin/lib/lang/se_package_install.lng
index 438f1d8..2fb8330 100644
--- a/interface/web/admin/lib/lang/se_package_install.lng
+++ b/interface/web/admin/lib/lang/se_package_install.lng
@@ -5,4 +5,3 @@
$wb['repo_password_txt'] = 'Lösenord (Frivilligt)';
$wb['active_txt'] = 'Aktiv';
?>
-
diff --git a/interface/web/admin/lib/lang/se_remote_action.lng b/interface/web/admin/lib/lang/se_remote_action.lng
index 99d9e2c..68d2bbd 100644
--- a/interface/web/admin/lib/lang/se_remote_action.lng
+++ b/interface/web/admin/lib/lang/se_remote_action.lng
@@ -10,4 +10,3 @@
$wb['ispconfig_update_title'] = 'ISPConfig uppdateringsinstruktioner';
$wb['ispconfig_update_text'] = 'Logga in som root på din server och kör kommandot<br /><br /> <strong>ispconfig_update.sh</strong><br /><br />för att påbörja ISPConfig-uppdateringen.<br /><br /><a href=http://www.faqforge.com/linux/controlpanels/ispconfig3/how-to-update-ispconfig-3/ target=_blank>Klicka här för detaljerade instruktioner</a>';
?>
-
diff --git a/interface/web/admin/lib/lang/se_remote_user.lng b/interface/web/admin/lib/lang/se_remote_user.lng
index 5fedddc..1b3b731 100644
--- a/interface/web/admin/lib/lang/se_remote_user.lng
+++ b/interface/web/admin/lib/lang/se_remote_user.lng
@@ -45,4 +45,3 @@
$wb['password_mismatch_txt'] = 'Lösenorden matchar inte';
$wb['password_match_txt'] = 'Lösenorden matchar';
?>
-
diff --git a/interface/web/admin/lib/lang/se_remote_user_list.lng b/interface/web/admin/lib/lang/se_remote_user_list.lng
index 9f49023..152a75f 100644
--- a/interface/web/admin/lib/lang/se_remote_user_list.lng
+++ b/interface/web/admin/lib/lang/se_remote_user_list.lng
@@ -5,4 +5,3 @@
$wb['parent_remote_userid_txt'] = 'ID';
$wb['username_txt'] = 'Username';
?>
-
diff --git a/interface/web/admin/lib/lang/se_server.lng b/interface/web/admin/lib/lang/se_server.lng
index 29f32a7..54df6f2 100644
--- a/interface/web/admin/lib/lang/se_server.lng
+++ b/interface/web/admin/lib/lang/se_server.lng
@@ -13,4 +13,3 @@
$wb['proxy_server_txt'] = 'Proxy-server';
$wb['firewall_server_txt'] = 'Brandväggsserver';
?>
-
diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng
index 565659e..fc5b201 100644
--- a/interface/web/admin/lib/lang/se_server_config.lng
+++ b/interface/web/admin/lib/lang/se_server_config.lng
@@ -189,7 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
-
diff --git a/interface/web/admin/lib/lang/se_server_config_list.lng b/interface/web/admin/lib/lang/se_server_config_list.lng
index 9ff7f9b..191b2c8 100644
--- a/interface/web/admin/lib/lang/se_server_config_list.lng
+++ b/interface/web/admin/lib/lang/se_server_config_list.lng
@@ -2,4 +2,3 @@
$wb['list_head_txt'] = 'Serverkonfiguration';
$wb['server_name_txt'] = 'Server';
?>
-
diff --git a/interface/web/admin/lib/lang/se_server_ip.lng b/interface/web/admin/lib/lang/se_server_ip.lng
index ad887bb..c6f92d8 100644
--- a/interface/web/admin/lib/lang/se_server_ip.lng
+++ b/interface/web/admin/lib/lang/se_server_ip.lng
@@ -9,4 +9,3 @@
$wb['virtualhost_port_txt'] = 'HTTP-portar';
$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
?>
-
diff --git a/interface/web/admin/lib/lang/se_server_ip_list.lng b/interface/web/admin/lib/lang/se_server_ip_list.lng
index 67884b3..8f20a3b 100644
--- a/interface/web/admin/lib/lang/se_server_ip_list.lng
+++ b/interface/web/admin/lib/lang/se_server_ip_list.lng
@@ -8,4 +8,3 @@
$wb['virtualhost_port_txt'] = 'HTTP-portar';
$wb['ip_type_txt'] = 'Typ';
?>
-
diff --git a/interface/web/admin/lib/lang/se_server_list.lng b/interface/web/admin/lib/lang/se_server_list.lng
index 23d6940..031ac76 100644
--- a/interface/web/admin/lib/lang/se_server_list.lng
+++ b/interface/web/admin/lib/lang/se_server_list.lng
@@ -11,4 +11,3 @@
$wb['proxy_server_txt'] = 'Proxy';
$wb['firewall_server_txt'] = 'Brandvägg';
?>
-
diff --git a/interface/web/admin/lib/lang/se_server_php.lng b/interface/web/admin/lib/lang/se_server_php.lng
index 3b6096e..addbfa4 100644
--- a/interface/web/admin/lib/lang/se_server_php.lng
+++ b/interface/web/admin/lib/lang/se_server_php.lng
@@ -14,4 +14,3 @@
$wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory';
$wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory';
?>
-
diff --git a/interface/web/admin/lib/lang/se_server_php_list.lng b/interface/web/admin/lib/lang/se_server_php_list.lng
index 353e156..f5762ad 100644
--- a/interface/web/admin/lib/lang/se_server_php_list.lng
+++ b/interface/web/admin/lib/lang/se_server_php_list.lng
@@ -5,4 +5,3 @@
$wb['client_id_txt'] = 'Kund';
$wb['name_txt'] = 'PHP-namn';
?>
-
diff --git a/interface/web/admin/lib/lang/se_software_package.lng b/interface/web/admin/lib/lang/se_software_package.lng
index f06ca05..086902d 100644
--- a/interface/web/admin/lib/lang/se_software_package.lng
+++ b/interface/web/admin/lib/lang/se_software_package.lng
@@ -4,4 +4,3 @@
$wb['Software Package'] = 'Mjukvarupaket';
$wb['Modify software package details'] = 'Redigera mjukvarupaketets uppgifter';
?>
-
diff --git a/interface/web/admin/lib/lang/se_software_package_install.lng b/interface/web/admin/lib/lang/se_software_package_install.lng
index 7b0b28b..434fc4b 100644
--- a/interface/web/admin/lib/lang/se_software_package_install.lng
+++ b/interface/web/admin/lib/lang/se_software_package_install.lng
@@ -4,4 +4,3 @@
$wb['btn_save_txt'] = 'Påbörja installation';
$wb['btn_cancel_txt'] = 'Avbryt';
?>
-
diff --git a/interface/web/admin/lib/lang/se_software_package_list.lng b/interface/web/admin/lib/lang/se_software_package_list.lng
index 7762e62..c0222e1 100644
--- a/interface/web/admin/lib/lang/se_software_package_list.lng
+++ b/interface/web/admin/lib/lang/se_software_package_list.lng
@@ -11,4 +11,3 @@
$wb['edit_txt'] = 'Redigera';
$wb['delete_txt'] = 'Radera';
?>
-
diff --git a/interface/web/admin/lib/lang/se_software_repo.lng b/interface/web/admin/lib/lang/se_software_repo.lng
index db59a1b..a0e0de6 100644
--- a/interface/web/admin/lib/lang/se_software_repo.lng
+++ b/interface/web/admin/lib/lang/se_software_repo.lng
@@ -6,4 +6,3 @@
$wb['active_txt'] = 'Aktiv';
$wb['Software Repository which may contain addons or updates'] = 'Pragarmvarubibliotek som kan innehålla uppdateringar eller tillägg';
?>
-
diff --git a/interface/web/admin/lib/lang/se_software_repo_list.lng b/interface/web/admin/lib/lang/se_software_repo_list.lng
index d997091..b7a219f 100644
--- a/interface/web/admin/lib/lang/se_software_repo_list.lng
+++ b/interface/web/admin/lib/lang/se_software_repo_list.lng
@@ -4,4 +4,3 @@
$wb['repo_name_txt'] = 'Repository';
$wb['repo_url_txt'] = 'URL';
?>
-
diff --git a/interface/web/admin/lib/lang/se_software_update_list.lng b/interface/web/admin/lib/lang/se_software_update_list.lng
index 41728b2..0cf7c0e 100644
--- a/interface/web/admin/lib/lang/se_software_update_list.lng
+++ b/interface/web/admin/lib/lang/se_software_update_list.lng
@@ -7,4 +7,3 @@
$wb['server_select_txt'] = 'Välj server';
$wb['no_updates_txt'] = 'Inga tillgängliga uppdateringar';
?>
-
diff --git a/interface/web/admin/lib/lang/se_system_config.lng b/interface/web/admin/lib/lang/se_system_config.lng
index 25b3593..7e96181 100644
--- a/interface/web/admin/lib/lang/se_system_config.lng
+++ b/interface/web/admin/lib/lang/se_system_config.lng
@@ -64,9 +64,8 @@
$wb['customer_no_start_txt'] = 'Kundnummer startvärde';
$wb['customer_no_counter_txt'] = 'Kundnummer räknare';
$wb['session_timeout_txt'] = 'Session timeout (minuter)';
-$wb['session_allow_endless_txt'] = 'Aktivera "håll mig inloggad"';
+$wb['session_allow_endless_txt'] = 'Aktivera \"håll mig inloggad\"';
$wb['No'] = 'Nej';
$wb['min_password_length_txt'] = 'Minsta lösenordslängd';
$wb['min_password_strength_txt'] = 'Minsta lösenordsstyrka';
?>
-
diff --git a/interface/web/admin/lib/lang/se_tpl_default_admin.lng b/interface/web/admin/lib/lang/se_tpl_default_admin.lng
index d8989ed..8894558 100644
--- a/interface/web/admin/lib/lang/se_tpl_default_admin.lng
+++ b/interface/web/admin/lib/lang/se_tpl_default_admin.lng
@@ -16,4 +16,3 @@
$wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory';
$wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory';
?>
-
diff --git a/interface/web/admin/lib/lang/se_users.lng b/interface/web/admin/lib/lang/se_users.lng
index 3acec53..9a819be 100644
--- a/interface/web/admin/lib/lang/se_users.lng
+++ b/interface/web/admin/lib/lang/se_users.lng
@@ -32,4 +32,3 @@
$wb['username_error_collision'] = 'Användarnamnet får inte vara web eller web och ett nummer';
$wb['client_not_admin_err'] = 'En användare som tillhör en kund kan inte sättas som admin';
?>
-
diff --git a/interface/web/admin/lib/lang/se_users_list.lng b/interface/web/admin/lib/lang/se_users_list.lng
index f9ea803..a6580d3 100644
--- a/interface/web/admin/lib/lang/se_users_list.lng
+++ b/interface/web/admin/lib/lang/se_users_list.lng
@@ -7,4 +7,3 @@
$wb['warning_txt'] = '<b>VARNING:</b> Ändra inte några användarinställningar här. Use the Client- and Reseller settings in the Client module instead. Modifying or changing Users or groups here may cause data loss!';
$wb['groups_txt'] = 'Grupper';
?>
-
diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng
index de4573d..776357d 100644
--- a/interface/web/admin/lib/lang/sk_server_config.lng
+++ b/interface/web/admin/lib/lang/sk_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index 5b2d389..6d6e05d 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -189,6 +189,56 @@
$wb['munin_url_error_regex'] = 'Invalid Munin URL';
$wb['munin_url_note_txt'] = 'Placeholder:';
$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
?>
diff --git a/interface/web/admin/templates/server_config_server_edit.htm b/interface/web/admin/templates/server_config_server_edit.htm
index d9b703a..e5034e6 100644
--- a/interface/web/admin/templates/server_config_server_edit.htm
+++ b/interface/web/admin/templates/server_config_server_edit.htm
@@ -65,10 +65,6 @@
{tmpl_var name='backup_dir_is_mount'}
</div>
</div>
- <div class="ctrlHolder">
- <label for="backup_dir_mount_cmd">{tmpl_var name='backup_dir_mount_cmd_txt'}</label>
- <input name="backup_dir_mount_cmd" id="backup_dir_mount_cmd" value="{tmpl_var name='backup_dir_mount_cmd'}" size="40" maxlength="255" type="text" class="textInput" />
- </div>
<div class="ctrlHolder">
<label for="backup_mode">{tmpl_var name='backup_mode_txt'}</label>
<select name="backup_mode" id="backup_mode" class="selectInput">
diff --git a/interface/web/admin/templates/users_list.htm b/interface/web/admin/templates/users_list.htm
index dece7f8..cac25f5 100644
--- a/interface/web/admin/templates/users_list.htm
+++ b/interface/web/admin/templates/users_list.htm
@@ -44,7 +44,7 @@
<td class="tbl_col_groups">{tmpl_var name="groups"}</td>
<td class="tbl_col_buttons">
<tmpl_if name="username" op="!=" value="admin">
- <a class="button icons16 icoLoginAs" href="javascript: loadContent('admin/login_as.php?id={tmpl_var name='id'}');"><span>{tmpl_var name='login_as_txt'}</span></a>
+ <a class="button icons16 icoLoginAs" href="javascript: loadContent('login/login_as.php?cid={tmpl_var name='client_id'}');"><span>{tmpl_var name='login_as_txt'}</span></a>
<a class="button icons16 icoDelete" href="javascript: del_record('admin/users_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
</tmpl_if>
</td>
diff --git a/interface/web/client/lib/lang/el_reseller.lng b/interface/web/client/lib/lang/el_reseller.lng
index d336b3b..0c1ca59 100644
--- a/interface/web/client/lib/lang/el_reseller.lng
+++ b/interface/web/client/lib/lang/el_reseller.lng
@@ -157,5 +157,5 @@
$wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
$wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
$wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
?>
diff --git a/interface/web/client/lib/lang/fr_client.lng b/interface/web/client/lib/lang/fr_client.lng
index f37d326..2de8e0a 100644
--- a/interface/web/client/lib/lang/fr_client.lng
+++ b/interface/web/client/lib/lang/fr_client.lng
@@ -139,7 +139,7 @@
$wb['customer_no_error_unique'] = 'Le numéro client doit être unique (ou vide).';
$wb['paypal_email_error_isemail'] = 'Saisissez un compte Paypal valide.';
$wb['paypal_email_txt'] = 'Compte Paypal';
-$wb['err_msg_master_tpl_set'] = 'Les paramètres de limites personnalisés seront ignorés si un modèle maître autre que \"custom\" est sélectionné.';
+$wb['err_msg_master_tpl_set'] = 'Les paramètres de limites personnalisés seront ignorés si un modèle maître autre que \\"custom\\" est sélectionné.';
$wb['aps_limits_txt'] = 'Nombre max d\'Installeur APS';
$wb['limit_aps_txt'] = 'Nombre max d\'instances APS';
$wb['limit_aps_error_notint'] = 'La limite d\'instances APS doit être un nombre';
diff --git a/interface/web/client/lib/lang/fr_reseller.lng b/interface/web/client/lib/lang/fr_reseller.lng
index c71020d..a4b0d62 100644
--- a/interface/web/client/lib/lang/fr_reseller.lng
+++ b/interface/web/client/lib/lang/fr_reseller.lng
@@ -157,5 +157,5 @@
$wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
$wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
$wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
?>
diff --git a/interface/web/client/lib/lang/se.lng b/interface/web/client/lib/lang/se.lng
index 271f69d..3f396d6 100644
--- a/interface/web/client/lib/lang/se.lng
+++ b/interface/web/client/lib/lang/se.lng
@@ -24,4 +24,3 @@
$wb['error_client_can_not_add_domain'] = 'Du kan inte lägga till en ny domän';
$wb['error_client_group_id_empty'] = 'Du måste välja en kund<br>';
?>
-
diff --git a/interface/web/client/lib/lang/se_client.lng b/interface/web/client/lib/lang/se_client.lng
index c8540a6..f633614 100644
--- a/interface/web/client/lib/lang/se_client.lng
+++ b/interface/web/client/lib/lang/se_client.lng
@@ -139,7 +139,7 @@
$wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
$wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
$wb['paypal_email_txt'] = 'PayPal epostadress';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than "custom" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
$wb['aps_limits_txt'] = 'APS Installer Limits';
$wb['limit_aps_txt'] = 'Max. number of APS instances';
$wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
@@ -154,4 +154,3 @@
$wb['parent_client_id_txt'] = 'Kund till återförsäljare';
$wb['none_txt'] = 'ingen';
?>
-
diff --git a/interface/web/client/lib/lang/se_client_circle.lng b/interface/web/client/lib/lang/se_client_circle.lng
index f30732e..df3c995 100644
--- a/interface/web/client/lib/lang/se_client_circle.lng
+++ b/interface/web/client/lib/lang/se_client_circle.lng
@@ -7,4 +7,3 @@
$wb['description_txt'] = 'BEskrivning';
$wb['active_txt'] = 'Aktiv';
?>
-
diff --git a/interface/web/client/lib/lang/se_client_circle_list.lng b/interface/web/client/lib/lang/se_client_circle_list.lng
index 21ae4d6..f98f551 100644
--- a/interface/web/client/lib/lang/se_client_circle_list.lng
+++ b/interface/web/client/lib/lang/se_client_circle_list.lng
@@ -8,4 +8,3 @@
$wb['delete_txt'] = 'Radera';
$wb['active_txt'] = 'Aktiv';
?>
-
diff --git a/interface/web/client/lib/lang/se_client_del.lng b/interface/web/client/lib/lang/se_client_del.lng
index 9cf44fc..99aa9d8 100644
--- a/interface/web/client/lib/lang/se_client_del.lng
+++ b/interface/web/client/lib/lang/se_client_del.lng
@@ -5,4 +5,3 @@
$wb['btn_cancel_txt'] = 'Avbryt utan att radera kunden';
$wb['confirm_client_delete_txt'] = 'Är du säker på att du vill radera den här kunden?';
?>
-
diff --git a/interface/web/client/lib/lang/se_client_message.lng b/interface/web/client/lib/lang/se_client_message.lng
index 625b0db..e6f9aba 100644
--- a/interface/web/client/lib/lang/se_client_message.lng
+++ b/interface/web/client/lib/lang/se_client_message.lng
@@ -18,4 +18,3 @@
$wb['gender_m_txt'] = 'Herr';
$wb['gender_f_txt'] = 'Fru';
?>
-
diff --git a/interface/web/client/lib/lang/se_client_message_template.lng b/interface/web/client/lib/lang/se_client_message_template.lng
index 3ff9480..e406d37 100644
--- a/interface/web/client/lib/lang/se_client_message_template.lng
+++ b/interface/web/client/lib/lang/se_client_message_template.lng
@@ -9,4 +9,3 @@
$wb['variables_description_txt'] = '(Användarnamn- och lösenordsvariablerna är endast tillgängliga i välkomstmail.)';
$wb['duplicate_welcome_error'] = 'Det kan bara finnas en standardmall för välkomstmail. Vänligen redigera den existerande mallen istället för att lägga till en ny.';
?>
-
diff --git a/interface/web/client/lib/lang/se_client_message_template_list.lng b/interface/web/client/lib/lang/se_client_message_template_list.lng
index f94a106..088d269 100644
--- a/interface/web/client/lib/lang/se_client_message_template_list.lng
+++ b/interface/web/client/lib/lang/se_client_message_template_list.lng
@@ -3,4 +3,3 @@
$wb['template_type_txt'] = 'Meddelande till';
$wb['template_name_txt'] = 'Mallnamn';
?>
-
diff --git a/interface/web/client/lib/lang/se_client_template.lng b/interface/web/client/lib/lang/se_client_template.lng
index 12e4355..353960c 100644
--- a/interface/web/client/lib/lang/se_client_template.lng
+++ b/interface/web/client/lib/lang/se_client_template.lng
@@ -90,4 +90,3 @@
$wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
$wb['client_limits_txt'] = 'Client Limits';
?>
-
diff --git a/interface/web/client/lib/lang/se_client_template_list.lng b/interface/web/client/lib/lang/se_client_template_list.lng
index cc9d5d5..b594337 100644
--- a/interface/web/client/lib/lang/se_client_template_list.lng
+++ b/interface/web/client/lib/lang/se_client_template_list.lng
@@ -4,4 +4,3 @@
$wb['template_name_txt'] = 'Mallnamn';
$wb['template_id_txt'] = 'Mall-ID';
?>
-
diff --git a/interface/web/client/lib/lang/se_clients_list.lng b/interface/web/client/lib/lang/se_clients_list.lng
index 89fe0ed..263912f 100644
--- a/interface/web/client/lib/lang/se_clients_list.lng
+++ b/interface/web/client/lib/lang/se_clients_list.lng
@@ -9,4 +9,3 @@
$wb['username_txt'] = 'Användarnamn';
$wb['customer_no_txt'] = 'Kundnummer';
?>
-
diff --git a/interface/web/client/lib/lang/se_domain.lng b/interface/web/client/lib/lang/se_domain.lng
index 7d648de..df60bbe 100644
--- a/interface/web/client/lib/lang/se_domain.lng
+++ b/interface/web/client/lib/lang/se_domain.lng
@@ -4,4 +4,3 @@
$wb['domain_error_regex'] = 'Denna domän är ogiltig';
$wb['Domain'] = 'Domän';
?>
-
diff --git a/interface/web/client/lib/lang/se_domain_list.lng b/interface/web/client/lib/lang/se_domain_list.lng
index da7504f..1262367 100644
--- a/interface/web/client/lib/lang/se_domain_list.lng
+++ b/interface/web/client/lib/lang/se_domain_list.lng
@@ -4,4 +4,3 @@
$wb['domain_txt'] = 'Domän';
$wb['user_txt'] = 'Kund';
?>
-
diff --git a/interface/web/client/lib/lang/se_reseller.lng b/interface/web/client/lib/lang/se_reseller.lng
index de8f504..7fab36d 100644
--- a/interface/web/client/lib/lang/se_reseller.lng
+++ b/interface/web/client/lib/lang/se_reseller.lng
@@ -159,4 +159,3 @@
$wb['client_limits_txt'] = 'Client Limits';
$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
?>
-
diff --git a/interface/web/client/lib/lang/se_resellers_list.lng b/interface/web/client/lib/lang/se_resellers_list.lng
index 3448e5c..5e03807 100644
--- a/interface/web/client/lib/lang/se_resellers_list.lng
+++ b/interface/web/client/lib/lang/se_resellers_list.lng
@@ -9,4 +9,3 @@
$wb['customer_no_txt'] = 'Kundnummer';
$wb['username_txt'] = 'Användarnamn';
?>
-
diff --git a/interface/web/dashboard/lib/lang/se.lng b/interface/web/dashboard/lib/lang/se.lng
index 11700f0..307e9e1 100644
--- a/interface/web/dashboard/lib/lang/se.lng
+++ b/interface/web/dashboard/lib/lang/se.lng
@@ -2,4 +2,3 @@
$wb['welcome_user_txt'] = 'Välkommen %s';
$wb['available_modules_txt'] = 'Tillgängliga moduler';
?>
-
diff --git a/interface/web/dashboard/lib/lang/se_dashlet_limits.lng b/interface/web/dashboard/lib/lang/se_dashlet_limits.lng
index 49473b7..9fbfe97 100644
--- a/interface/web/dashboard/lib/lang/se_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/se_dashlet_limits.lng
@@ -28,4 +28,3 @@
$wb['limit_database_txt'] = 'Antal databaser';
$wb['limit_mailmailinglist_txt'] = 'Antal mailinglistor';
?>
-
diff --git a/interface/web/dashboard/lib/lang/se_dashlet_mailquota.lng b/interface/web/dashboard/lib/lang/se_dashlet_mailquota.lng
index 883b2a5..1ed6f3f 100644
--- a/interface/web/dashboard/lib/lang/se_dashlet_mailquota.lng
+++ b/interface/web/dashboard/lib/lang/se_dashlet_mailquota.lng
@@ -6,4 +6,3 @@
$wb['quota_txt'] = 'Kvot';
$wb['no_email_accounts_txt'] = 'Inga epostkonton hittades';
?>
-
diff --git a/interface/web/dashboard/lib/lang/se_dashlet_modules.lng b/interface/web/dashboard/lib/lang/se_dashlet_modules.lng
index 4dff679..a6f9728 100644
--- a/interface/web/dashboard/lib/lang/se_dashlet_modules.lng
+++ b/interface/web/dashboard/lib/lang/se_dashlet_modules.lng
@@ -1,4 +1,3 @@
<?php
$wb['available_modules_txt'] = 'Tillgängliga moduler';
?>
-
diff --git a/interface/web/dashboard/lib/lang/se_dashlet_quota.lng b/interface/web/dashboard/lib/lang/se_dashlet_quota.lng
index 325b04d..7a9603b 100644
--- a/interface/web/dashboard/lib/lang/se_dashlet_quota.lng
+++ b/interface/web/dashboard/lib/lang/se_dashlet_quota.lng
@@ -6,4 +6,3 @@
$wb['soft_txt'] = 'Mjuk gräns';
$wb['no_sites_txt'] = 'Ingen webbsida hittades.';
?>
-
diff --git a/interface/web/designer/lib/lang/se.lng b/interface/web/designer/lib/lang/se.lng
index 29f4a51..acb6c35 100644
--- a/interface/web/designer/lib/lang/se.lng
+++ b/interface/web/designer/lib/lang/se.lng
@@ -1,3 +1,2 @@
<?php
?>
-
diff --git a/interface/web/designer/lib/lang/se_form_edit.lng b/interface/web/designer/lib/lang/se_form_edit.lng
index 72d80e5..1a3a831 100644
--- a/interface/web/designer/lib/lang/se_form_edit.lng
+++ b/interface/web/designer/lib/lang/se_form_edit.lng
@@ -22,4 +22,3 @@
$wb['auth_preset_perm_group_txt'] = 'Beh. Grupp';
$wb['auth_preset_perm_other_txt'] = 'Beh. Andra';
?>
-
diff --git a/interface/web/designer/lib/lang/se_form_list.lng b/interface/web/designer/lib/lang/se_form_list.lng
index 7951bb7..10f4187 100644
--- a/interface/web/designer/lib/lang/se_form_list.lng
+++ b/interface/web/designer/lib/lang/se_form_list.lng
@@ -5,4 +5,3 @@
$wb['title_txt'] = 'Titel';
$wb['description_txt'] = 'Beskrivning';
?>
-
diff --git a/interface/web/designer/lib/lang/se_form_show.lng b/interface/web/designer/lib/lang/se_form_show.lng
index 1d5de49..3e21d62 100644
--- a/interface/web/designer/lib/lang/se_form_show.lng
+++ b/interface/web/designer/lib/lang/se_form_show.lng
@@ -16,4 +16,3 @@
$wb['menu_del_txt'] = 'Ta bort meny och allt menyinnehåll?';
$wb['item_del_txt'] = 'Ta bort menyinnehåll?';
?>
-
diff --git a/interface/web/designer/lib/lang/se_module_edit.lng b/interface/web/designer/lib/lang/se_module_edit.lng
index 992a074..ba828eb 100644
--- a/interface/web/designer/lib/lang/se_module_edit.lng
+++ b/interface/web/designer/lib/lang/se_module_edit.lng
@@ -10,4 +10,3 @@
$wb['header_txt'] = 'Modulinställningar';
$wb['description_txt'] = '<b>Description</b><br><br><b>Modulename:</b> Namn på modul mappen. Endast siffror, bokstäver och understreck är tillåtna.<br><b>Moduletitle:</b> Kommer att visas i (övre) huvud navigerigsramen.<br><b>Template file:</b> Mall fil för modulen. Just nu finns: module.tpl.htm och module_tree.tpl.htm. Standard är module.tpl.htm.<br><b>NaviFrame:</b> Om module module_tree.tpl.htm väljs som mall file, skriv här sökvägen till skriptfilen för den vänstra ramen.<br><b>Default page:</b> Dessa sidor kommer att visas när modulen öppnas.<br><b>Tab width:</b> Bredd på Flikarna i huvud navigerings ramen. Detta fält är tomt som standard. Du kan skriva in ett absolutvärde i pixlar (ex. 20) eller relativt värde (ex. 20%).<br><b>Hint:</b> Alla sökvägar är relativa till mappen web.';
?>
-
diff --git a/interface/web/designer/lib/lang/se_module_list.lng b/interface/web/designer/lib/lang/se_module_list.lng
index d8408e2..47ff228 100644
--- a/interface/web/designer/lib/lang/se_module_list.lng
+++ b/interface/web/designer/lib/lang/se_module_list.lng
@@ -3,4 +3,3 @@
$wb['module_txt'] = 'Modul';
$wb['title_txt'] = 'Titel';
?>
-
diff --git a/interface/web/designer/lib/lang/se_module_nav_edit.lng b/interface/web/designer/lib/lang/se_module_nav_edit.lng
index 28bf0ac..468f8d8 100644
--- a/interface/web/designer/lib/lang/se_module_nav_edit.lng
+++ b/interface/web/designer/lib/lang/se_module_nav_edit.lng
@@ -4,4 +4,3 @@
$wb['save_txt'] = 'Spara';
$wb['cancel_txt'] = 'Avbryt';
?>
-
diff --git a/interface/web/designer/lib/lang/se_module_nav_item_edit.lng b/interface/web/designer/lib/lang/se_module_nav_item_edit.lng
index b9f8639..f5df090 100644
--- a/interface/web/designer/lib/lang/se_module_nav_item_edit.lng
+++ b/interface/web/designer/lib/lang/se_module_nav_item_edit.lng
@@ -6,4 +6,3 @@
$wb['save_txt'] = 'Spara';
$wb['cancel_txt'] = 'Avbryt';
?>
-
diff --git a/interface/web/designer/lib/lang/se_module_show.lng b/interface/web/designer/lib/lang/se_module_show.lng
index 497a62d..391947c 100644
--- a/interface/web/designer/lib/lang/se_module_show.lng
+++ b/interface/web/designer/lib/lang/se_module_show.lng
@@ -14,4 +14,3 @@
$wb['menu_del_txt'] = 'Ta bort meny och allt menyinnehåll?';
$wb['item_del_txt'] = 'Ta bort menyinnehåll?';
?>
-
diff --git a/interface/web/dns/lib/lang/ar_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/ar_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/ar_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/ar_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/ar_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/ar_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/bg_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/bg_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/bg_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/bg_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/bg_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/bg_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/br_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/br_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/br_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/br_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/br_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/br_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/cz_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/cz_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/cz_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/cz_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/cz_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/cz_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/de_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/de_dns_slave_admin_list.lng
new file mode 100644
index 0000000..974e214
--- /dev/null
+++ b/interface/web/dns/lib/lang/de_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb['list_head_txt'] = 'Slave DNS-Zonen';
+$wb['active_txt'] = 'Aktiv';
+$wb['server_id_txt'] = 'Server';
+$wb['origin_txt'] = 'Zone';
+$wb['ns_txt'] = 'NS';
+$wb['add_new_record_txt'] = 'Neue Slave DNS-Zone hinzufügen';
+$wb['eg_domain_tld'] = 'Format: domain.tld.';
+$wb['sys_groupid_txt'] = 'Kunde';
+?>
diff --git a/interface/web/dns/lib/lang/de_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/de_dns_soa_admin_list.lng
new file mode 100644
index 0000000..363369c
--- /dev/null
+++ b/interface/web/dns/lib/lang/de_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb['list_head_txt'] = 'DNS Zonen';
+$wb['active_txt'] = 'Aktiv';
+$wb['server_id_txt'] = 'Server';
+$wb['origin_txt'] = 'Zone';
+$wb['ns_txt'] = 'NS';
+$wb['mbox_txt'] = 'E-Mail';
+$wb['add_new_record_txt'] = 'Neue DNS Zone (SOA) hinzufügen';
+$wb['add_new_record_wizard_txt'] = 'Neue DNS Zone per Assistent hinzufügen';
+$wb['sys_groupid_txt'] = 'Kunde';
+?>
diff --git a/interface/web/dns/lib/lang/el_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/el_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/el_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/el_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/el_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/el_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/en_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/en_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/en_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/en_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/en_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/en_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/es_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/es_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/es_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/es_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/es_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/es_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/fi_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/fi_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/fi_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/fi_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/fi_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/fi_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/fr_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/fr_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/fr_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/fr_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/fr_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/fr_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/hr_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/hr_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/hr_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/hr_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/hr_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/hr_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/hu_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/hu_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/hu_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/hu_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/hu_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/hu_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/id_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/id_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/id_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/id_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/id_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/id_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/it_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/it_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/it_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/it_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/it_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/it_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/ja_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/ja_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/ja_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/ja_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/ja_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/ja_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/nl_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/nl_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/nl_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/nl_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/nl_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/nl_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/pl_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/pl_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/pl_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/pl_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/pl_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/pl_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/pt_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/pt_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/pt_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/pt_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/pt_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/pt_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/ro_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/ro_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/ro_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/ro_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/ro_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/ro_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/ru_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/ru_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/ru_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/ru_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/ru_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/ru_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/se.lng b/interface/web/dns/lib/lang/se.lng
index 80c3918..4f443f0 100644
--- a/interface/web/dns/lib/lang/se.lng
+++ b/interface/web/dns/lib/lang/se.lng
@@ -20,4 +20,3 @@
$wb['Secondary Zones'] = 'Sekundära zoner';
$wb['Import Zone File'] = 'Importera zonfiler';
?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_a.lng b/interface/web/dns/lib/lang/se_dns_a.lng
index a69314d..7dcfc37 100644
--- a/interface/web/dns/lib/lang/se_dns_a.lng
+++ b/interface/web/dns/lib/lang/se_dns_a.lng
@@ -15,4 +15,3 @@
$wb['data_error_duplicate'] = 'Duplicate A-Record';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_a_list.lng b/interface/web/dns/lib/lang/se_dns_a_list.lng
index b92f4c0..3fa1e7f 100644
--- a/interface/web/dns/lib/lang/se_dns_a_list.lng
+++ b/interface/web/dns/lib/lang/se_dns_a_list.lng
@@ -13,4 +13,3 @@
$wb['page_of_txt'] = 'of';
$wb['delete_confirmation'] = 'Do you really want to delete this record?';
?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_aaaa.lng b/interface/web/dns/lib/lang/se_dns_aaaa.lng
index a8cfbf1..b4c5b27 100644
--- a/interface/web/dns/lib/lang/se_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/se_dns_aaaa.lng
@@ -14,4 +14,3 @@
$wb['data_error_regex'] = 'IP-Address format invalid';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_alias.lng b/interface/web/dns/lib/lang/se_dns_alias.lng
index 05c3f62..bd4be9f 100644
--- a/interface/web/dns/lib/lang/se_dns_alias.lng
+++ b/interface/web/dns/lib/lang/se_dns_alias.lng
@@ -14,4 +14,3 @@
$wb['data_error_regex'] = 'Target hostname format invalid';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_cname.lng b/interface/web/dns/lib/lang/se_dns_cname.lng
index b4e8ae1..b7ceb5d 100644
--- a/interface/web/dns/lib/lang/se_dns_cname.lng
+++ b/interface/web/dns/lib/lang/se_dns_cname.lng
@@ -15,4 +15,3 @@
$wb['data_error_duplicate'] = 'Duplicate A-Record or CNAME-Record';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_hinfo.lng b/interface/web/dns/lib/lang/se_dns_hinfo.lng
index df19a84..937bd9b 100644
--- a/interface/web/dns/lib/lang/se_dns_hinfo.lng
+++ b/interface/web/dns/lib/lang/se_dns_hinfo.lng
@@ -14,4 +14,3 @@
$wb['data_error_regex'] = 'Host Information format invalid';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_import.lng b/interface/web/dns/lib/lang/se_dns_import.lng
index aea47ba..4d703fa 100644
--- a/interface/web/dns/lib/lang/se_dns_import.lng
+++ b/interface/web/dns/lib/lang/se_dns_import.lng
@@ -12,4 +12,3 @@
$wb['no_file_uploaded_error'] = 'Ingen zonfil uppladdad';
$wb['zone_file_import_txt'] = 'Zonfilsimport';
?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_mx.lng b/interface/web/dns/lib/lang/se_dns_mx.lng
index 0bfc234..58921d3 100644
--- a/interface/web/dns/lib/lang/se_dns_mx.lng
+++ b/interface/web/dns/lib/lang/se_dns_mx.lng
@@ -16,4 +16,3 @@
$wb['duplicate_mx_record_txt'] = 'Duplicate MX record.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_ns.lng b/interface/web/dns/lib/lang/se_dns_ns.lng
index 2ce51da..d8d652c 100644
--- a/interface/web/dns/lib/lang/se_dns_ns.lng
+++ b/interface/web/dns/lib/lang/se_dns_ns.lng
@@ -14,4 +14,3 @@
$wb['data_error_regex'] = 'Namnserverformatet är ogiltigt';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_ptr.lng b/interface/web/dns/lib/lang/se_dns_ptr.lng
index 6c42a8f..254b45c 100644
--- a/interface/web/dns/lib/lang/se_dns_ptr.lng
+++ b/interface/web/dns/lib/lang/se_dns_ptr.lng
@@ -14,4 +14,3 @@
$wb['data_error_regex'] = 'Canonical hostname format invalid';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_rp.lng b/interface/web/dns/lib/lang/se_dns_rp.lng
index e37bc8f..91c4f07 100644
--- a/interface/web/dns/lib/lang/se_dns_rp.lng
+++ b/interface/web/dns/lib/lang/se_dns_rp.lng
@@ -14,4 +14,3 @@
$wb['data_error_regex'] = 'Responsible person field format invalid';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_slave.lng b/interface/web/dns/lib/lang/se_dns_slave.lng
index 254f360..c426df7 100644
--- a/interface/web/dns/lib/lang/se_dns_slave.lng
+++ b/interface/web/dns/lib/lang/se_dns_slave.lng
@@ -15,4 +15,3 @@
$wb['ipv4_form_txt'] = 'IPv4 form - e.g. 1.2.3.4';
$wb['secondary_zone_txt'] = 'Secondary DNS Zone';
?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/se_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/se_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/se_dns_slave_list.lng b/interface/web/dns/lib/lang/se_dns_slave_list.lng
index 6e7951d..4ced2dd 100644
--- a/interface/web/dns/lib/lang/se_dns_slave_list.lng
+++ b/interface/web/dns/lib/lang/se_dns_slave_list.lng
@@ -7,4 +7,3 @@
$wb['add_new_record_txt'] = 'Add new secondary DNS Zone';
$wb['eg_domain_tld'] = 'e.g. domain.tld.';
?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_soa.lng b/interface/web/dns/lib/lang/se_dns_soa.lng
index 4f2eefa..935211a 100644
--- a/interface/web/dns/lib/lang/se_dns_soa.lng
+++ b/interface/web/dns/lib/lang/se_dns_soa.lng
@@ -36,4 +36,3 @@
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['xfer_error_regex'] = 'Also notify: Please use an IP address.';
?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/se_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/se_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/se_dns_soa_list.lng b/interface/web/dns/lib/lang/se_dns_soa_list.lng
index b534641..da7b8e2 100644
--- a/interface/web/dns/lib/lang/se_dns_soa_list.lng
+++ b/interface/web/dns/lib/lang/se_dns_soa_list.lng
@@ -8,4 +8,3 @@
$wb['add_new_record_txt'] = 'Add new DNS Zone (SOA)';
$wb['add_new_record_wizard_txt'] = 'Add new DNS Zone with Wizard';
?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_srv.lng b/interface/web/dns/lib/lang/se_dns_srv.lng
index fae1b70..866f44d 100644
--- a/interface/web/dns/lib/lang/se_dns_srv.lng
+++ b/interface/web/dns/lib/lang/se_dns_srv.lng
@@ -18,4 +18,3 @@
$wb['aux_txt'] = 'Priority';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_template.lng b/interface/web/dns/lib/lang/se_dns_template.lng
index 6fd5b5c..516d5c2 100644
--- a/interface/web/dns/lib/lang/se_dns_template.lng
+++ b/interface/web/dns/lib/lang/se_dns_template.lng
@@ -4,4 +4,3 @@
$wb['template_txt'] = 'Mall';
$wb['visible_txt'] = 'Synlig';
?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_template_list.lng b/interface/web/dns/lib/lang/se_dns_template_list.lng
index 120335f..8d9d730 100644
--- a/interface/web/dns/lib/lang/se_dns_template_list.lng
+++ b/interface/web/dns/lib/lang/se_dns_template_list.lng
@@ -4,4 +4,3 @@
$wb['name_txt'] = 'Name';
$wb['add_new_record_txt'] = 'Add new record';
?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_txt.lng b/interface/web/dns/lib/lang/se_dns_txt.lng
index 0fc9b25..31da6eb 100644
--- a/interface/web/dns/lib/lang/se_dns_txt.lng
+++ b/interface/web/dns/lib/lang/se_dns_txt.lng
@@ -14,4 +14,3 @@
$wb['data_error_regex'] = 'Text format invalid';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_wizard.lng b/interface/web/dns/lib/lang/se_dns_wizard.lng
index 3bb0a63..52955fd 100644
--- a/interface/web/dns/lib/lang/se_dns_wizard.lng
+++ b/interface/web/dns/lib/lang/se_dns_wizard.lng
@@ -36,4 +36,3 @@
$wb['list_head_txt'] = 'DNS Zone Wizard';
$wb['list_desc_txt'] = 'Create a DNS Zone via a wizard';
?>
-
diff --git a/interface/web/dns/lib/lang/sk_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/sk_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/sk_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/sk_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/sk_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/sk_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/tr_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/tr_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/tr_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/list/dns_slave.list.php b/interface/web/dns/list/dns_slave.list.php
index 5a242de..5c0be05 100644
--- a/interface/web/dns/list/dns_slave.list.php
+++ b/interface/web/dns/list/dns_slave.list.php
@@ -13,7 +13,11 @@
// Name of the list
-$liste["name"] = "dns_slave";
+if($_SESSION['s']['user']['typ'] == 'admin') {
+ $liste["name"] = "dns_slave_admin";
+} else {
+ $liste["name"] = "dns_slave";
+}
// Database table
$liste["table"] = "dns_slave";
@@ -70,6 +74,22 @@
),
'width' => "",
'value' => "");
+
+if($_SESSION['s']['user']['typ'] == 'admin') {
+ $liste["item"][] = array( 'field' => "sys_groupid",
+ 'datatype' => "INTEGER",
+ 'formtype' => "SELECT",
+ 'op' => "=",
+ 'prefix' => "",
+ 'suffix' => "",
+ 'datasource' => array ( 'type' => 'SQL',
+ 'querystring' => 'SELECT groupid, name FROM sys_group WHERE groupid != 1 ORDER BY name',
+ 'keyfield'=> 'groupid',
+ 'valuefield'=> 'name'
+ ),
+ 'width' => "",
+ 'value' => "");
+}
$liste["item"][] = array( 'field' => "origin",
'datatype' => "VARCHAR",
diff --git a/interface/web/dns/list/dns_soa.list.php b/interface/web/dns/list/dns_soa.list.php
index e3b240a..d6f5641 100644
--- a/interface/web/dns/list/dns_soa.list.php
+++ b/interface/web/dns/list/dns_soa.list.php
@@ -13,7 +13,11 @@
// Name of the list
-$liste["name"] = "dns_soa";
+if($_SESSION['s']['user']['typ'] == 'admin') {
+ $liste["name"] = "dns_soa_admin";
+} else {
+ $liste["name"] = "dns_soa";
+}
// Database table
$liste["table"] = "dns_soa";
@@ -70,6 +74,22 @@
),
'width' => "",
'value' => "");
+
+if($_SESSION['s']['user']['typ'] == 'admin') {
+ $liste["item"][] = array( 'field' => "sys_groupid",
+ 'datatype' => "INTEGER",
+ 'formtype' => "SELECT",
+ 'op' => "=",
+ 'prefix' => "",
+ 'suffix' => "",
+ 'datasource' => array ( 'type' => 'SQL',
+ 'querystring' => 'SELECT groupid, name FROM sys_group WHERE groupid != 1 ORDER BY name',
+ 'keyfield'=> 'groupid',
+ 'valuefield'=> 'name'
+ ),
+ 'width' => "",
+ 'value' => "");
+}
$liste["item"][] = array( 'field' => "origin",
'datatype' => "VARCHAR",
diff --git a/interface/web/dns/templates/dns_slave_admin_list.htm b/interface/web/dns/templates/dns_slave_admin_list.htm
new file mode 100644
index 0000000..d4f13ce
--- /dev/null
+++ b/interface/web/dns/templates/dns_slave_admin_list.htm
@@ -0,0 +1,83 @@
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_list_dns_slave">
+
+ <div class="pnl_toolsarea">
+ <tmpl_if name='datalog_changes_count' op='>' value='0'>
+ <div>
+ <div class="systemmonitor-state state-info">
+ <div class="status"></div>
+ <div class="statusMsg">
+ {tmpl_var name="datalog_changes_txt"}
+ <ul>
+ <tmpl_loop name="datalog_changes">
+ <li><strong>{tmpl_var name="text"}:</strong> {tmpl_var name="count"}</li>
+ </tmpl_loop>
+ </ul>
+ {tmpl_var name="datalog_changes_end_txt"}
+ </div>
+ </div><br />
+ </div>
+ </tmpl_if>
+ <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
+ <div class="buttons">
+ <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_slave_edit.php');">
+ <span>{tmpl_var name="add_new_record_txt"}</span>
+ </button>
+ </div>
+ </fieldset>
+ </div>
+
+ <div class="pnl_listarea">
+ <fieldset><legend><tmpl_var name="list_head_txt"></legend>
+ <table class="list">
+ <thead>
+ <tr class="caption">
+ <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
+ <th class="tbl_col_sys_groupid" scope="col"><tmpl_var name="sys_groupid_txt"></th>
+ <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
+ <th class="tbl_col_origin" scope="col"><tmpl_var name="origin_txt"></th>
+ <th class="tbl_col_ns" scope="col"><tmpl_var name="ns_txt"></th>
+ <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+ </tr>
+ <tr class="filter">
+ <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
+ <td class="tbl_col_sys_groupid"><select name="search_sys_groupid">{tmpl_var name='search_sys_groupid'}</select></td>
+ <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+ <td class="tbl_col_origin"><input type="text" name="search_origin" value="{tmpl_var name='search_origin'}" /></td>
+ <td class="tbl_col_ns"><input type="text" name="search_ns" value="{tmpl_var name='search_ns'}" /></td>
+ <td class="tbl_col_buttons">
+ <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','dns/dns_slave_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+ </td>
+ </tr>
+ </thead>
+ <tbody>
+ <tmpl_loop name="records">
+ <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
+ <td class="tbl_col_active"><a href="#" onclick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
+ <td class="tbl_col_sys_groupid"><a href="#" onclick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="sys_groupid"}</a></td>
+ <td class="tbl_col_server_id"><a href="#" onclick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
+ <td class="tbl_col_origin"><a href="#" onclick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="origin"}</a></td>
+ <td class="tbl_col_ns"><a href="#" onclick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="ns"}</a></td>
+ <td class="tbl_col_buttons">
+ <a class="button icons16 icoDelete" href="javascript: del_record('dns/dns_slave_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
+ </td>
+ </tr>
+ </tmpl_loop>
+ <tmpl_unless name="records">
+ <tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
+ <td colspan="6">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
+ </tr>
+ </tmpl_unless>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
+ </tr>
+ </tfoot>
+ </table>
+ </fieldset>
+ </div>
+
+</div>
diff --git a/interface/web/dns/templates/dns_soa_admin_list.htm b/interface/web/dns/templates/dns_soa_admin_list.htm
new file mode 100644
index 0000000..b77f884
--- /dev/null
+++ b/interface/web/dns/templates/dns_soa_admin_list.htm
@@ -0,0 +1,86 @@
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_list_dns_soa">
+
+ <div class="pnl_toolsarea">
+ <tmpl_if name='datalog_changes_count' op='>' value='0'>
+ <div>
+ <div class="systemmonitor-state state-info">
+ <div class="status"></div>
+ <div class="statusMsg">
+ {tmpl_var name="datalog_changes_txt"}
+ <ul>
+ <tmpl_loop name="datalog_changes">
+ <li><strong>{tmpl_var name="text"}:</strong> {tmpl_var name="count"}</li>
+ </tmpl_loop>
+ </ul>
+ {tmpl_var name="datalog_changes_end_txt"}
+ </div>
+ </div><br />
+ </div>
+ </tmpl_if>
+ <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
+ <div class="buttons">
+ <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_wizard.php');"><span>{tmpl_var name="add_new_record_wizard_txt"}</span></button>
+ <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_soa_edit.php');"><span>{tmpl_var name="add_new_record_txt"}</span></button>
+ <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_import.php');"><span>Import Zone File</span></button>
+ </div>
+ </fieldset>
+ </div>
+
+ <div class="pnl_listarea">
+ <fieldset><legend><tmpl_var name="list_head_txt"></legend>
+ <table class="list">
+ <thead>
+ <tr class="caption">
+ <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
+ <th class="tbl_col_sys_groupid" scope="col"><tmpl_var name="sys_groupid_txt"></th>
+ <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
+ <th class="tbl_col_origin" scope="col"><tmpl_var name="origin_txt"></th>
+ <th class="tbl_col_ns" scope="col"><tmpl_var name="ns_txt"></th>
+ <th class="tbl_col_mbox" scope="col"><tmpl_var name="mbox_txt"></th>
+ <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+ </tr>
+ <tr class="filter">
+ <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
+ <td class="tbl_col_sys_groupid"><select name="search_sys_groupid">{tmpl_var name='search_sys_groupid'}</select></td>
+ <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+ <td class="tbl_col_origin"><input type="text" name="search_origin" value="{tmpl_var name='search_origin'}" /></td>
+ <td class="tbl_col_ns"><input type="text" name="search_ns" value="{tmpl_var name='search_ns'}" /></td>
+ <td class="tbl_col_mbox"><input type="text" name="search_mbox" value="{tmpl_var name='search_mbox'}" /></td>
+ <td class="tbl_col_buttons">
+ <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','dns/dns_soa_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+ </td>
+ </tr>
+ </thead>
+ <tbody>
+ <tmpl_loop name="records">
+ <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
+ <td class="tbl_col_active"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</td>
+ <td class="tbl_col_sys_groupid"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="sys_groupid"}</a></td>
+ <td class="tbl_col_server_id"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
+ <td class="tbl_col_origin"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="origin"}</a></td>
+ <td class="tbl_col_ns"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="ns"}</a></td>
+ <td class="tbl_col_mbox"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="mbox"}</a></td>
+ <td class="tbl_col_buttons">
+ <a class="button icons16 icoDelete" href="javascript: del_record('dns/dns_soa_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
+ </td>
+ </tr>
+ </tmpl_loop>
+ <tmpl_unless name="records">
+ <tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
+ <td colspan="7">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
+ </tr>
+ </tmpl_unless>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td class="tbl_footer tbl_paging" colspan="7"><tmpl_var name="paging"></td>
+ </tr>
+ </tfoot>
+ </table>
+ </fieldset>
+ </div>
+
+</div>
\ No newline at end of file
diff --git a/interface/web/help/lib/lang/se.lng b/interface/web/help/lib/lang/se.lng
index e096257..58fe6a0 100644
--- a/interface/web/help/lib/lang/se.lng
+++ b/interface/web/help/lib/lang/se.lng
@@ -12,4 +12,3 @@
$wb['Add a Question & Answer Pair'] = 'Lägg till fråga och svar';
$wb['Manage Questions'] = 'Hantera frågor';
?>
-
diff --git a/interface/web/help/lib/lang/se_faq_form.lng b/interface/web/help/lib/lang/se_faq_form.lng
index 743e02d..5a7f384 100644
--- a/interface/web/help/lib/lang/se_faq_form.lng
+++ b/interface/web/help/lib/lang/se_faq_form.lng
@@ -4,4 +4,3 @@
$wb['faq_answer_txt'] = 'Svar';
$wb['faq_section_txt'] = 'Kategori';
?>
-
diff --git a/interface/web/help/lib/lang/se_faq_manage_questions_list.lng b/interface/web/help/lib/lang/se_faq_manage_questions_list.lng
index c802176..d615cda 100644
--- a/interface/web/help/lib/lang/se_faq_manage_questions_list.lng
+++ b/interface/web/help/lib/lang/se_faq_manage_questions_list.lng
@@ -7,4 +7,3 @@
$wb['faq_faq_questions_txt'] = 'Vanliga frågor';
$wb['faq_new_question_txt'] = 'Lägg till ny fråga och svar';
?>
-
diff --git a/interface/web/help/lib/lang/se_faq_sections_form.lng b/interface/web/help/lib/lang/se_faq_sections_form.lng
index 9367eeb..5cc812f 100644
--- a/interface/web/help/lib/lang/se_faq_sections_form.lng
+++ b/interface/web/help/lib/lang/se_faq_sections_form.lng
@@ -1,4 +1,3 @@
<?php
$wb['faq_section_name_txt'] = 'Kategorinamn';
?>
-
diff --git a/interface/web/help/lib/lang/se_help_faq_list.lng b/interface/web/help/lib/lang/se_help_faq_list.lng
index c8aebaf..bc1d421 100644
--- a/interface/web/help/lib/lang/se_help_faq_list.lng
+++ b/interface/web/help/lib/lang/se_help_faq_list.lng
@@ -1,4 +1,3 @@
<?php
$wb['edit_txt'] = 'Redigera';
?>
-
diff --git a/interface/web/help/lib/lang/se_help_faq_sections_list.lng b/interface/web/help/lib/lang/se_help_faq_sections_list.lng
index 021feb3..5ea1a71 100644
--- a/interface/web/help/lib/lang/se_help_faq_sections_list.lng
+++ b/interface/web/help/lib/lang/se_help_faq_sections_list.lng
@@ -6,4 +6,3 @@
$wb['faq_faq_sections_txt'] = 'FAQ-kategorier';
$wb['faq_new_section_txt'] = 'Lägg till ny kategori';
?>
-
diff --git a/interface/web/help/lib/lang/se_support_message.lng b/interface/web/help/lib/lang/se_support_message.lng
index 0de8420..b3cefaa 100644
--- a/interface/web/help/lib/lang/se_support_message.lng
+++ b/interface/web/help/lib/lang/se_support_message.lng
@@ -13,4 +13,3 @@
$wb['support_request_sent_txt'] = 'Your support request has been sent. Please don\'t reply to this email.';
$wb['recipient_or_sender_email_address_not_valid_txt'] = 'The message could not be sent because the recipient and/or the sender email address is not valid.';
?>
-
diff --git a/interface/web/help/lib/lang/se_support_message_list.lng b/interface/web/help/lib/lang/se_support_message_list.lng
index f68bb58..af9663f 100644
--- a/interface/web/help/lib/lang/se_support_message_list.lng
+++ b/interface/web/help/lib/lang/se_support_message_list.lng
@@ -5,4 +5,3 @@
$wb['add_new_record_txt'] = 'Skapa nyttt supportmeddelande';
$wb['date_txt'] = 'Datum';
?>
-
diff --git a/interface/web/js/scrigo.js.php b/interface/web/js/scrigo.js.php
index 4e51cd5..85a321c 100644
--- a/interface/web/js/scrigo.js.php
+++ b/interface/web/js/scrigo.js.php
@@ -809,7 +809,7 @@
oldPWField.remove();
var pword = password(<?php echo $min_password_length; ?>, false, 1);
jQuery('#'+repeatPasswordFieldID).val(pword);
- newPWField.attr('id', passwordFieldID).val(pword).trigger('keyup');
+ newPWField.attr('id', passwordFieldID).val(pword).trigger('keyup').select();
}
var funcDisableClick = function(e) { e.preventDefault(); return false; };
diff --git a/interface/web/login/lib/lang/se.lng b/interface/web/login/lib/lang/se.lng
index e3301e0..aeb58b1 100644
--- a/interface/web/login/lib/lang/se.lng
+++ b/interface/web/login/lib/lang/se.lng
@@ -25,4 +25,3 @@
$wb['email_error'] = 'Epostadressen innehåller otillåtna tecken eller är felformatterad.';
$wb['stay_logged_in_txt'] = 'Håll mig inloggad';
?>
-
diff --git a/interface/web/login/lib/lang/se_login_as.lng b/interface/web/login/lib/lang/se_login_as.lng
index e831784..fea3abc 100644
--- a/interface/web/login/lib/lang/se_login_as.lng
+++ b/interface/web/login/lib/lang/se_login_as.lng
@@ -1,12 +1,11 @@
<?php
$wb['login_1_txt'] = 'Vill du loggga in som användare';
-$wb['login_2_txt'] = 'If you do so, you can "go back" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
$wb['btn_yes_txt'] = 'Ja, logga in som kund';
$wb['btn_back_txt'] = 'Nej, tillbaka till listan';
$wb['udp_port_help_txt'] = 'Avdelade med kommatecken';
$wb['active_txt'] = 'Aktiv';
$wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$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['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 \",\".';
?>
-
diff --git a/interface/web/mail/form/mail_user_filter.tform.php b/interface/web/mail/form/mail_user_filter.tform.php
index e001f68..d5f6a0a 100644
--- a/interface/web/mail/form/mail_user_filter.tform.php
+++ b/interface/web/mail/form/mail_user_filter.tform.php
@@ -112,7 +112,7 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'validators' => array ( 0 => array ( 'type' => 'REGEX',
- 'regex' => '/^[\p{Latin}0-9\.\-\_\ ]{0,100}$/u',
+ 'regex' => '/^[\p{Latin}0-9\.\-\_\ \&]{0,100}$/u',
'errmsg'=> 'target_error_regex'),
),
'default' => '',
diff --git a/interface/web/mail/form/mail_whitelist.tform.php b/interface/web/mail/form/mail_whitelist.tform.php
index 3edb132..aebcfe6 100644
--- a/interface/web/mail/form/mail_whitelist.tform.php
+++ b/interface/web/mail/form/mail_whitelist.tform.php
@@ -51,7 +51,7 @@
$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
$form["tabs"]['whitelist'] = array (
- 'title' => "Witelist",
+ 'title' => "Whitelist",
'width' => 100,
'template' => "templates/mail_whitelist_edit.htm",
'fields' => array (
diff --git a/interface/web/mail/lib/lang/fr_mail_get.lng b/interface/web/mail/lib/lang/fr_mail_get.lng
index 6779ce3..934af5e 100644
--- a/interface/web/mail/lib/lang/fr_mail_get.lng
+++ b/interface/web/mail/lib/lang/fr_mail_get.lng
@@ -14,6 +14,6 @@
$wb['destination_error_isemail'] = 'Pas de destination sélectionnée.';
$wb['source_server_error_regex'] = 'Le serveur POP3 / IMAP n\'est pas un nom de domaine valide.';
$wb['source_read_all_txt'] = 'Récupérer tous les emails (incl. les emails lus)';
-$wb['error_delete_read_all_combination'] = 'Combinaison d\'options non autorisée. Vous ne pouvez pas utiliser \"Supprimer les emails après récupération\" = non avec \"Récupérer tous les emails\" = oui';
+$wb['error_delete_read_all_combination'] = 'Combinaison d\'options non autorisée. Vous ne pouvez pas utiliser \\"Supprimer les emails après récupération\\" = non avec \\"Récupérer tous les emails\\" = oui';
$wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
?>
diff --git a/interface/web/mail/lib/lang/se.lng b/interface/web/mail/lib/lang/se.lng
index 6542378..3edc203 100644
--- a/interface/web/mail/lib/lang/se.lng
+++ b/interface/web/mail/lib/lang/se.lng
@@ -46,4 +46,3 @@
$wb['Relay Recipients'] = 'Relay Recipients';
$wb['Mailbox quota'] = 'Mailbox quota';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_alias.lng b/interface/web/mail/lib/lang/se_mail_alias.lng
index 4dc4e25..e0f6135 100644
--- a/interface/web/mail/lib/lang/se_mail_alias.lng
+++ b/interface/web/mail/lib/lang/se_mail_alias.lng
@@ -12,4 +12,3 @@
$wb['duplicate_email_alias_txt'] = 'Detta epostalias finns redan';
$wb['source_txt'] = 'Alias';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_alias_list.lng b/interface/web/mail/lib/lang/se_mail_alias_list.lng
index e72d91b..3b63170 100644
--- a/interface/web/mail/lib/lang/se_mail_alias_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_alias_list.lng
@@ -6,4 +6,3 @@
$wb['source_txt'] = 'Källa';
$wb['add_new_record_txt'] = 'Lägg till nytt epostalias';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_aliasdomain.lng b/interface/web/mail/lib/lang/se_mail_aliasdomain.lng
index 9a2c5c3..e2105fb 100644
--- a/interface/web/mail/lib/lang/se_mail_aliasdomain.lng
+++ b/interface/web/mail/lib/lang/se_mail_aliasdomain.lng
@@ -9,4 +9,3 @@
$wb['source_error_unique'] = 'Källdomänen finns redan.';
$wb['source_error_regex'] = 'Ogiltig källdomän..';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_aliasdomain_list.lng b/interface/web/mail/lib/lang/se_mail_aliasdomain_list.lng
index d04d8cd..e874039 100644
--- a/interface/web/mail/lib/lang/se_mail_aliasdomain_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_aliasdomain_list.lng
@@ -5,4 +5,3 @@
$wb['destination_txt'] = 'Destination';
$wb['add_new_record_txt'] = 'Lägg till nytt domänalias';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_blacklist.lng b/interface/web/mail/lib/lang/se_mail_blacklist.lng
index 70b1be5..34b1f76 100644
--- a/interface/web/mail/lib/lang/se_mail_blacklist.lng
+++ b/interface/web/mail/lib/lang/se_mail_blacklist.lng
@@ -7,4 +7,3 @@
$wb['type_txt'] = 'Typ';
$wb['limit_mailfilter_txt'] = 'Det maximala antalet epostfilter för ditt konto är uppnått.';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_blacklist_list.lng b/interface/web/mail/lib/lang/se_mail_blacklist_list.lng
index d3da0de..158b989 100644
--- a/interface/web/mail/lib/lang/se_mail_blacklist_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_blacklist_list.lng
@@ -8,4 +8,3 @@
$wb['recipient_txt'] = 'Mottagare';
$wb['access_txt'] = 'åtkomst';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_content_filter.lng b/interface/web/mail/lib/lang/se_mail_content_filter.lng
index c7fb595..2f82e76 100644
--- a/interface/web/mail/lib/lang/se_mail_content_filter.lng
+++ b/interface/web/mail/lib/lang/se_mail_content_filter.lng
@@ -7,4 +7,3 @@
$wb['active_txt'] = 'Aktiv';
$wb['pattern_error_empty'] = 'Matchningsfältet är tomt.';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_content_filter_list.lng b/interface/web/mail/lib/lang/se_mail_content_filter_list.lng
index c612f9b..6eac193 100644
--- a/interface/web/mail/lib/lang/se_mail_content_filter_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_content_filter_list.lng
@@ -6,4 +6,3 @@
$wb['action_txt'] = 'Händelse';
$wb['add_new_record_txt'] = 'Lägg till nytt innehållsfilter';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_domain.lng b/interface/web/mail/lib/lang/se_mail_domain.lng
index e07dd25..295d10a 100644
--- a/interface/web/mail/lib/lang/se_mail_domain.lng
+++ b/interface/web/mail/lib/lang/se_mail_domain.lng
@@ -11,4 +11,3 @@
$wb['policy_txt'] = 'Spamfilter';
$wb['no_policy'] = '- ej aktiverat -';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_domain_admin_list.lng b/interface/web/mail/lib/lang/se_mail_domain_admin_list.lng
index bf8cd12..a4a203d 100644
--- a/interface/web/mail/lib/lang/se_mail_domain_admin_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_domain_admin_list.lng
@@ -6,4 +6,3 @@
$wb['active_txt'] = 'Aktiv';
$wb['sys_groupid_txt'] = 'Kund';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_domain_catchall.lng b/interface/web/mail/lib/lang/se_mail_domain_catchall.lng
index 9e03e69..7ef1116 100644
--- a/interface/web/mail/lib/lang/se_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/se_mail_domain_catchall.lng
@@ -9,4 +9,3 @@
$wb['source_txt'] = 'Källa';
$wb['destination_error_isemail'] = 'Destinationen när inte en giltig epostadress.';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_domain_catchall_list.lng b/interface/web/mail/lib/lang/se_mail_domain_catchall_list.lng
index 0e6958e..51789ee 100644
--- a/interface/web/mail/lib/lang/se_mail_domain_catchall_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_domain_catchall_list.lng
@@ -7,4 +7,3 @@
$wb['active_txt'] = 'Aktiv';
$wb['source_txt'] = 'källa';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_domain_list.lng b/interface/web/mail/lib/lang/se_mail_domain_list.lng
index 96120f5..4f3b548 100644
--- a/interface/web/mail/lib/lang/se_mail_domain_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_domain_list.lng
@@ -5,4 +5,3 @@
$wb['add_new_record_txt'] = 'Lägg till ny domän';
$wb['active_txt'] = 'Aktiv';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_forward.lng b/interface/web/mail/lib/lang/se_mail_forward.lng
index 511e0b6..af583f0 100644
--- a/interface/web/mail/lib/lang/se_mail_forward.lng
+++ b/interface/web/mail/lib/lang/se_mail_forward.lng
@@ -7,4 +7,3 @@
$wb['domain_txt'] = 'Domän';
$wb['source_txt'] = 'Källadress';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_forward_list.lng b/interface/web/mail/lib/lang/se_mail_forward_list.lng
index f271306..e1d7464 100644
--- a/interface/web/mail/lib/lang/se_mail_forward_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_forward_list.lng
@@ -6,4 +6,3 @@
$wb['add_new_record_txt'] = 'Lägg till ny vidarebefordran';
$wb['source_txt'] = 'källa';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_get.lng b/interface/web/mail/lib/lang/se_mail_get.lng
index f15208c..db44402 100644
--- a/interface/web/mail/lib/lang/se_mail_get.lng
+++ b/interface/web/mail/lib/lang/se_mail_get.lng
@@ -14,7 +14,6 @@
$wb['destination_error_isemail'] = 'Ingen destination vald.';
$wb['source_server_error_regex'] = 'POP3-/Imapserver är inte ett giltigt domännamn.';
$wb['source_read_all_txt'] = 'Hämta all epost (även läst epost)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use "Delete emails after retrieval" = no together with "Retrieve all emails" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
$wb['source_delete_note_txt'] = 'Vänligen kontrollera först om eposthämtning fungerar innan du aktiverar detta val..';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_get_list.lng b/interface/web/mail/lib/lang/se_mail_get_list.lng
index 0d06cad..9369095 100644
--- a/interface/web/mail/lib/lang/se_mail_get_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_get_list.lng
@@ -7,4 +7,3 @@
$wb['destination_txt'] = 'Destination';
$wb['add_new_record_txt'] = 'Lägg till nytt konto';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_mailinglist.lng b/interface/web/mail/lib/lang/se_mail_mailinglist.lng
index 68a7130..e7f927b 100644
--- a/interface/web/mail/lib/lang/se_mail_mailinglist.lng
+++ b/interface/web/mail/lib/lang/se_mail_mailinglist.lng
@@ -20,4 +20,3 @@
$wb['email_error_isemail'] = 'Epostadressen är ogiltig';
$wb['mailinglist_txt'] = 'Epostlista';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_mailinglist_list.lng b/interface/web/mail/lib/lang/se_mail_mailinglist_list.lng
index 11a82be..2e9f364 100644
--- a/interface/web/mail/lib/lang/se_mail_mailinglist_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_mailinglist_list.lng
@@ -3,4 +3,3 @@
$wb['domain_txt'] = 'Domän';
$wb['listname_txt'] = 'Listnamn';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_relay_recipient.lng b/interface/web/mail/lib/lang/se_mail_relay_recipient.lng
index ffb64ad..7506198 100644
--- a/interface/web/mail/lib/lang/se_mail_relay_recipient.lng
+++ b/interface/web/mail/lib/lang/se_mail_relay_recipient.lng
@@ -7,4 +7,3 @@
$wb['type_txt'] = 'Typ';
$wb['limit_mailfilter_txt'] = 'Det maximala antalet epostfilter för ditt konto är uppnått.';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_relay_recipient_list.lng b/interface/web/mail/lib/lang/se_mail_relay_recipient_list.lng
index 4c34ebf..c9176c7 100644
--- a/interface/web/mail/lib/lang/se_mail_relay_recipient_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_relay_recipient_list.lng
@@ -7,4 +7,3 @@
$wb['add_new_record_txt'] = 'Lägg till ny relämottagare';
$wb['access_txt'] = 'åtkomst';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_spamfilter.lng b/interface/web/mail/lib/lang/se_mail_spamfilter.lng
index 3080425..c83f09c 100644
--- a/interface/web/mail/lib/lang/se_mail_spamfilter.lng
+++ b/interface/web/mail/lib/lang/se_mail_spamfilter.lng
@@ -15,4 +15,3 @@
$wb['spam_redirect_maildir_purge_txt'] = 'Töm mappen efter';
$wb['days_txt'] = 'Dagar';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_spamfilter_list.lng b/interface/web/mail/lib/lang/se_mail_spamfilter_list.lng
index 407d516..2c361e1 100644
--- a/interface/web/mail/lib/lang/se_mail_spamfilter_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_spamfilter_list.lng
@@ -6,4 +6,3 @@
$wb['email_txt'] = 'Epost';
$wb['add_new_record_txt'] = 'Lägg till nytt spamfilter';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_transport.lng b/interface/web/mail/lib/lang/se_mail_transport.lng
index 198f807..70e26b7 100644
--- a/interface/web/mail/lib/lang/se_mail_transport.lng
+++ b/interface/web/mail/lib/lang/se_mail_transport.lng
@@ -9,4 +9,3 @@
$wb['limit_mailrouting_txt'] = 'Det maximala antalet epostrutter för ditt konto är uppnått.';
$wb['transport_txt'] = 'Transport';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_transport_list.lng b/interface/web/mail/lib/lang/se_mail_transport_list.lng
index 63474a8..2ce6dd8 100644
--- a/interface/web/mail/lib/lang/se_mail_transport_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_transport_list.lng
@@ -7,4 +7,3 @@
$wb['sort_order_txt'] = 'Sortera på';
$wb['add_new_record_txt'] = 'Lägg till ny transport';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_user.lng b/interface/web/mail/lib/lang/se_mail_user.lng
index 62be339..d6df113 100644
--- a/interface/web/mail/lib/lang/se_mail_user.lng
+++ b/interface/web/mail/lib/lang/se_mail_user.lng
@@ -51,4 +51,3 @@
$wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
?>
-
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 ed9574f..e6e62de 100644
--- a/interface/web/mail/lib/lang/se_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/se_mail_user_filter.lng
@@ -18,4 +18,3 @@
$wb['move_to_txt'] = 'Flytta till';
$wb['delete_txt'] = 'Radera';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_user_filter_list.lng b/interface/web/mail/lib/lang/se_mail_user_filter_list.lng
index 7825393..7d6e0c5 100644
--- a/interface/web/mail/lib/lang/se_mail_user_filter_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_user_filter_list.lng
@@ -5,4 +5,3 @@
$wb['page_of_txt'] = 'av';
$wb['delete_confirmation'] = 'Vill du verkligen radera epostfiltret?';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_user_list.lng b/interface/web/mail/lib/lang/se_mail_user_list.lng
index f18bc71..af96af8 100644
--- a/interface/web/mail/lib/lang/se_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_user_list.lng
@@ -6,4 +6,3 @@
$wb['name_txt'] = 'Riktigt namn';
$wb['login_txt'] = 'Logga in';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_user_stats_list.lng b/interface/web/mail/lib/lang/se_mail_user_stats_list.lng
index 1bec4d4..de6afd7 100644
--- a/interface/web/mail/lib/lang/se_mail_user_stats_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_user_stats_list.lng
@@ -6,4 +6,3 @@
$wb['this_year_txt'] = 'I år';
$wb['last_year_txt'] = 'Föregående år';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_whitelist.lng b/interface/web/mail/lib/lang/se_mail_whitelist.lng
index 40eaf86..7ce682f 100644
--- a/interface/web/mail/lib/lang/se_mail_whitelist.lng
+++ b/interface/web/mail/lib/lang/se_mail_whitelist.lng
@@ -7,4 +7,3 @@
$wb['type_txt'] = 'Typ';
$wb['limit_mailfilter_txt'] = 'Maximala antalet epostfilter för ditt konto är uppnått.';
?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_whitelist_list.lng b/interface/web/mail/lib/lang/se_mail_whitelist_list.lng
index a9f52a8..f72e8e2 100644
--- a/interface/web/mail/lib/lang/se_mail_whitelist_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_whitelist_list.lng
@@ -8,4 +8,3 @@
$wb['recipient_txt'] = 'Mottagare';
$wb['access_txt'] = 'åtkomst';
?>
-
diff --git a/interface/web/mail/lib/lang/se_spamfilter_blacklist.lng b/interface/web/mail/lib/lang/se_spamfilter_blacklist.lng
index 2839c6c..873e43d 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_blacklist.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_blacklist.lng
@@ -10,4 +10,3 @@
$wb['5 - medium'] = '5 - medium';
$wb['1 - lowest'] = '1 - lägsta';
?>
-
diff --git a/interface/web/mail/lib/lang/se_spamfilter_blacklist_list.lng b/interface/web/mail/lib/lang/se_spamfilter_blacklist_list.lng
index edf0842..d5cac76 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_blacklist_list.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_blacklist_list.lng
@@ -7,4 +7,3 @@
$wb['email_txt'] = 'Vitlistad epostadress';
$wb['add_new_record_txt'] = 'Lägg till svartlistning';
?>
-
diff --git a/interface/web/mail/lib/lang/se_spamfilter_config.lng b/interface/web/mail/lib/lang/se_spamfilter_config.lng
index ebfedb3..a67fb5b 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_config.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_config.lng
@@ -18,4 +18,3 @@
$wb['mailbox_size_limit_txt'] = 'Mailbox Size Limit';
$wb['message_size_limit_txt'] = 'Message Size Limit';
?>
-
diff --git a/interface/web/mail/lib/lang/se_spamfilter_config_list.lng b/interface/web/mail/lib/lang/se_spamfilter_config_list.lng
index 52b398b..9d2ec14 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_config_list.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_config_list.lng
@@ -3,4 +3,3 @@
$wb['server_name_txt'] = 'Server';
$wb['server_id_txt'] = 'server_id';
?>
-
diff --git a/interface/web/mail/lib/lang/se_spamfilter_policy.lng b/interface/web/mail/lib/lang/se_spamfilter_policy.lng
index d5a429b..e876330 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_policy.lng
@@ -36,4 +36,3 @@
$wb['message_size_limit_txt'] = 'Message size limit';
$wb['banned_rulenames_txt'] = 'Banned rulenames';
?>
-
diff --git a/interface/web/mail/lib/lang/se_spamfilter_policy_list.lng b/interface/web/mail/lib/lang/se_spamfilter_policy_list.lng
index da678a4..04491ae 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_policy_list.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_policy_list.lng
@@ -7,4 +7,3 @@
$wb['bad_header_lover_txt'] = 'Bad Header lover';
$wb['add_new_record_txt'] = 'Add Policy record';
?>
-
diff --git a/interface/web/mail/lib/lang/se_spamfilter_users.lng b/interface/web/mail/lib/lang/se_spamfilter_users.lng
index babb304..ba3b60e 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_users.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_users.lng
@@ -11,4 +11,3 @@
$wb['5 - medium'] = '5 - medium';
$wb['1 - lowest'] = '1 - lägsta';
?>
-
diff --git a/interface/web/mail/lib/lang/se_spamfilter_users_list.lng b/interface/web/mail/lib/lang/se_spamfilter_users_list.lng
index 830ac39..4ff8784 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_users_list.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_users_list.lng
@@ -8,4 +8,3 @@
$wb['email_txt'] = 'Epost';
$wb['add_new_record_txt'] = 'Lägg till spamfilteranvändare';
?>
-
diff --git a/interface/web/mail/lib/lang/se_spamfilter_whitelist.lng b/interface/web/mail/lib/lang/se_spamfilter_whitelist.lng
index 2839c6c..873e43d 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_whitelist.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_whitelist.lng
@@ -10,4 +10,3 @@
$wb['5 - medium'] = '5 - medium';
$wb['1 - lowest'] = '1 - lägsta';
?>
-
diff --git a/interface/web/mail/lib/lang/se_spamfilter_whitelist_list.lng b/interface/web/mail/lib/lang/se_spamfilter_whitelist_list.lng
index 00185a0..080ec27 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_whitelist_list.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_whitelist_list.lng
@@ -7,4 +7,3 @@
$wb['email_txt'] = 'Vitlistad epostadress';
$wb['add_new_record_txt'] = 'Lägg till vitlistning';
?>
-
diff --git a/interface/web/mail/lib/lang/se_user_quota_stats_list.lng b/interface/web/mail/lib/lang/se_user_quota_stats_list.lng
index 380cf5b..dc57c61 100755
--- a/interface/web/mail/lib/lang/se_user_quota_stats_list.lng
+++ b/interface/web/mail/lib/lang/se_user_quota_stats_list.lng
@@ -6,4 +6,3 @@
$wb['used_txt'] = 'Använt utrymme';
$wb['percentage_txt'] = 'Använt %';
?>
-
diff --git a/interface/web/mail/mail_domain_edit.php b/interface/web/mail/mail_domain_edit.php
index 45a1ade..02dc55b 100644
--- a/interface/web/mail/mail_domain_edit.php
+++ b/interface/web/mail/mail_domain_edit.php
@@ -359,7 +359,16 @@
//* Update the mailinglist
$app->db->query("UPDATE mail_mailinglist SET sys_userid = $client_user_id, sys_groupid = $sys_groupid WHERE domain = '".$app->db->quote($this->oldDataRecord['domain'])."'");
-
+
+ //* Update fetchmail accounts
+ $fetchmail = $app->db->queryAllRecords("SELECT * FROM mail_get WHERE destination like '%@".$app->db->quote($this->oldDataRecord['domain'])."'");
+ if(is_array($fetchmail)) {
+ foreach($fetchmail as $rec) {
+ $destination = $app->db->quote(str_replace($this->oldDataRecord['domain'], $this->dataRecord['domain'], $rec['destination']));
+ $app->db->datalogUpdate('mail_get', "destination = '$destination', sys_userid = $client_user_id, sys_groupid = '$sys_groupid'", 'mailget_id', $rec['mailget_id']);
+ }
+ }
+
//* Delete the old spamfilter record
$tmp = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = '@".$app->db->quote($this->oldDataRecord["domain"])."'");
$app->db->datalogDelete('spamfilter_users', 'id', $tmp["id"]);
diff --git a/interface/web/mail/mail_user_edit.php b/interface/web/mail/mail_user_edit.php
index 0c9110b..8166b58 100644
--- a/interface/web/mail/mail_user_edit.php
+++ b/interface/web/mail/mail_user_edit.php
@@ -166,7 +166,7 @@
}
// Check the quota and adjust
- if(isset($_POST["quota"]) && $client["limit_mailquota"] >= 0 && $app->functions->intval($this->dataRecord["quota"]) * 1024 * 1024 != $this->oldDataRecord['quota']) {
+ if(isset($_POST["quota"]) && $client["limit_mailquota"] >= 0 && (($app->functions->intval($this->dataRecord["quota"]) * 1024 * 1024 != $this->oldDataRecord['quota']) || ($_POST["quota"] <= 0))) {
$tmp = $app->db->queryOneRecord("SELECT sum(quota) as mailquota FROM mail_user WHERE mailuser_id != ".$app->functions->intval($this->id)." AND ".$app->tform->getAuthSQL('u'));
$mailquota = $tmp["mailquota"] / 1024 / 1024;
$new_mailbox_quota = $app->functions->intval($this->dataRecord["quota"]);
@@ -179,6 +179,7 @@
unset($tmp);
unset($tmp_quota);
}
+
} // end if user is not admin
diff --git a/interface/web/mailuser/lib/lang/se.lng b/interface/web/mailuser/lib/lang/se.lng
index f9e6f5b..b0d55d4 100644
--- a/interface/web/mailuser/lib/lang/se.lng
+++ b/interface/web/mailuser/lib/lang/se.lng
@@ -7,4 +7,3 @@
$wb['Spamfilter'] = 'Spamfilter';
$wb['Email Filters'] = 'Epostfilter';
?>
-
diff --git a/interface/web/mailuser/lib/lang/se_index.lng b/interface/web/mailuser/lib/lang/se_index.lng
index a23c6a6..785507b 100644
--- a/interface/web/mailuser/lib/lang/se_index.lng
+++ b/interface/web/mailuser/lib/lang/se_index.lng
@@ -10,4 +10,3 @@
$wb['mb_txt'] = 'MB';
$wb['none_txt'] = 'Inget';
?>
-
diff --git a/interface/web/mailuser/lib/lang/se_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/se_mail_user_autoresponder.lng
index 9429978..4a9215c 100644
--- a/interface/web/mailuser/lib/lang/se_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/se_mail_user_autoresponder.lng
@@ -11,4 +11,3 @@
$wb['now_txt'] = 'Nu';
$wb['autoresponder_subject_txt'] = 'Ämnesrad';
?>
-
diff --git a/interface/web/mailuser/lib/lang/se_mail_user_cc.lng b/interface/web/mailuser/lib/lang/se_mail_user_cc.lng
index 203a928..b01ae1b 100644
--- a/interface/web/mailuser/lib/lang/se_mail_user_cc.lng
+++ b/interface/web/mailuser/lib/lang/se_mail_user_cc.lng
@@ -7,4 +7,3 @@
$wb['name_optional_txt'] = '(Frivilligt)';
$wb['cc_note_txt'] = '(Separera flera epostadresser med kommatecken)';
?>
-
diff --git a/interface/web/mailuser/lib/lang/se_mail_user_filter.lng b/interface/web/mailuser/lib/lang/se_mail_user_filter.lng
index 17da57a..8cf96ce 100644
--- a/interface/web/mailuser/lib/lang/se_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/se_mail_user_filter.lng
@@ -18,4 +18,3 @@
$wb['move_to_txt'] = 'Flytta till';
$wb['delete_txt'] = 'Radera';
?>
-
diff --git a/interface/web/mailuser/lib/lang/se_mail_user_filter_list.lng b/interface/web/mailuser/lib/lang/se_mail_user_filter_list.lng
index f4f757d..c21eef0 100644
--- a/interface/web/mailuser/lib/lang/se_mail_user_filter_list.lng
+++ b/interface/web/mailuser/lib/lang/se_mail_user_filter_list.lng
@@ -6,4 +6,3 @@
$wb['page_of_txt'] = 'av';
$wb['delete_confirmation'] = 'Vill du verkligen radera epostfiltret?';
?>
-
diff --git a/interface/web/mailuser/lib/lang/se_mail_user_password.lng b/interface/web/mailuser/lib/lang/se_mail_user_password.lng
index 27ebb37..c784301 100644
--- a/interface/web/mailuser/lib/lang/se_mail_user_password.lng
+++ b/interface/web/mailuser/lib/lang/se_mail_user_password.lng
@@ -8,4 +8,3 @@
$wb['password_mismatch_txt'] = 'Lösenorden matchar inte';
$wb['password_match_txt'] = 'Lösenorden matchar';
?>
-
diff --git a/interface/web/mailuser/lib/lang/se_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/se_mail_user_spamfilter.lng
index e457b5a..7ec5f2a 100644
--- a/interface/web/mailuser/lib/lang/se_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/se_mail_user_spamfilter.lng
@@ -5,4 +5,3 @@
$wb['no_policy'] = '- ej aktiverat -';
$wb['policy_txt'] = 'Policy';
?>
-
diff --git a/interface/web/mailuser/mail_user_password_edit.php b/interface/web/mailuser/mail_user_password_edit.php
index f6d6d78..07a1925 100644
--- a/interface/web/mailuser/mail_user_password_edit.php
+++ b/interface/web/mailuser/mail_user_password_edit.php
@@ -51,7 +51,8 @@
class page_action extends tform_actions {
function onSubmit() {
-
+ global $app, $conf;
+
$this->id = $app->functions->intval($_SESSION['s']['user']['mailuser_id']);
parent::onSubmit();
diff --git a/interface/web/monitor/lib/lang/se.lng b/interface/web/monitor/lib/lang/se.lng
index 0df6528..b550f80 100644
--- a/interface/web/monitor/lib/lang/se.lng
+++ b/interface/web/monitor/lib/lang/se.lng
@@ -153,4 +153,3 @@
$wb['no_munin_url_defined_txt'] = 'Ingen Munin-URL definierad.';
$wb['no_permissions_to_view_munin_txt'] = 'Du har inte behörighet att visa Munin.';
?>
-
diff --git a/interface/web/monitor/lib/lang/se_datalog_list.lng b/interface/web/monitor/lib/lang/se_datalog_list.lng
index 527b149..e3e76ea 100644
--- a/interface/web/monitor/lib/lang/se_datalog_list.lng
+++ b/interface/web/monitor/lib/lang/se_datalog_list.lng
@@ -6,4 +6,3 @@
$wb['action_txt'] = 'Händelse';
$wb['status_txt'] = 'Status';
?>
-
diff --git a/interface/web/monitor/lib/lang/se_syslog_list.lng b/interface/web/monitor/lib/lang/se_syslog_list.lng
index f3194b6..6c7268c 100644
--- a/interface/web/monitor/lib/lang/se_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/se_syslog_list.lng
@@ -5,4 +5,3 @@
$wb['loglevel_txt'] = 'Loggnivå';
$wb['message_txt'] = 'Meddelande';
?>
-
diff --git a/interface/web/sites/form/database.tform.php b/interface/web/sites/form/database.tform.php
index a3e8772..fb600fd 100644
--- a/interface/web/sites/form/database.tform.php
+++ b/interface/web/sites/form/database.tform.php
@@ -88,7 +88,7 @@
'type' => array (
'datatype' => 'VARCHAR',
'formtype' => 'SELECT',
- 'default' => 'y',
+ 'default' => 'mysql',
'value' => array('mysql' => 'MySQL')
),
'database_name' => array (
@@ -139,7 +139,7 @@
'database_charset' => array (
'datatype' => 'VARCHAR',
'formtype' => 'SELECT',
- 'default' => 'y',
+ 'default' => '',
'value' => array('' => 'DB-Default', 'latin1' => 'Latin 1', 'utf8' => 'UTF-8')
),
'remote_access' => array (
diff --git a/interface/web/sites/form/ftp_user.tform.php b/interface/web/sites/form/ftp_user.tform.php
index 20e4565..ef11b60 100644
--- a/interface/web/sites/form/ftp_user.tform.php
+++ b/interface/web/sites/form/ftp_user.tform.php
@@ -91,7 +91,7 @@
'validators' => array ( 0 => array ( 'type' => 'UNIQUE',
'errmsg'=> 'username_error_unique'),
1 => array ( 'type' => 'REGEX',
- 'regex' => '/^[\w\.\-]{0,64}$/',
+ 'regex' => '/^[\w\.\-@\+]{0,64}$/',
'errmsg'=> 'username_error_regex'),
),
'default' => '',
@@ -166,6 +166,13 @@
'formtype' => 'TEXT',
'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY',
'errmsg'=> 'uid_error_empty'),
+ 1 => array(
+ 'type' => 'CUSTOM',
+ 'class' => 'validate_systemuser',
+ 'function' => 'check_sysuser',
+ 'check_names' => true,
+ 'errmsg' => 'invalid_system_user_or_group_txt'
+ ),
),
'default' => '0',
'value' => '',
@@ -177,6 +184,13 @@
'formtype' => 'TEXT',
'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY',
'errmsg'=> 'gid_error_empty'),
+ 1 => array(
+ 'type' => 'CUSTOM',
+ 'class' => 'validate_systemuser',
+ 'function' => 'check_sysgroup',
+ 'check_names' => true,
+ 'errmsg' => 'invalid_system_user_or_group_txt'
+ ),
),
'default' => '0',
'value' => '',
@@ -187,7 +201,10 @@
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY',
- 'errmsg'=> 'directory_error_empty'),
+ 'errmsg'=> 'directory_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\ \.\-\_\/]{10,128}$/',
+ 'errmsg'=> 'directory_error_regex'),
),
'default' => '',
'value' => '',
diff --git a/interface/web/sites/form/shell_user.tform.php b/interface/web/sites/form/shell_user.tform.php
index ab7cef1..062ed6e 100644
--- a/interface/web/sites/form/shell_user.tform.php
+++ b/interface/web/sites/form/shell_user.tform.php
@@ -177,6 +177,13 @@
'formtype' => 'TEXT',
'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY',
'errmsg'=> 'uid_error_empty'),
+ 1 => array(
+ 'type' => 'CUSTOM',
+ 'class' => 'validate_systemuser',
+ 'function' => 'check_sysuser',
+ 'check_names' => true,
+ 'errmsg' => 'invalid_system_user_or_group_txt'
+ ),
),
'default' => '0',
'value' => '',
@@ -188,6 +195,13 @@
'formtype' => 'TEXT',
'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY',
'errmsg'=> 'uid_error_empty'),
+ 1 => array(
+ 'type' => 'CUSTOM',
+ 'class' => 'validate_systemuser',
+ 'function' => 'check_sysgroup',
+ 'check_names' => true,
+ 'errmsg' => 'invalid_system_user_or_group_txt'
+ ),
),
'default' => '0',
'value' => '',
@@ -197,6 +211,12 @@
'shell' => array (
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
+ 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY',
+ 'errmsg'=> 'shell_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\/]{5,20}$/',
+ 'errmsg'=> 'shell_error_regex'),
+ ),
'default' => '/bin/bash',
'value' => '',
'width' => '30',
@@ -205,8 +225,11 @@
'dir' => array (
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
- 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY',
- 'errmsg'=> 'directory_error_empty'),
+ 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY',
+ 'errmsg'=> 'directory_error_empty'),
+ 1 => array ( 'type' => 'REGEX',
+ 'regex' => '/^\/[a-zA-Z0-9\ \.\-\_\/]{10,128}$/',
+ 'errmsg'=> 'directory_error_regex'),
),
'default' => '',
'value' => '',
diff --git a/interface/web/sites/ftp_user_edit.php b/interface/web/sites/ftp_user_edit.php
index 0346201..ba695e0 100644
--- a/interface/web/sites/ftp_user_edit.php
+++ b/interface/web/sites/ftp_user_edit.php
@@ -138,6 +138,11 @@
$dir = $app->db->quote($web["document_root"]);
$uid = $app->db->quote($web["system_user"]);
$gid = $app->db->quote($web["system_group"]);
+
+ // Check system user and group
+ if($app->functions->is_allowed_user($uid) == false || $app->functions->is_allowed_group($gid) == false) {
+ $app->error('Invalid system user or group');
+ }
// The FTP user shall be owned by the same group then the website
$sys_groupid = $app->functions->intval($web['sys_groupid']);
@@ -148,7 +153,7 @@
function onBeforeUpdate() {
global $app, $conf, $interfaceConf;
-
+
/*
* If the names should be restricted -> do it!
*/
diff --git a/interface/web/sites/lib/lang/ar_ftp_user.lng b/interface/web/sites/lib/lang/ar_ftp_user.lng
index 0492731..42b8c4d 100644
--- a/interface/web/sites/lib/lang/ar_ftp_user.lng
+++ b/interface/web/sites/lib/lang/ar_ftp_user.lng
@@ -31,4 +31,6 @@
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/ar_shell_user.lng b/interface/web/sites/lib/lang/ar_shell_user.lng
index 8460d4e..8095f4b 100644
--- a/interface/web/sites/lib/lang/ar_shell_user.lng
+++ b/interface/web/sites/lib/lang/ar_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'The passwords do match.';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/ar_web_folder_list.lng b/interface/web/sites/lib/lang/ar_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/ar_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/ar_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Website';
$wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
diff --git a/interface/web/sites/lib/lang/ar_web_folder_user_list.lng b/interface/web/sites/lib/lang/ar_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/ar_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/ar_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Active';
$wb['web_folder_id_txt'] = 'Folder';
$wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
diff --git a/interface/web/sites/lib/lang/bg_ftp_user.lng b/interface/web/sites/lib/lang/bg_ftp_user.lng
index fc15872..4d5cef7 100644
--- a/interface/web/sites/lib/lang/bg_ftp_user.lng
+++ b/interface/web/sites/lib/lang/bg_ftp_user.lng
@@ -31,4 +31,6 @@
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/bg_shell_user.lng b/interface/web/sites/lib/lang/bg_shell_user.lng
index 82a44af..1570914 100644
--- a/interface/web/sites/lib/lang/bg_shell_user.lng
+++ b/interface/web/sites/lib/lang/bg_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'The passwords do match.';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/bg_web_folder_list.lng b/interface/web/sites/lib/lang/bg_web_folder_list.lng
index 36c9cbc..4e0f4b8 100644
--- a/interface/web/sites/lib/lang/bg_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/bg_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Сървър';
$wb['parent_domain_id_txt'] = 'Уебсайт';
$wb['path_txt'] = 'Път';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
diff --git a/interface/web/sites/lib/lang/bg_web_folder_user_list.lng b/interface/web/sites/lib/lang/bg_web_folder_user_list.lng
index ff89ba0..2824380 100644
--- a/interface/web/sites/lib/lang/bg_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/bg_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Active';
$wb['web_folder_id_txt'] = 'Folder';
$wb['username_txt'] = 'Потребителско име';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
diff --git a/interface/web/sites/lib/lang/br_ftp_user.lng b/interface/web/sites/lib/lang/br_ftp_user.lng
index 4873bfd..f46b94f 100644
--- a/interface/web/sites/lib/lang/br_ftp_user.lng
+++ b/interface/web/sites/lib/lang/br_ftp_user.lng
@@ -31,4 +31,6 @@
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/br_shell_user.lng b/interface/web/sites/lib/lang/br_shell_user.lng
index 8a098cb..69e0f6e 100644
--- a/interface/web/sites/lib/lang/br_shell_user.lng
+++ b/interface/web/sites/lib/lang/br_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'The passwords do match.';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/br_web_folder_list.lng b/interface/web/sites/lib/lang/br_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/br_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/br_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Website';
$wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
diff --git a/interface/web/sites/lib/lang/br_web_folder_user_list.lng b/interface/web/sites/lib/lang/br_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/br_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/br_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Active';
$wb['web_folder_id_txt'] = 'Folder';
$wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
diff --git a/interface/web/sites/lib/lang/cz_ftp_user.lng b/interface/web/sites/lib/lang/cz_ftp_user.lng
index 2ef0f29..b580e08 100644
--- a/interface/web/sites/lib/lang/cz_ftp_user.lng
+++ b/interface/web/sites/lib/lang/cz_ftp_user.lng
@@ -31,4 +31,6 @@
$wb['repeat_password_txt'] = 'Opakujte heslo';
$wb['password_mismatch_txt'] = 'Hesla se neshodují.';
$wb['password_match_txt'] = 'Hesla se shodují.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/cz_shell_user.lng b/interface/web/sites/lib/lang/cz_shell_user.lng
index 9bc6bdd..fc933da 100644
--- a/interface/web/sites/lib/lang/cz_shell_user.lng
+++ b/interface/web/sites/lib/lang/cz_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'Hesla se shodují.';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/cz_web_folder_list.lng b/interface/web/sites/lib/lang/cz_web_folder_list.lng
index b75c0e8..c7fa12c 100644
--- a/interface/web/sites/lib/lang/cz_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/cz_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Webové stránky';
$wb['path_txt'] = 'Cesta';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
diff --git a/interface/web/sites/lib/lang/cz_web_folder_user_list.lng b/interface/web/sites/lib/lang/cz_web_folder_user_list.lng
index 99fe620..c0059b2 100644
--- a/interface/web/sites/lib/lang/cz_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/cz_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Aktivní';
$wb['web_folder_id_txt'] = 'Složka';
$wb['username_txt'] = 'Uživatelské jméno';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
diff --git a/interface/web/sites/lib/lang/de_ftp_user.lng b/interface/web/sites/lib/lang/de_ftp_user.lng
index 65e8481..285c6c6 100644
--- a/interface/web/sites/lib/lang/de_ftp_user.lng
+++ b/interface/web/sites/lib/lang/de_ftp_user.lng
@@ -31,4 +31,6 @@
$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['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/de_shell_user.lng b/interface/web/sites/lib/lang/de_shell_user.lng
index 9de369f..3c4cc2d 100644
--- a/interface/web/sites/lib/lang/de_shell_user.lng
+++ b/interface/web/sites/lib/lang/de_shell_user.lng
@@ -28,4 +28,7 @@
$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'] = 'Der 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';
?>
diff --git a/interface/web/sites/lib/lang/de_web_folder_list.lng b/interface/web/sites/lib/lang/de_web_folder_list.lng
index 5491202..34e8f86 100644
--- a/interface/web/sites/lib/lang/de_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/de_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Webseite';
$wb['path_txt'] = 'Pfad';
+$wb['add_new_record_txt'] = 'Ordner hinzufügen';
?>
diff --git a/interface/web/sites/lib/lang/de_web_folder_user_list.lng b/interface/web/sites/lib/lang/de_web_folder_user_list.lng
index 5357760..c9bcb9c 100644
--- a/interface/web/sites/lib/lang/de_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/de_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Aktiv';
$wb['web_folder_id_txt'] = 'Ordner';
$wb['username_txt'] = 'Benutzername';
+$wb['add_new_record_txt'] = 'Ordner Benutzer hinzufügen';
?>
diff --git a/interface/web/sites/lib/lang/el_ftp_user.lng b/interface/web/sites/lib/lang/el_ftp_user.lng
index 2f89d27..a77581d 100644
--- a/interface/web/sites/lib/lang/el_ftp_user.lng
+++ b/interface/web/sites/lib/lang/el_ftp_user.lng
@@ -31,4 +31,6 @@
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/el_shell_user.lng b/interface/web/sites/lib/lang/el_shell_user.lng
index 3c3ea31..2ced9c2 100644
--- a/interface/web/sites/lib/lang/el_shell_user.lng
+++ b/interface/web/sites/lib/lang/el_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'The passwords do match.';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/el_web_folder_list.lng b/interface/web/sites/lib/lang/el_web_folder_list.lng
index 86dc18c..f1e9e33 100644
--- a/interface/web/sites/lib/lang/el_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/el_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Website';
$wb['path_txt'] = 'Διαδρομή';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
diff --git a/interface/web/sites/lib/lang/el_web_folder_user_list.lng b/interface/web/sites/lib/lang/el_web_folder_user_list.lng
index 2103bcb..bcbd08c 100644
--- a/interface/web/sites/lib/lang/el_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/el_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Ενεργός';
$wb['web_folder_id_txt'] = 'Φάκελος';
$wb['username_txt'] = 'Όνομα Χρήστη';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
diff --git a/interface/web/sites/lib/lang/en_ftp_user.lng b/interface/web/sites/lib/lang/en_ftp_user.lng
index ed5fe02..2c8e2a9 100644
--- a/interface/web/sites/lib/lang/en_ftp_user.lng
+++ b/interface/web/sites/lib/lang/en_ftp_user.lng
@@ -32,4 +32,6 @@
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/en_shell_user.lng b/interface/web/sites/lib/lang/en_shell_user.lng
index c15d1b5..2ae9b4e 100644
--- a/interface/web/sites/lib/lang/en_shell_user.lng
+++ b/interface/web/sites/lib/lang/en_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'The passwords do match.';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/en_web_folder_list.lng b/interface/web/sites/lib/lang/en_web_folder_list.lng
index 32780ab..5966c03 100644
--- a/interface/web/sites/lib/lang/en_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/en_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb["server_id_txt"] = 'Server';
$wb["parent_domain_id_txt"] = 'Website';
$wb["path_txt"] = 'Path';
+$wb["add_new_record_txt"] = 'Add new Folder';
?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/en_web_folder_user_list.lng b/interface/web/sites/lib/lang/en_web_folder_user_list.lng
index d0d9e05..d0350c9 100644
--- a/interface/web/sites/lib/lang/en_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/en_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb["active_txt"] = 'Active';
$wb["web_folder_id_txt"] = 'Folder';
$wb["username_txt"] = 'Username';
+$wb["add_new_record_txt"] = 'Add new Folder User';
?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/es_ftp_user.lng b/interface/web/sites/lib/lang/es_ftp_user.lng
index c8b86b0..f8a5e6c 100644
--- a/interface/web/sites/lib/lang/es_ftp_user.lng
+++ b/interface/web/sites/lib/lang/es_ftp_user.lng
@@ -31,4 +31,6 @@
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/es_shell_user.lng b/interface/web/sites/lib/lang/es_shell_user.lng
index 45fd930..46c39cc 100644
--- a/interface/web/sites/lib/lang/es_shell_user.lng
+++ b/interface/web/sites/lib/lang/es_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'The passwords do match.';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/es_web_folder_list.lng b/interface/web/sites/lib/lang/es_web_folder_list.lng
index 668f626..e760a67 100644
--- a/interface/web/sites/lib/lang/es_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/es_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Servidor';
$wb['parent_domain_id_txt'] = 'Sitio web';
$wb['path_txt'] = 'Ruta';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
diff --git a/interface/web/sites/lib/lang/es_web_folder_user_list.lng b/interface/web/sites/lib/lang/es_web_folder_user_list.lng
index 7779911..9bdb1e9 100644
--- a/interface/web/sites/lib/lang/es_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/es_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Activar';
$wb['web_folder_id_txt'] = 'Carpeta';
$wb['username_txt'] = 'Nombre de usuario';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
diff --git a/interface/web/sites/lib/lang/fi_ftp_user.lng b/interface/web/sites/lib/lang/fi_ftp_user.lng
index ca39439..4cf718c 100755
--- a/interface/web/sites/lib/lang/fi_ftp_user.lng
+++ b/interface/web/sites/lib/lang/fi_ftp_user.lng
@@ -31,4 +31,6 @@
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/fi_shell_user.lng b/interface/web/sites/lib/lang/fi_shell_user.lng
index 06fe1bd..116e8c8 100755
--- a/interface/web/sites/lib/lang/fi_shell_user.lng
+++ b/interface/web/sites/lib/lang/fi_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'The passwords do match.';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/fi_web_folder_list.lng b/interface/web/sites/lib/lang/fi_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/fi_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/fi_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Website';
$wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
diff --git a/interface/web/sites/lib/lang/fi_web_folder_user_list.lng b/interface/web/sites/lib/lang/fi_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/fi_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/fi_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Active';
$wb['web_folder_id_txt'] = 'Folder';
$wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
diff --git a/interface/web/sites/lib/lang/fr.lng b/interface/web/sites/lib/lang/fr.lng
index c914ef0..9acee9d 100644
--- a/interface/web/sites/lib/lang/fr.lng
+++ b/interface/web/sites/lib/lang/fr.lng
@@ -31,5 +31,5 @@
$wb['Installed packages'] = 'Packages installés';
$wb['Update Packagelist'] = 'Mise à jour de la liste des packages';
$wb['Subdomain (Vhost)'] = 'Sous-domaine (Vhost)';
-$wb['error_proxy_requires_url'] = 'Type de redirection \"proxy\" nécessite une URL comme chemin de redirection.';
+$wb['error_proxy_requires_url'] = 'Type de redirection \\"proxy\\" nécessite une URL comme chemin de redirection.';
?>
diff --git a/interface/web/sites/lib/lang/fr_aps.lng b/interface/web/sites/lib/lang/fr_aps.lng
index eb268b0..5d43e80 100644
--- a/interface/web/sites/lib/lang/fr_aps.lng
+++ b/interface/web/sites/lib/lang/fr_aps.lng
@@ -38,14 +38,14 @@
$wb['error_license_agreement'] = 'Avant de continuer, vous devez accepter les conditions d\'utilisation (licence).';
$wb['error_no_database_pw'] = 'Vous n\'avez pas renseigné de mot de passe BDD valide.';
$wb['error_short_database_pw'] = 'Veuillez saisir un mot de passe BDD plus long.';
-$wb['error_no_value_for'] = 'Le champ \"%s\" ne peut pas être vide.';
-$wb['error_short_value_for'] = 'Le champ \"%s\" nécessite une valeur plus longue.';
-$wb['error_long_value_for'] = 'Le champ \"%s\" nécessite une valeur plus courte.';
-$wb['error_inv_value_for'] = 'Vous avez saisi une valeur invalide pour le champ \"%s\".';
-$wb['error_inv_email_for'] = 'L\'adresse email saisie pour le champ \"%s\" est invalide.';
-$wb['error_inv_domain_for'] = 'Le domaine saisi pour le champ \"%s\" est invalide.';
-$wb['error_inv_integer_for'] = 'Le nombre saisi pour le champ \"%s\" est invalide.';
-$wb['error_inv_float_for'] = 'La décimale saisie pour le champ \"%s\" est invalide.';
+$wb['error_no_value_for'] = 'Le champ \\"%s\\" ne peut pas être vide.';
+$wb['error_short_value_for'] = 'Le champ \\"%s\\" nécessite une valeur plus longue.';
+$wb['error_long_value_for'] = 'Le champ \\"%s\\" nécessite une valeur plus courte.';
+$wb['error_inv_value_for'] = 'Vous avez saisi une valeur invalide pour le champ \\"%s\\".';
+$wb['error_inv_email_for'] = 'L\'adresse email saisie pour le champ \\"%s\\" est invalide.';
+$wb['error_inv_domain_for'] = 'Le domaine saisi pour le champ \\"%s\\" est invalide.';
+$wb['error_inv_integer_for'] = 'Le nombre saisi pour le champ \\"%s\\" est invalide.';
+$wb['error_inv_float_for'] = 'La décimale saisie pour le champ \\"%s\\" est invalide.';
$wb['error_used_location'] = 'Le chemin de destination contient déjà un package d\'installation.';
$wb['installation_task_txt'] = 'Installation prévue';
$wb['installation_error_txt'] = 'Erreur d\'installation';
diff --git a/interface/web/sites/lib/lang/fr_ftp_user.lng b/interface/web/sites/lib/lang/fr_ftp_user.lng
index 5d00f4b..f73a81b 100644
--- a/interface/web/sites/lib/lang/fr_ftp_user.lng
+++ b/interface/web/sites/lib/lang/fr_ftp_user.lng
@@ -31,4 +31,6 @@
$wb['repeat_password_txt'] = 'Vérification du mot de passe';
$wb['password_mismatch_txt'] = 'Les mots de passe ne correspondent pas.';
$wb['password_match_txt'] = 'Les mots de passe correspondent.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/fr_shell_user.lng b/interface/web/sites/lib/lang/fr_shell_user.lng
index 3f967f8..2e518d7 100644
--- a/interface/web/sites/lib/lang/fr_shell_user.lng
+++ b/interface/web/sites/lib/lang/fr_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'Les mots de passe correspondent.';
$wb['username_must_not_exceed_32_chars_txt'] = 'Le nom d\'utilisateur ne doit pas dépasser 32 caractères.';
$wb['username_not_allowed_txt'] = 'Le nom d\'utilisateur est interdit.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/fr_web_folder_list.lng b/interface/web/sites/lib/lang/fr_web_folder_list.lng
index f358f8c..0eed4fd 100644
--- a/interface/web/sites/lib/lang/fr_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/fr_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Serveur';
$wb['parent_domain_id_txt'] = 'Site web';
$wb['path_txt'] = 'Chemin';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
diff --git a/interface/web/sites/lib/lang/fr_web_folder_user_list.lng b/interface/web/sites/lib/lang/fr_web_folder_user_list.lng
index e1824e2..663c6d2 100644
--- a/interface/web/sites/lib/lang/fr_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/fr_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Actif';
$wb['web_folder_id_txt'] = 'Dossier';
$wb['username_txt'] = 'Nom de l\'utilisateur';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
diff --git a/interface/web/sites/lib/lang/fr_web_subdomain.lng b/interface/web/sites/lib/lang/fr_web_subdomain.lng
index ebc7250..edc7be0 100644
--- a/interface/web/sites/lib/lang/fr_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/fr_web_subdomain.lng
@@ -42,5 +42,5 @@
$wb['domain_error_wildcard'] = 'Les sous-domaines joker ne sont pas autorisés.';
$wb['proxy_directives_txt'] = 'Directives pour les Proxy';
$wb['available_proxy_directive_snippets_txt'] = 'Directives pour les Proxy Snippets disponibles :';
-$wb['error_proxy_requires_url'] = 'Les redirections de type \"proxy\" nécessitent une URL comme chemin de redirection.';
+$wb['error_proxy_requires_url'] = 'Les redirections de type \\"proxy\\" nécessitent une URL comme chemin de redirection.';
?>
diff --git a/interface/web/sites/lib/lang/hr_ftp_user.lng b/interface/web/sites/lib/lang/hr_ftp_user.lng
index 6290c0e..dbefe0b 100644
--- a/interface/web/sites/lib/lang/hr_ftp_user.lng
+++ b/interface/web/sites/lib/lang/hr_ftp_user.lng
@@ -31,4 +31,6 @@
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/hr_shell_user.lng b/interface/web/sites/lib/lang/hr_shell_user.lng
index 4173787..d081fd7 100644
--- a/interface/web/sites/lib/lang/hr_shell_user.lng
+++ b/interface/web/sites/lib/lang/hr_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'The passwords do match.';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/hr_web_folder_list.lng b/interface/web/sites/lib/lang/hr_web_folder_list.lng
index 5696589..0a900fb 100644
--- a/interface/web/sites/lib/lang/hr_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/hr_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Web stranica';
$wb['path_txt'] = 'Putanja';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
diff --git a/interface/web/sites/lib/lang/hr_web_folder_user_list.lng b/interface/web/sites/lib/lang/hr_web_folder_user_list.lng
index af7792f..3beae9f 100644
--- a/interface/web/sites/lib/lang/hr_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/hr_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Aktivno';
$wb['web_folder_id_txt'] = 'Web direkotrij';
$wb['username_txt'] = 'Korisničko ime';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
diff --git a/interface/web/sites/lib/lang/hu_ftp_user.lng b/interface/web/sites/lib/lang/hu_ftp_user.lng
index 132bc49..bbf61d4 100644
--- a/interface/web/sites/lib/lang/hu_ftp_user.lng
+++ b/interface/web/sites/lib/lang/hu_ftp_user.lng
@@ -31,4 +31,6 @@
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/hu_shell_user.lng b/interface/web/sites/lib/lang/hu_shell_user.lng
index 849f380..8eaa537 100644
--- a/interface/web/sites/lib/lang/hu_shell_user.lng
+++ b/interface/web/sites/lib/lang/hu_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'The passwords do match.';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/hu_web_folder_list.lng b/interface/web/sites/lib/lang/hu_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/hu_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/hu_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Website';
$wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
diff --git a/interface/web/sites/lib/lang/hu_web_folder_user_list.lng b/interface/web/sites/lib/lang/hu_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/hu_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/hu_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Active';
$wb['web_folder_id_txt'] = 'Folder';
$wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
diff --git a/interface/web/sites/lib/lang/id_ftp_user.lng b/interface/web/sites/lib/lang/id_ftp_user.lng
index 5e1dab2..4898de2 100644
--- a/interface/web/sites/lib/lang/id_ftp_user.lng
+++ b/interface/web/sites/lib/lang/id_ftp_user.lng
@@ -31,4 +31,6 @@
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/id_shell_user.lng b/interface/web/sites/lib/lang/id_shell_user.lng
index 0ec09cc..83153c1 100644
--- a/interface/web/sites/lib/lang/id_shell_user.lng
+++ b/interface/web/sites/lib/lang/id_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'The passwords do match.';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/id_web_folder_list.lng b/interface/web/sites/lib/lang/id_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/id_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/id_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Website';
$wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
diff --git a/interface/web/sites/lib/lang/id_web_folder_user_list.lng b/interface/web/sites/lib/lang/id_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/id_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/id_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Active';
$wb['web_folder_id_txt'] = 'Folder';
$wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
diff --git a/interface/web/sites/lib/lang/it_ftp_user.lng b/interface/web/sites/lib/lang/it_ftp_user.lng
index 1964a9f..bdd7818 100644
--- a/interface/web/sites/lib/lang/it_ftp_user.lng
+++ b/interface/web/sites/lib/lang/it_ftp_user.lng
@@ -31,4 +31,6 @@
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/it_shell_user.lng b/interface/web/sites/lib/lang/it_shell_user.lng
index 8460d4e..8095f4b 100644
--- a/interface/web/sites/lib/lang/it_shell_user.lng
+++ b/interface/web/sites/lib/lang/it_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'The passwords do match.';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/it_web_folder_list.lng b/interface/web/sites/lib/lang/it_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/it_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/it_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Website';
$wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
diff --git a/interface/web/sites/lib/lang/it_web_folder_user_list.lng b/interface/web/sites/lib/lang/it_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/it_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/it_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Active';
$wb['web_folder_id_txt'] = 'Folder';
$wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
diff --git a/interface/web/sites/lib/lang/ja_ftp_user.lng b/interface/web/sites/lib/lang/ja_ftp_user.lng
index fb80ca3..8e92b1b 100644
--- a/interface/web/sites/lib/lang/ja_ftp_user.lng
+++ b/interface/web/sites/lib/lang/ja_ftp_user.lng
@@ -31,4 +31,6 @@
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/ja_shell_user.lng b/interface/web/sites/lib/lang/ja_shell_user.lng
index 19f09a5..2ce5ad3 100644
--- a/interface/web/sites/lib/lang/ja_shell_user.lng
+++ b/interface/web/sites/lib/lang/ja_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'The passwords do match.';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/ja_web_folder_list.lng b/interface/web/sites/lib/lang/ja_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/ja_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/ja_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Website';
$wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
diff --git a/interface/web/sites/lib/lang/ja_web_folder_user_list.lng b/interface/web/sites/lib/lang/ja_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/ja_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/ja_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Active';
$wb['web_folder_id_txt'] = 'Folder';
$wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
diff --git a/interface/web/sites/lib/lang/nl_ftp_user.lng b/interface/web/sites/lib/lang/nl_ftp_user.lng
index 7f797de..16e4ae8 100644
--- a/interface/web/sites/lib/lang/nl_ftp_user.lng
+++ b/interface/web/sites/lib/lang/nl_ftp_user.lng
@@ -31,4 +31,6 @@
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/nl_shell_user.lng b/interface/web/sites/lib/lang/nl_shell_user.lng
index 53fed20..9a4ae63 100644
--- a/interface/web/sites/lib/lang/nl_shell_user.lng
+++ b/interface/web/sites/lib/lang/nl_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'The passwords do match.';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/nl_web_folder_list.lng b/interface/web/sites/lib/lang/nl_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/nl_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/nl_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Website';
$wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
diff --git a/interface/web/sites/lib/lang/nl_web_folder_user_list.lng b/interface/web/sites/lib/lang/nl_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/nl_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/nl_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Active';
$wb['web_folder_id_txt'] = 'Folder';
$wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
diff --git a/interface/web/sites/lib/lang/pl_ftp_user.lng b/interface/web/sites/lib/lang/pl_ftp_user.lng
index 5c91401..37dd36b 100644
--- a/interface/web/sites/lib/lang/pl_ftp_user.lng
+++ b/interface/web/sites/lib/lang/pl_ftp_user.lng
@@ -31,4 +31,6 @@
$wb['repeat_password_txt'] = 'Powtórz hasło';
$wb['password_mismatch_txt'] = 'Hasła nie pasują do siebie';
$wb['password_match_txt'] = 'Hasła pasują';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/pl_shell_user.lng b/interface/web/sites/lib/lang/pl_shell_user.lng
index e51ef64..19674e3 100644
--- a/interface/web/sites/lib/lang/pl_shell_user.lng
+++ b/interface/web/sites/lib/lang/pl_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'Hasła pasują';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/pl_web_folder_list.lng b/interface/web/sites/lib/lang/pl_web_folder_list.lng
index 87a7690..75a403b 100644
--- a/interface/web/sites/lib/lang/pl_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/pl_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Serwer';
$wb['parent_domain_id_txt'] = 'Witryna';
$wb['path_txt'] = 'Ścieżka';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
diff --git a/interface/web/sites/lib/lang/pl_web_folder_user_list.lng b/interface/web/sites/lib/lang/pl_web_folder_user_list.lng
index 81769bd..728c1f7 100644
--- a/interface/web/sites/lib/lang/pl_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/pl_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Aktywny';
$wb['web_folder_id_txt'] = 'Katalog';
$wb['username_txt'] = 'Login';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
diff --git a/interface/web/sites/lib/lang/pt_ftp_user.lng b/interface/web/sites/lib/lang/pt_ftp_user.lng
index 1770872..9f5ed04 100644
--- a/interface/web/sites/lib/lang/pt_ftp_user.lng
+++ b/interface/web/sites/lib/lang/pt_ftp_user.lng
@@ -31,4 +31,6 @@
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/pt_shell_user.lng b/interface/web/sites/lib/lang/pt_shell_user.lng
index 5e34648..4564bbc 100644
--- a/interface/web/sites/lib/lang/pt_shell_user.lng
+++ b/interface/web/sites/lib/lang/pt_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'The passwords do match.';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/pt_web_folder_list.lng b/interface/web/sites/lib/lang/pt_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/pt_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/pt_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Website';
$wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
diff --git a/interface/web/sites/lib/lang/pt_web_folder_user_list.lng b/interface/web/sites/lib/lang/pt_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/pt_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/pt_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Active';
$wb['web_folder_id_txt'] = 'Folder';
$wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
diff --git a/interface/web/sites/lib/lang/ro_ftp_user.lng b/interface/web/sites/lib/lang/ro_ftp_user.lng
index d7415ec..e28b35e 100644
--- a/interface/web/sites/lib/lang/ro_ftp_user.lng
+++ b/interface/web/sites/lib/lang/ro_ftp_user.lng
@@ -31,4 +31,6 @@
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/ro_shell_user.lng b/interface/web/sites/lib/lang/ro_shell_user.lng
index d4620af..912b6b2 100644
--- a/interface/web/sites/lib/lang/ro_shell_user.lng
+++ b/interface/web/sites/lib/lang/ro_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'The passwords do match.';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/ro_web_folder_list.lng b/interface/web/sites/lib/lang/ro_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/ro_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/ro_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Website';
$wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
diff --git a/interface/web/sites/lib/lang/ro_web_folder_user_list.lng b/interface/web/sites/lib/lang/ro_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/ro_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/ro_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Active';
$wb['web_folder_id_txt'] = 'Folder';
$wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
diff --git a/interface/web/sites/lib/lang/ru_ftp_user.lng b/interface/web/sites/lib/lang/ru_ftp_user.lng
index 58a2277..f9609ce 100644
--- a/interface/web/sites/lib/lang/ru_ftp_user.lng
+++ b/interface/web/sites/lib/lang/ru_ftp_user.lng
@@ -31,4 +31,6 @@
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/ru_shell_user.lng b/interface/web/sites/lib/lang/ru_shell_user.lng
index d87f544..f3b788f 100644
--- a/interface/web/sites/lib/lang/ru_shell_user.lng
+++ b/interface/web/sites/lib/lang/ru_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'The passwords do match.';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/ru_web_folder_list.lng b/interface/web/sites/lib/lang/ru_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/ru_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/ru_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Website';
$wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
diff --git a/interface/web/sites/lib/lang/ru_web_folder_user_list.lng b/interface/web/sites/lib/lang/ru_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/ru_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/ru_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Active';
$wb['web_folder_id_txt'] = 'Folder';
$wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
diff --git a/interface/web/sites/lib/lang/se.lng b/interface/web/sites/lib/lang/se.lng
index 780195f..a636705 100644
--- a/interface/web/sites/lib/lang/se.lng
+++ b/interface/web/sites/lib/lang/se.lng
@@ -31,6 +31,5 @@
$wb['Installed packages'] = 'Installerade paket';
$wb['Update Packagelist'] = 'Uppdatera paketlista';
$wb['Subdomain (Vhost)'] = 'Underdomän (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type "proxy" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
?>
-
diff --git a/interface/web/sites/lib/lang/se_aps.lng b/interface/web/sites/lib/lang/se_aps.lng
index 315b03c..1fe8617 100644
--- a/interface/web/sites/lib/lang/se_aps.lng
+++ b/interface/web/sites/lib/lang/se_aps.lng
@@ -38,14 +38,14 @@
$wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
$wb['error_no_database_pw'] = 'You have provided no valid database password.';
$wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field "%s" must not be empty.';
-$wb['error_short_value_for'] = 'The field "%s" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field "%s" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field "%s".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field "%s".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field "%s".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field "%s".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field "%s".';
+$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
$wb['error_used_location'] = 'The installation path already contains a package installation.';
$wb['installation_task_txt'] = 'Installation planerad';
$wb['installation_error_txt'] = 'Installationsfel';
@@ -56,4 +56,3 @@
$wb['btn_cancel_txt'] = 'Avbryt';
$wb['limit_aps_txt'] = 'The max. number of APS instances for your account is reached.';
?>
-
diff --git a/interface/web/sites/lib/lang/se_aps_instances_list.lng b/interface/web/sites/lib/lang/se_aps_instances_list.lng
index 81cda2a..a9428aa 100644
--- a/interface/web/sites/lib/lang/se_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/se_aps_instances_list.lng
@@ -11,4 +11,3 @@
$wb['delete_txt'] = 'Radera';
$wb['reinstall_txt'] = 'Ominstallera';
?>
-
diff --git a/interface/web/sites/lib/lang/se_aps_packages_list.lng b/interface/web/sites/lib/lang/se_aps_packages_list.lng
index 1746bfd..8555961 100644
--- a/interface/web/sites/lib/lang/se_aps_packages_list.lng
+++ b/interface/web/sites/lib/lang/se_aps_packages_list.lng
@@ -6,4 +6,3 @@
$wb['status_txt'] = 'Olåst';
$wb['filter_txt'] = 'Sök';
?>
-
diff --git a/interface/web/sites/lib/lang/se_aps_update_packagelist.lng b/interface/web/sites/lib/lang/se_aps_update_packagelist.lng
index 8d84c05..891a951 100644
--- a/interface/web/sites/lib/lang/se_aps_update_packagelist.lng
+++ b/interface/web/sites/lib/lang/se_aps_update_packagelist.lng
@@ -5,4 +5,3 @@
$wb['btn_cancel_txt'] = 'Avbryt';
$wb['legend_txt'] = 'Here you can update the list of available packages. Please note that this can take up to five minutes. You can leave this page if you like; the process will continue in the background.';
?>
-
diff --git a/interface/web/sites/lib/lang/se_cron.lng b/interface/web/sites/lib/lang/se_cron.lng
index bc89db2..83b7d3b 100644
--- a/interface/web/sites/lib/lang/se_cron.lng
+++ b/interface/web/sites/lib/lang/se_cron.lng
@@ -22,4 +22,3 @@
$wb['limit_cron_url_txt'] = 'URL cron only. Please enter a URL starting with http:// as cron command.';
$wb['command_error_empty'] = 'Kommandofältet är tomt.';
?>
-
diff --git a/interface/web/sites/lib/lang/se_cron_list.lng b/interface/web/sites/lib/lang/se_cron_list.lng
index b17951c..0459144 100644
--- a/interface/web/sites/lib/lang/se_cron_list.lng
+++ b/interface/web/sites/lib/lang/se_cron_list.lng
@@ -11,4 +11,3 @@
$wb['add_new_cron_txt'] = 'Lägg till nytt cron-jobb';
$wb['parent_domain_id_txt'] = 'Webbsida';
?>
-
diff --git a/interface/web/sites/lib/lang/se_database.lng b/interface/web/sites/lib/lang/se_database.lng
index 03eac08..c06c3f0 100644
--- a/interface/web/sites/lib/lang/se_database.lng
+++ b/interface/web/sites/lib/lang/se_database.lng
@@ -44,4 +44,3 @@
$wb['database_client_differs_txt'] = 'The client of the parent web and the database do not match.';
$wb['database_user_missing_txt'] = 'Vänligen välj en databasanvändare för den här databasen.';
?>
-
diff --git a/interface/web/sites/lib/lang/se_database_admin_list.lng b/interface/web/sites/lib/lang/se_database_admin_list.lng
index fe415d3..640c07c 100644
--- a/interface/web/sites/lib/lang/se_database_admin_list.lng
+++ b/interface/web/sites/lib/lang/se_database_admin_list.lng
@@ -9,4 +9,3 @@
$wb['sys_groupid_txt'] = 'Kund';
$wb['parent_domain_id_txt'] = 'Webbsida';
?>
-
diff --git a/interface/web/sites/lib/lang/se_database_list.lng b/interface/web/sites/lib/lang/se_database_list.lng
index 3909b37..bfcdaf3 100644
--- a/interface/web/sites/lib/lang/se_database_list.lng
+++ b/interface/web/sites/lib/lang/se_database_list.lng
@@ -8,4 +8,3 @@
$wb['database_user_txt'] = 'Databasanvändare';
$wb['parent_domain_id_txt'] = 'Webbsida';
?>
-
diff --git a/interface/web/sites/lib/lang/se_database_user.lng b/interface/web/sites/lib/lang/se_database_user.lng
index c707175..2cf9a1a 100644
--- a/interface/web/sites/lib/lang/se_database_user.lng
+++ b/interface/web/sites/lib/lang/se_database_user.lng
@@ -21,4 +21,3 @@
$wb['globalsearch_searchfield_watermark_txt'] = 'Sök';
$wb['globalsearch_suggestions_text_txt'] = 'Förslag';
?>
-
diff --git a/interface/web/sites/lib/lang/se_database_user_admin_list.lng b/interface/web/sites/lib/lang/se_database_user_admin_list.lng
index 6eca0b7..a9bb594 100644
--- a/interface/web/sites/lib/lang/se_database_user_admin_list.lng
+++ b/interface/web/sites/lib/lang/se_database_user_admin_list.lng
@@ -4,4 +4,3 @@
$wb['add_new_record_txt'] = 'Lägg till ny användare';
$wb['sys_groupid_txt'] = 'Kund';
?>
-
diff --git a/interface/web/sites/lib/lang/se_database_user_list.lng b/interface/web/sites/lib/lang/se_database_user_list.lng
index cb62444..c0eef9d 100644
--- a/interface/web/sites/lib/lang/se_database_user_list.lng
+++ b/interface/web/sites/lib/lang/se_database_user_list.lng
@@ -3,4 +3,3 @@
$wb['database_user_txt'] = 'Databasanvändare';
$wb['add_new_record_txt'] = 'Lägg till ny användare';
?>
-
diff --git a/interface/web/sites/lib/lang/se_ftp_user.lng b/interface/web/sites/lib/lang/se_ftp_user.lng
index 50d9031..3ba08a2 100644
--- a/interface/web/sites/lib/lang/se_ftp_user.lng
+++ b/interface/web/sites/lib/lang/se_ftp_user.lng
@@ -31,5 +31,6 @@
$wb['repeat_password_txt'] = 'Upprepa lösenord';
$wb['password_mismatch_txt'] = 'Lösenorden matchar inte';
$wb['password_match_txt'] = 'Lösenorden matchar';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
-
diff --git a/interface/web/sites/lib/lang/se_ftp_user_list.lng b/interface/web/sites/lib/lang/se_ftp_user_list.lng
index c833d1a..f0ac760 100644
--- a/interface/web/sites/lib/lang/se_ftp_user_list.lng
+++ b/interface/web/sites/lib/lang/se_ftp_user_list.lng
@@ -6,4 +6,3 @@
$wb['username_txt'] = 'Användarnamn';
$wb['add_new_record_txt'] = 'Lägg till ny FTP-användare';
?>
-
diff --git a/interface/web/sites/lib/lang/se_shell_user.lng b/interface/web/sites/lib/lang/se_shell_user.lng
index b2d0083..8095f4b 100644
--- a/interface/web/sites/lib/lang/se_shell_user.lng
+++ b/interface/web/sites/lib/lang/se_shell_user.lng
@@ -28,5 +28,7 @@
$wb['password_match_txt'] = 'The passwords do match.';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
-
diff --git a/interface/web/sites/lib/lang/se_shell_user_list.lng b/interface/web/sites/lib/lang/se_shell_user_list.lng
index 3389173..4a9d7cb 100644
--- a/interface/web/sites/lib/lang/se_shell_user_list.lng
+++ b/interface/web/sites/lib/lang/se_shell_user_list.lng
@@ -6,4 +6,3 @@
$wb['username_txt'] = 'Username';
$wb['add_new_record_txt'] = 'Add new Shell-User';
?>
-
diff --git a/interface/web/sites/lib/lang/se_user_quota_stats_list.lng b/interface/web/sites/lib/lang/se_user_quota_stats_list.lng
index 2084a49..7fe4791 100644
--- a/interface/web/sites/lib/lang/se_user_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/se_user_quota_stats_list.lng
@@ -7,4 +7,3 @@
$wb['soft_txt'] = 'Soft limit';
$wb['files_txt'] = 'Single files';
?>
-
diff --git a/interface/web/sites/lib/lang/se_web_aliasdomain.lng b/interface/web/sites/lib/lang/se_web_aliasdomain.lng
index ecbc150..4149c71 100644
--- a/interface/web/sites/lib/lang/se_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/se_web_aliasdomain.lng
@@ -113,4 +113,3 @@
$wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
$wb['Domain'] = 'Aliasdomain';
?>
-
diff --git a/interface/web/sites/lib/lang/se_web_aliasdomain_list.lng b/interface/web/sites/lib/lang/se_web_aliasdomain_list.lng
index 4860654..8ea34c4 100644
--- a/interface/web/sites/lib/lang/se_web_aliasdomain_list.lng
+++ b/interface/web/sites/lib/lang/se_web_aliasdomain_list.lng
@@ -12,4 +12,3 @@
$wb['no_flag_txt'] = 'No flag';
$wb['none_txt'] = 'None';
?>
-
diff --git a/interface/web/sites/lib/lang/se_web_backup_list.lng b/interface/web/sites/lib/lang/se_web_backup_list.lng
index 261304d..e743953 100644
--- a/interface/web/sites/lib/lang/se_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/se_web_backup_list.lng
@@ -13,4 +13,3 @@
$wb['backup_type_mysql'] = 'MySQL-databaser';
$wb['backup_type_web'] = 'Webbsidefiler';
?>
-
diff --git a/interface/web/sites/lib/lang/se_web_domain.lng b/interface/web/sites/lib/lang/se_web_domain.lng
index e281579..2b9a056 100644
--- a/interface/web/sites/lib/lang/se_web_domain.lng
+++ b/interface/web/sites/lib/lang/se_web_domain.lng
@@ -128,4 +128,3 @@
$wb['backup_excludes_error_regex'] = 'The excluded directories contain invalid characters.';
$wb['invalid_custom_php_ini_settings_txt'] = 'Ogiltiga php.ini-inställningar';
?>
-
diff --git a/interface/web/sites/lib/lang/se_web_domain_admin_list.lng b/interface/web/sites/lib/lang/se_web_domain_admin_list.lng
index 0737245..b460e27 100644
--- a/interface/web/sites/lib/lang/se_web_domain_admin_list.lng
+++ b/interface/web/sites/lib/lang/se_web_domain_admin_list.lng
@@ -7,4 +7,3 @@
$wb['domain_txt'] = 'Domain';
$wb['add_new_record_txt'] = 'Add new website';
?>
-
diff --git a/interface/web/sites/lib/lang/se_web_domain_list.lng b/interface/web/sites/lib/lang/se_web_domain_list.lng
index eabd544..88ec412 100644
--- a/interface/web/sites/lib/lang/se_web_domain_list.lng
+++ b/interface/web/sites/lib/lang/se_web_domain_list.lng
@@ -6,4 +6,3 @@
$wb['domain_txt'] = 'Domain';
$wb['add_new_record_txt'] = 'Add new website';
?>
-
diff --git a/interface/web/sites/lib/lang/se_web_folder.lng b/interface/web/sites/lib/lang/se_web_folder.lng
index 96553c5..6dbc158 100644
--- a/interface/web/sites/lib/lang/se_web_folder.lng
+++ b/interface/web/sites/lib/lang/se_web_folder.lng
@@ -6,4 +6,3 @@
$wb['path_error_regex'] = 'Ogiltig katalogsökväg';
$wb['error_folder_already_protected_txt'] = 'Det finns redan ett inlägg för den här mappen.';
?>
-
diff --git a/interface/web/sites/lib/lang/se_web_folder_list.lng b/interface/web/sites/lib/lang/se_web_folder_list.lng
index 194e744..f3ce8b1 100644
--- a/interface/web/sites/lib/lang/se_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/se_web_folder_list.lng
@@ -4,5 +4,5 @@
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Webbsida';
$wb['path_txt'] = 'Sökväg';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
-
diff --git a/interface/web/sites/lib/lang/se_web_folder_user.lng b/interface/web/sites/lib/lang/se_web_folder_user.lng
index 0c52cfa..6db2415 100644
--- a/interface/web/sites/lib/lang/se_web_folder_user.lng
+++ b/interface/web/sites/lib/lang/se_web_folder_user.lng
@@ -12,4 +12,3 @@
$wb['no_folder_perm'] = 'Du har inga rättigheter för denna katalog';
$wb['error_user_exists_already_txt'] = 'Det finns redan ett inlägg för denna användare';
?>
-
diff --git a/interface/web/sites/lib/lang/se_web_folder_user_list.lng b/interface/web/sites/lib/lang/se_web_folder_user_list.lng
index 3af6f70..67612f5 100644
--- a/interface/web/sites/lib/lang/se_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/se_web_folder_user_list.lng
@@ -3,5 +3,5 @@
$wb['active_txt'] = 'Active';
$wb['web_folder_id_txt'] = 'Folder';
$wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
-
diff --git a/interface/web/sites/lib/lang/se_web_sites_stats_list.lng b/interface/web/sites/lib/lang/se_web_sites_stats_list.lng
index 66137dc..95a8256 100644
--- a/interface/web/sites/lib/lang/se_web_sites_stats_list.lng
+++ b/interface/web/sites/lib/lang/se_web_sites_stats_list.lng
@@ -7,4 +7,3 @@
$wb['last_year_txt'] = 'Förra året';
$wb['sum_txt'] = 'Total';
?>
-
diff --git a/interface/web/sites/lib/lang/se_web_subdomain.lng b/interface/web/sites/lib/lang/se_web_subdomain.lng
index 8955209..856d3c2 100644
--- a/interface/web/sites/lib/lang/se_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/se_web_subdomain.lng
@@ -42,6 +42,5 @@
$wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
$wb['proxy_directives_txt'] = 'Proxy Directives';
$wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type "proxy" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
?>
-
diff --git a/interface/web/sites/lib/lang/se_web_subdomain_list.lng b/interface/web/sites/lib/lang/se_web_subdomain_list.lng
index 58084a6..1c16bcd 100644
--- a/interface/web/sites/lib/lang/se_web_subdomain_list.lng
+++ b/interface/web/sites/lib/lang/se_web_subdomain_list.lng
@@ -6,4 +6,3 @@
$wb['domain_txt'] = 'Subdomain';
$wb['add_new_record_txt'] = 'Add new subdomain';
?>
-
diff --git a/interface/web/sites/lib/lang/se_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/se_web_vhost_subdomain.lng
index 409c830..c0ca93b 100644
--- a/interface/web/sites/lib/lang/se_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/se_web_vhost_subdomain.lng
@@ -125,4 +125,3 @@
$wb['backup_excludes_error_regex'] = 'The excluded directories contain invalid characters.';
$wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
?>
-
diff --git a/interface/web/sites/lib/lang/se_web_vhost_subdomain_list.lng b/interface/web/sites/lib/lang/se_web_vhost_subdomain_list.lng
index 9604437..100b03b 100644
--- a/interface/web/sites/lib/lang/se_web_vhost_subdomain_list.lng
+++ b/interface/web/sites/lib/lang/se_web_vhost_subdomain_list.lng
@@ -6,4 +6,3 @@
$wb['domain_txt'] = 'Underdomän';
$wb['add_new_record_txt'] = 'Lägg till ny underdomän';
?>
-
diff --git a/interface/web/sites/lib/lang/se_webdav_user.lng b/interface/web/sites/lib/lang/se_webdav_user.lng
index 4c3fe5e..07dc281 100644
--- a/interface/web/sites/lib/lang/se_webdav_user.lng
+++ b/interface/web/sites/lib/lang/se_webdav_user.lng
@@ -19,4 +19,3 @@
$wb['password_mismatch_txt'] = 'Lösenorden matchar inte';
$wb['password_match_txt'] = 'Lösenorden matchar';
?>
-
diff --git a/interface/web/sites/lib/lang/se_webdav_user_list.lng b/interface/web/sites/lib/lang/se_webdav_user_list.lng
index 96bd318..a6031a1 100644
--- a/interface/web/sites/lib/lang/se_webdav_user_list.lng
+++ b/interface/web/sites/lib/lang/se_webdav_user_list.lng
@@ -6,4 +6,3 @@
$wb['username_txt'] = 'Användarnamn';
$wb['add_new_record_txt'] = 'Lägg till ny WebDAV-användare';
?>
-
diff --git a/interface/web/sites/lib/lang/sk_ftp_user.lng b/interface/web/sites/lib/lang/sk_ftp_user.lng
index 1526d40..c57cbfd 100644
--- a/interface/web/sites/lib/lang/sk_ftp_user.lng
+++ b/interface/web/sites/lib/lang/sk_ftp_user.lng
@@ -31,4 +31,6 @@
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/sk_shell_user.lng b/interface/web/sites/lib/lang/sk_shell_user.lng
index 79f9eac..8b94d0d 100644
--- a/interface/web/sites/lib/lang/sk_shell_user.lng
+++ b/interface/web/sites/lib/lang/sk_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'The passwords do match.';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/sk_web_folder_list.lng b/interface/web/sites/lib/lang/sk_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/sk_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/sk_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Website';
$wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
diff --git a/interface/web/sites/lib/lang/sk_web_folder_user_list.lng b/interface/web/sites/lib/lang/sk_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/sk_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/sk_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Active';
$wb['web_folder_id_txt'] = 'Folder';
$wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
diff --git a/interface/web/sites/lib/lang/tr_ftp_user.lng b/interface/web/sites/lib/lang/tr_ftp_user.lng
index 4cc2f4d..62401de 100644
--- a/interface/web/sites/lib/lang/tr_ftp_user.lng
+++ b/interface/web/sites/lib/lang/tr_ftp_user.lng
@@ -31,4 +31,6 @@
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
?>
diff --git a/interface/web/sites/lib/lang/tr_shell_user.lng b/interface/web/sites/lib/lang/tr_shell_user.lng
index ac45063..0c932c1 100644
--- a/interface/web/sites/lib/lang/tr_shell_user.lng
+++ b/interface/web/sites/lib/lang/tr_shell_user.lng
@@ -28,4 +28,7 @@
$wb['password_match_txt'] = 'The passwords do match.';
$wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
$wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
?>
diff --git a/interface/web/sites/lib/lang/tr_web_folder_list.lng b/interface/web/sites/lib/lang/tr_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/tr_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_folder_list.lng
@@ -4,4 +4,5 @@
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Website';
$wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
?>
diff --git a/interface/web/sites/lib/lang/tr_web_folder_user_list.lng b/interface/web/sites/lib/lang/tr_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/tr_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_folder_user_list.lng
@@ -3,4 +3,5 @@
$wb['active_txt'] = 'Active';
$wb['web_folder_id_txt'] = 'Folder';
$wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
?>
diff --git a/interface/web/sites/shell_user_edit.php b/interface/web/sites/shell_user_edit.php
index 3c72a5f..f301139 100644
--- a/interface/web/sites/shell_user_edit.php
+++ b/interface/web/sites/shell_user_edit.php
@@ -135,6 +135,8 @@
}
}
unset($blacklist);
+
+ if($app->functions->is_allowed_user(trim(strtolower($this->dataRecord['username']))) == false) $app->tform->errorMessage .= $app->tform->lng('username_not_allowed_txt');
/*
* If the names should be restricted -> do it!
@@ -163,6 +165,11 @@
$dir = $app->db->quote($web["document_root"]);
$uid = $app->db->quote($web["system_user"]);
$gid = $app->db->quote($web["system_group"]);
+
+ // Check system user and group
+ if($app->functions->is_allowed_user($uid) == false || $app->functions->is_allowed_group($gid) == false) {
+ $app->error($app->tform->lng('invalid_system_user_or_group_txt'));
+ }
// The FTP user shall be owned by the same group then the website
$sys_groupid = $app->functions->intval($web['sys_groupid']);
diff --git a/interface/web/sites/web_aliasdomain_edit.php b/interface/web/sites/web_aliasdomain_edit.php
index 4131109..008e707 100644
--- a/interface/web/sites/web_aliasdomain_edit.php
+++ b/interface/web/sites/web_aliasdomain_edit.php
@@ -123,9 +123,17 @@
function onSubmit() {
global $app, $conf;
+
+ // Get the record of the parent domain
+ if(!@$this->dataRecord["parent_domain_id"] && $this->id) {
+ $tmp = $app->db->queryOneRecord("SELECT parent_domain_id FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
+ if($tmp) $this->dataRecord["parent_domain_id"] = $tmp['parent_domain_id'];
+ unset($tmp);
+ }
// Get the record of the parent domain
$parent_domain = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval(@$this->dataRecord["parent_domain_id"]) . " AND ".$app->tform->getAuthSQL('r'));
+
if(!$parent_domain || $parent_domain['domain_id'] != @$this->dataRecord['parent_domain_id']) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");
/* check if the domain module is used - and check if the selected domain can be used! */
$app->uses('ini_parser,getconf');
@@ -153,7 +161,7 @@
//* make sure that the domain is lowercase
if(isset($this->dataRecord["domain"])) $this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
-
+
parent::onSubmit();
}
diff --git a/interface/web/sites/web_domain_edit.php b/interface/web/sites/web_domain_edit.php
index 990e8cd..1208e48 100644
--- a/interface/web/sites/web_domain_edit.php
+++ b/interface/web/sites/web_domain_edit.php
@@ -607,9 +607,11 @@
// When the record is updated
if($this->id > 0) {
// restore the server ID if the user is not admin and record is edited
- $tmp = $app->db->queryOneRecord("SELECT server_id, `cgi`, `ssi`, `perl`, `ruby`, `python`, `suexec`, `errordocs`, `subdomain`, `ssl` FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
+ $tmp = $app->db->queryOneRecord("SELECT server_id, `system_user`, `system_group`, `cgi`, `ssi`, `perl`, `ruby`, `python`, `suexec`, `errordocs`, `subdomain`, `ssl` FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
$this->dataRecord["server_id"] = $tmp["server_id"];
+ $this->dataRecord['system_user'] = $tmp['system_user'];
+ $this->dataRecord['system_group'] = $tmp['system_group'];
// set the settings to current if not provided (or cleared due to limits)
if($this->dataRecord['cgi'] == 'n') $this->dataRecord['cgi'] = $tmp['cgi'];
if($this->dataRecord['ssi'] == 'n') $this->dataRecord['ssi'] = $tmp['ssi'];
@@ -749,7 +751,7 @@
// value inside ''
if(preg_match('@^\s*;*\s*[a-zA-Z0-9._]*\s*=\s*\'.*\'\s*;*\s*$@', $custom_php_ini_settings_line)) continue;
// everything else
- if(preg_match('@^\s*;*\s*[a-zA-Z0-9._]*\s*=\s*[-a-zA-Z0-9~&=_\@/,.#\s]*\s*;*\s*$@', $custom_php_ini_settings_line)) continue;
+ if(preg_match('@^\s*;*\s*[a-zA-Z0-9._]*\s*=\s*[-a-zA-Z0-9~&=_\@/,.#\s|()]*\s*;*\s*$@', $custom_php_ini_settings_line)) continue;
$custom_php_ini_settings_are_valid = false;
break;
}
diff --git a/interface/web/sites/web_subdomain_edit.php b/interface/web/sites/web_subdomain_edit.php
index 0d485c4..4d079ff 100644
--- a/interface/web/sites/web_subdomain_edit.php
+++ b/interface/web/sites/web_subdomain_edit.php
@@ -130,6 +130,13 @@
function onSubmit() {
global $app, $conf;
+
+ // Get the record of the parent domain
+ if(!@$this->dataRecord["parent_domain_id"] && $this->id) {
+ $tmp = $app->db->queryOneRecord("SELECT parent_domain_id FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
+ if($tmp) $this->dataRecord["parent_domain_id"] = $tmp['parent_domain_id'];
+ unset($tmp);
+ }
// Get the record of the parent domain
$parent_domain = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval(@$this->dataRecord["parent_domain_id"]) . " AND ".$app->tform->getAuthSQL('r'));
@@ -162,7 +169,7 @@
//* make sure that the domain is lowercase
if(isset($this->dataRecord["domain"])) $this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
-
+
parent::onSubmit();
}
diff --git a/interface/web/sites/web_vhost_subdomain_edit.php b/interface/web/sites/web_vhost_subdomain_edit.php
index 37359a2..ef1fc4c 100644
--- a/interface/web/sites/web_vhost_subdomain_edit.php
+++ b/interface/web/sites/web_vhost_subdomain_edit.php
@@ -341,6 +341,8 @@
$this->dataRecord["ipv6_address"] = $parent_domain["ipv6_address"];
$this->dataRecord["client_group_id"] = $parent_domain["client_group_id"];
$this->dataRecord["vhost_type"] = 'name';
+ $this->dataRecord["system_user"] = $parent_domain["system_user"];
+ $this->dataRecord["system_group"] = $parent_domain["system_group"];
$this->parent_domain_record = $parent_domain;
diff --git a/interface/web/strengthmeter/lib/lang/se_strengthmeter.lng b/interface/web/strengthmeter/lib/lang/se_strengthmeter.lng
index 16dcfff..7fb81bf 100644
--- a/interface/web/strengthmeter/lib/lang/se_strengthmeter.lng
+++ b/interface/web/strengthmeter/lib/lang/se_strengthmeter.lng
@@ -6,4 +6,3 @@
$wb['password_strength_4_txt'] = 'Starkt';
$wb['password_strength_5_txt'] = 'Mycket starkt';
?>
-
diff --git a/interface/web/themes/blue/ispconfig_version b/interface/web/themes/blue/ispconfig_version
index ec33020..0b23ab9 100644
--- a/interface/web/themes/blue/ispconfig_version
+++ b/interface/web/themes/blue/ispconfig_version
@@ -1 +1 @@
-3.0.5.4p1
+3.0.5.4p2
diff --git a/interface/web/themes/blue/templates/main.tpl.htm b/interface/web/themes/blue/templates/main.tpl.htm
index 70c4f26..0007256 100644
--- a/interface/web/themes/blue/templates/main.tpl.htm
+++ b/interface/web/themes/blue/templates/main.tpl.htm
@@ -161,6 +161,7 @@
<!-- begin: #content -->
<section id="content">
<form method="post" action="" id="pageForm" name="pageForm" enctype="multipart/form-data" class="uniForm">
+ <input type="text" style="display:none" /><input type="password" style="display:none"/>
<div id="pageContent"><!-- AJAX CONTENT --></div>
</form>
<div id="ie_clearing"> </div>
diff --git a/interface/web/themes/default-304/templates/main.tpl.htm b/interface/web/themes/default-304/templates/main.tpl.htm
index 862693b..7f227e1 100644
--- a/interface/web/themes/default-304/templates/main.tpl.htm
+++ b/interface/web/themes/default-304/templates/main.tpl.htm
@@ -168,6 +168,7 @@
<a id="content" name="content"></a>
<!-- skiplink anchor: Content -->
<form method="post" action="" id="pageForm" name="pageForm" enctype="multipart/form-data" class="uniForm">
+ <input type="text" style="display:none" /><input type="password" style="display:none"/>
<div id="pageContent"><!-- AJAX CONTENT --></div>
</form>
</div>
diff --git a/interface/web/themes/default/templates/main.tpl.htm b/interface/web/themes/default/templates/main.tpl.htm
index 9146291..3339d9f 100644
--- a/interface/web/themes/default/templates/main.tpl.htm
+++ b/interface/web/themes/default/templates/main.tpl.htm
@@ -164,6 +164,7 @@
<!-- begin: #content -->
<section id="content">
<form method="post" action="" id="pageForm" name="pageForm" enctype="multipart/form-data" class="uniForm">
+ <input type="text" style="display:none" /><input type="password" style="display:none"/>
<div id="pageContent"><!-- AJAX CONTENT --></div>
</form>
<div id="ie_clearing"> </div>
diff --git a/interface/web/themes/default_64_navimg/templates/main.tpl.htm b/interface/web/themes/default_64_navimg/templates/main.tpl.htm
index c0180e1..6d0395b 100644
--- a/interface/web/themes/default_64_navimg/templates/main.tpl.htm
+++ b/interface/web/themes/default_64_navimg/templates/main.tpl.htm
@@ -168,6 +168,7 @@
<a id="content" name="content"></a>
<!-- skiplink anchor: Content -->
<form method="post" action="" id="pageForm" name="pageForm" enctype="multipart/form-data" class="uniForm">
+ <input type="text" style="display:none" /><input type="password" style="display:none"/>
<div id="pageContent"><!-- AJAX CONTENT --></div>
</form>
</div>
diff --git a/interface/web/themes/default_combobox/templates/main.tpl.htm b/interface/web/themes/default_combobox/templates/main.tpl.htm
index 142794e..1df185f 100644
--- a/interface/web/themes/default_combobox/templates/main.tpl.htm
+++ b/interface/web/themes/default_combobox/templates/main.tpl.htm
@@ -323,6 +323,7 @@
<a id="content" name="content"></a>
<!-- skiplink anchor: Content -->
<form method="post" action="" id="pageForm" name="pageForm" enctype="multipart/form-data" class="uniForm">
+ <input type="text" style="display:none" /><input type="password" style="display:none"/>
<div id="pageContent"><!-- AJAX CONTENT --></div>
</form>
</div>
diff --git a/interface/web/themes/default_no_navimg/templates/main.tpl.htm b/interface/web/themes/default_no_navimg/templates/main.tpl.htm
index 5f45a0a..adfc656 100644
--- a/interface/web/themes/default_no_navimg/templates/main.tpl.htm
+++ b/interface/web/themes/default_no_navimg/templates/main.tpl.htm
@@ -169,6 +169,7 @@
<a id="content" name="content"></a>
<!-- skiplink anchor: Content -->
<form method="post" action="" id="pageForm" name="pageForm" enctype="multipart/form-data" class="uniForm">
+ <input type="text" style="display:none" /><input type="password" style="display:none"/>
<div id="pageContent"><!-- AJAX CONTENT --></div>
</form>
</div>
diff --git a/interface/web/tools/lib/lang/se.lng b/interface/web/tools/lib/lang/se.lng
index 5c93f2b..e6da742 100644
--- a/interface/web/tools/lib/lang/se.lng
+++ b/interface/web/tools/lib/lang/se.lng
@@ -11,4 +11,3 @@
$wb['PDNS Tupa'] = 'PowerDNS Tupa';
$wb['Interface'] = 'Interface';
?>
-
diff --git a/interface/web/tools/lib/lang/se_import_ispconfig.lng b/interface/web/tools/lib/lang/se_import_ispconfig.lng
index 0aad8ad..17ddae9 100644
--- a/interface/web/tools/lib/lang/se_import_ispconfig.lng
+++ b/interface/web/tools/lib/lang/se_import_ispconfig.lng
@@ -21,4 +21,3 @@
$wb['import_user_filter_txt'] = 'Importera användarfilter';
$wb['import_spamfilter_txt'] = 'Importera spamfilter';
?>
-
diff --git a/interface/web/tools/lib/lang/se_index.lng b/interface/web/tools/lib/lang/se_index.lng
index cf5012f..e395435 100644
--- a/interface/web/tools/lib/lang/se_index.lng
+++ b/interface/web/tools/lib/lang/se_index.lng
@@ -2,4 +2,3 @@
$wb['page_head_txt'] = 'ISPConfig verktyg';
$wb['page_desc_txt'] = 'Ändra användarinställningar';
?>
-
diff --git a/interface/web/tools/lib/lang/se_interface.lng b/interface/web/tools/lib/lang/se_interface.lng
index 8336796..9a66f59 100644
--- a/interface/web/tools/lib/lang/se_interface.lng
+++ b/interface/web/tools/lib/lang/se_interface.lng
@@ -5,4 +5,3 @@
$wb['startmodule_txt'] = 'Startmodul';
$wb['app_theme_txt'] = 'Design';
?>
-
diff --git a/interface/web/tools/lib/lang/se_tpl_default.lng b/interface/web/tools/lib/lang/se_tpl_default.lng
index 4c0fd71..013666e 100644
--- a/interface/web/tools/lib/lang/se_tpl_default.lng
+++ b/interface/web/tools/lib/lang/se_tpl_default.lng
@@ -5,4 +5,3 @@
$wb['btn_start_txt'] = 'Spara';
$wb['btn_cancel_txt'] = 'Tillbaka';
?>
-
diff --git a/interface/web/tools/lib/lang/se_usersettings.lng b/interface/web/tools/lib/lang/se_usersettings.lng
index 85176ac..f7e05e9 100644
--- a/interface/web/tools/lib/lang/se_usersettings.lng
+++ b/interface/web/tools/lib/lang/se_usersettings.lng
@@ -10,4 +10,3 @@
$wb['password_mismatch_txt'] = 'Lösenorden matchar inte';
$wb['password_match_txt'] = 'Lösenorden matchar';
?>
-
diff --git a/interface/web/vm/lib/lang/se.lng b/interface/web/vm/lib/lang/se.lng
index 5c1ab58..4167e14 100644
--- a/interface/web/vm/lib/lang/se.lng
+++ b/interface/web/vm/lib/lang/se.lng
@@ -5,4 +5,3 @@
$wb['IP addresses'] = 'IP addresses';
$wb['OpenVZ'] = 'OpenVZ';
?>
-
diff --git a/interface/web/vm/lib/lang/se_openvz_action.lng b/interface/web/vm/lib/lang/se_openvz_action.lng
index 71e7263..52f7328 100644
--- a/interface/web/vm/lib/lang/se_openvz_action.lng
+++ b/interface/web/vm/lib/lang/se_openvz_action.lng
@@ -14,4 +14,3 @@
$wb['ostemplate_name_unique_error'] = 'There is already a OSTemplate with that name.';
$wb['ostemplate_exec_txt'] = 'The command to create a OSTemplate has been sent to the host server. It will take several minutes until the OSTemplate has been created.';
?>
-
diff --git a/interface/web/vm/lib/lang/se_openvz_ip.lng b/interface/web/vm/lib/lang/se_openvz_ip.lng
index 67f6885..6016681 100644
--- a/interface/web/vm/lib/lang/se_openvz_ip.lng
+++ b/interface/web/vm/lib/lang/se_openvz_ip.lng
@@ -7,4 +7,3 @@
$wb['ip_error_unique'] = 'This IP address does already exist.';
$wb['IP address'] = 'IP address';
?>
-
diff --git a/interface/web/vm/lib/lang/se_openvz_ip_list.lng b/interface/web/vm/lib/lang/se_openvz_ip_list.lng
index 37c1d62e..e6a3a68 100644
--- a/interface/web/vm/lib/lang/se_openvz_ip_list.lng
+++ b/interface/web/vm/lib/lang/se_openvz_ip_list.lng
@@ -5,4 +5,3 @@
$wb['reserved_txt'] = 'Reserved';
$wb['vm_id_txt'] = 'VM';
?>
-
diff --git a/interface/web/vm/lib/lang/se_openvz_ostemplate.lng b/interface/web/vm/lib/lang/se_openvz_ostemplate.lng
index bfeb299..256750f 100644
--- a/interface/web/vm/lib/lang/se_openvz_ostemplate.lng
+++ b/interface/web/vm/lib/lang/se_openvz_ostemplate.lng
@@ -9,4 +9,3 @@
$wb['template_file_error_empty'] = 'Template filename is empty.';
$wb['Template'] = 'Template';
?>
-
diff --git a/interface/web/vm/lib/lang/se_openvz_ostemplate_list.lng b/interface/web/vm/lib/lang/se_openvz_ostemplate_list.lng
index df01680..6471ec0 100644
--- a/interface/web/vm/lib/lang/se_openvz_ostemplate_list.lng
+++ b/interface/web/vm/lib/lang/se_openvz_ostemplate_list.lng
@@ -6,4 +6,3 @@
$wb['allservers_txt'] = 'Exists on all servers';
$wb['ostemplate_id_txt'] = 'ID';
?>
-
diff --git a/interface/web/vm/lib/lang/se_openvz_template.lng b/interface/web/vm/lib/lang/se_openvz_template.lng
index 0887164..d285512 100644
--- a/interface/web/vm/lib/lang/se_openvz_template.lng
+++ b/interface/web/vm/lib/lang/se_openvz_template.lng
@@ -91,4 +91,3 @@
$wb['Template'] = 'Template';
$wb['Advanced'] = 'Advanced';
?>
-
diff --git a/interface/web/vm/lib/lang/se_openvz_template_list.lng b/interface/web/vm/lib/lang/se_openvz_template_list.lng
index 6e4d911..de4045c 100644
--- a/interface/web/vm/lib/lang/se_openvz_template_list.lng
+++ b/interface/web/vm/lib/lang/se_openvz_template_list.lng
@@ -3,4 +3,3 @@
$wb['active_txt'] = 'Active';
$wb['template_name_txt'] = 'Template name';
?>
-
diff --git a/interface/web/vm/lib/lang/se_openvz_vm.lng b/interface/web/vm/lib/lang/se_openvz_vm.lng
index 4698fe6..f2be022 100644
--- a/interface/web/vm/lib/lang/se_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/se_openvz_vm.lng
@@ -38,4 +38,3 @@
$wb['Virtual server'] = 'Virtual server';
$wb['Advanced'] = 'Advanced';
?>
-
diff --git a/interface/web/vm/lib/lang/se_openvz_vm_list.lng b/interface/web/vm/lib/lang/se_openvz_vm_list.lng
index a534a65..2238e2b 100644
--- a/interface/web/vm/lib/lang/se_openvz_vm_list.lng
+++ b/interface/web/vm/lib/lang/se_openvz_vm_list.lng
@@ -8,4 +8,3 @@
$wb['ip_address_txt'] = 'IP address';
$wb['veid_txt'] = 'VEID';
?>
-
diff --git a/server/conf/apache_ispconfig.conf.master b/server/conf/apache_ispconfig.conf.master
index be6f637..6b2accb 100644
--- a/server/conf/apache_ispconfig.conf.master
+++ b/server/conf/apache_ispconfig.conf.master
@@ -3,7 +3,7 @@
# ISPConfig Logfile configuration for vlogger
################################################
-LogFormat "%v %h %l %u %t \"%r\" %>s %B \"%{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
<Directory /var/www/clients>
diff --git a/server/conf/apps_php_fpm_pool.conf.master b/server/conf/apps_php_fpm_pool.conf.master
index ce6a92f..7997e9b 100644
--- a/server/conf/apps_php_fpm_pool.conf.master
+++ b/server/conf/apps_php_fpm_pool.conf.master
@@ -9,7 +9,7 @@
group = {fpm_group}
pm = dynamic
-pm.max_children = 50
+pm.max_children = 500
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 5
diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index 5a110cc..96b3443 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -57,6 +57,10 @@
</IfModule>
<Directory {tmpl_var name='web_document_root_www'}>
+ # Clear PHP settings of this website
+ <FilesMatch ".+\.ph(p[345]?|t|tml)$">
+ SetHandler None
+ </FilesMatch>
Options +FollowSymLinks
AllowOverride <tmpl_var name='allow_override'>
<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
@@ -85,6 +89,10 @@
</tmpl_if>
</Directory>
<Directory {tmpl_var name='web_document_root'}>
+ # Clear PHP settings of this website
+ <FilesMatch ".+\.ph(p[345]?|t|tml)$">
+ SetHandler None
+ </FilesMatch>
Options +FollowSymLinks
AllowOverride <tmpl_var name='allow_override'>
<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
@@ -186,10 +194,6 @@
SuexecUserGroup <tmpl_var name='system_user'> <tmpl_var name='system_group'>
</IfModule>
</tmpl_if>
- # Clear PHP settings of this website
- <FilesMatch ".+\.ph(p[345]?|t|tml)$">
- SetHandler None
- </FilesMatch>
<tmpl_if name='php' op='==' value='mod'>
# mod_php enabled
AddType application/x-httpd-php .php .php3 .php4 .php5
@@ -221,9 +225,16 @@
# php as cgi enabled
ScriptAlias /php5-cgi <tmpl_var name='cgi_starter_path'><tmpl_var name='cgi_starter_script'>
Action php5-cgi /php5-cgi
- <FilesMatch "\.php[345]?$">
- SetHandler php5-cgi
- </FilesMatch>
+ <Directory {tmpl_var name='web_document_root_www'}>
+ <FilesMatch "\.php[345]?$">
+ SetHandler php5-cgi
+ </FilesMatch>
+ </Directory>
+ <Directory {tmpl_var name='web_document_root'}>
+ <FilesMatch "\.php[345]?$">
+ SetHandler php5-cgi
+ </FilesMatch>
+ </Directory>
<Directory {tmpl_var name='cgi_starter_path'}>
<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
Require all granted
@@ -304,9 +315,16 @@
Allow from all
</tmpl_if>
</Directory>
- <FilesMatch "\.php[345]?$">
- SetHandler php5-fcgi
- </FilesMatch>
+ <Directory {tmpl_var name='web_document_root_www'}>
+ <FilesMatch "\.php[345]?$">
+ SetHandler php5-fcgi
+ </FilesMatch>
+ </Directory>
+ <Directory {tmpl_var name='web_document_root'}>
+ <FilesMatch "\.php[345]?$">
+ SetHandler php5-fcgi
+ </FilesMatch>
+ </Directory>
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi {tmpl_var name='document_root'}/cgi-bin/php5-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'}
<tmpl_if name='use_tcp'>
@@ -336,7 +354,7 @@
RewriteCond %{REQUEST_URI} !^<tmpl_var name='rewrite_target'>
</tmpl_if>
- RewriteRule ^/(.*)$ <tmpl_var name='rewrite_target'><tmpl_if name="rewrite_add_path" op="==" value="y">$1</tmpl_if> <tmpl_if name='rewrite_type' value=''><tmpl_if name="rewrite_is_url" op="==" value="n">[PT]</tmpl_if></tmpl_else><tmpl_var name='rewrite_type'></tmpl_if>
+ RewriteRule ^/(.*)$ <tmpl_var name='rewrite_target'><tmpl_if name="rewrite_add_path" op="==" value="y">$1</tmpl_if> <tmpl_var name='rewrite_type'>
</tmpl_loop>
</tmpl_if>
diff --git a/server/cron_daily.php b/server/cron_daily.php
index b9b3432..ee54a46 100644
--- a/server/cron_daily.php
+++ b/server/cron_daily.php
@@ -647,7 +647,7 @@
// function for sending notification emails
//########
function send_notification_email($template, $placeholders, $recipients) {
- global $conf;
+ global $conf, $app;
if(!is_array($recipients) || count($recipients) < 1) return false;
if(!is_array($placeholders)) $placeholders = array();
@@ -1104,10 +1104,14 @@
//* mount backup directory, if necessary
$run_backups = true;
- $server_config['backup_dir_mount_cmd'] = trim($server_config['backup_dir_mount_cmd']);
- if($server_config['backup_dir_is_mount'] == 'y' && $server_config['backup_dir_mount_cmd'] != ''){
+ $backup_dir_mount_cmd = '/usr/local/ispconfig/server/scripts/backup_dir_mount.sh';
+ if( $server_config['backup_dir_is_mount'] == 'y' &&
+ is_file($backup_dir_mount_cmd) &&
+ is_executable($backup_dir_mount_cmd) &&
+ fileowner($backup_dir_mount_cmd) === 0
+ ){
if(!$app->system->is_mounted($backup_dir)){
- exec(escapeshellcmd($server_config['backup_dir_mount_cmd']));
+ exec($backup_dir_mount_cmd);
sleep(1);
if(!$app->system->is_mounted($backup_dir)) $run_backups = false;
}
diff --git a/server/lib/classes/ispcmail.inc.php b/server/lib/classes/ispcmail.inc.php
new file mode 100644
index 0000000..930aabb
--- /dev/null
+++ b/server/lib/classes/ispcmail.inc.php
@@ -0,0 +1,869 @@
+<?php
+
+/*
+Copyright (c) 2012, Marius Cramer, pixcept KG
+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.
+*/
+
+/**
+ * email class
+ *
+ * @package pxFramework
+ *
+ */
+
+
+class ispcmail {
+
+ /**#@+
+ * @access private
+ */
+ private $html_part;
+ private $text_part;
+
+ private $headers;
+
+ private $_logged_in = false;
+ private $_smtp_conn = null;
+
+ private $_crlf = "\n";
+
+ private $attach_type = 'application/octet-stream';
+ private $attachments;
+ private $mime_boundary;
+ private $body = '';
+ private $_mail_sender = '';
+ private $_sent_mails = 0;
+ private $user_agent = 'ISPConfig/3 (Mailer Class)';
+ /**#@-*/
+
+
+
+ /**
+ * set the mail charset
+ */
+ private $mail_charset = 'UTF-8';//'ISO-8859-1';
+
+ /**#@+
+ * Provide smtp credentials for smtp mail sending
+ *
+ * @access public
+ */
+
+ /**
+ * if set to true smtp is used instead of mail() to send emails
+ * @see mail
+ */
+ private $use_smtp = false;
+
+ /**
+ * the smtp helo string - use the mail server name here!
+ */
+ private $smtp_helo = '';
+
+ /**
+ * the smtp server to send mails
+ */
+ private $smtp_host = '';
+
+ /**
+ * the smtp port
+ */
+ private $smtp_port = 25;
+
+ /**
+ * if the smtp server needs authentication you can set the smtp user here
+ */
+ private $smtp_user = '';
+
+ /**
+ * if the smtp server needs authentication you can set the smtp password here
+ */
+ private $smtp_pass = '';
+
+ /**
+ * If you want to use tls/ssl specify it here
+ */
+ private $smtp_crypt = ''; // tls or ssl
+ /**
+ * How many mails should be sent via one single smtp connection
+ */
+ private $smtp_max_mails = 20;
+
+ /**
+ * Should the mail be signed
+ */
+ private $sign_email = false;
+
+ /**
+ * The cert and key to use for email signing
+ */
+ private $sign_key = '';
+ private $sign_key_pass = '';
+ private $sign_cert = '';
+ private $sign_bundle = '';
+ private $_is_signed = false;
+
+ /**
+ * get disposition notification
+ */
+ private $notification = false;
+ /**#@-*/
+
+ public function __construct($options = array()) {
+ $rand = md5(microtime());
+ $this->mime_boundary = '==Multipart_Boundary_x' . $rand . 'x';
+
+ $this->headers = array();
+ $this->attachments = array();
+
+ $this->headers['MIME-Version'] = '1.0';
+ $this->headers['User-Agent'] = $this->user_agent;
+ if(is_array($options) && count($options) > 0) $this->setOptions($options);
+ }
+
+ public function __destruct() {
+ $this->finish();
+ }
+
+
+
+ /**
+ * Set option
+ *
+ * @param string $key the option to set
+ * @param string $value the option value to set
+ */
+ public function setOption($key, $value) {
+ switch($key) {
+ case 'smtp_helo':
+ $this->smtp_helo = $value;
+ break;
+ case 'smtp_host':
+ $this->smtp_host = $value;
+ break;
+ case 'smtp_server':
+ $this->smtp_host = $value;
+ break;
+ case 'smtp_port':
+ $this->smtp_port = $value;
+ break;
+ case 'smtp_user':
+ $this->smtp_user = $value;
+ break;
+ case 'smtp_pass':
+ $this->smtp_pass = $value;
+ break;
+ case 'smtp_max_mails':
+ $this->smtp_max_mails = intval($value);
+ if($this->smtp_max_mails < 1) $this->smtp_max_mails = 1;
+ break;
+ case 'use_smtp':
+ $this->use_smtp = ($value == true ? true : false);
+ if($value == true) $this->_crlf = "\r\n";
+ break;
+ case 'smtp_crypt':
+ if($value != 'ssl' && $value != 'tls') $value = '';
+ $this->smtp_crypt = $value;
+ break;
+ case 'sign_email':
+ $this->sign_email = ($value == true ? true : false);
+ break;
+ case 'sign_key':
+ $this->sign_key = $value;
+ break;
+ case 'sign_key_pass':
+ $this->sign_key_pass = $value;
+ break;
+ case 'sign_cert':
+ $this->sign_cert = $value;
+ break;
+ case 'sign_bundle':
+ $this->sign_bundle = $value;
+ break;
+ case 'mail_charset':
+ $this->mail_charset = $value;
+ break;
+ case 'notify':
+ $this->notification = ($value == true ? true : false);
+ break;
+ }
+ }
+
+
+
+ /** Detect the helo string if none given
+ *
+ */
+ private function detectHelo() {
+ if(isset($_SERVER['HTTP_HOST'])) $this->smtp_helo = (strpos($_SERVER['HTTP_HOST'], ':') !== false ? substr($_SERVER['HTTP_HOST'], 0, strpos($_SERVER['HTTP_HOST'], ':')) : $_SERVER['HTTP_HOST']);
+ elseif(isset($_SERVER['SERVER_NAME'])) $this->smtp_helo = $_SERVER['SERVER_NAME'];
+ else $this->smtp_helo = php_uname('n');
+ if($this->smtp_helo == '') $this->smtp_helo = 'localhost';
+ return $this->smtp_helo;
+ }
+
+
+
+ /**
+ * Set options
+ *
+ * @param array $options the options to set as an associative array key => value
+ */
+ public function setOptions($options) {
+ foreach($options as $key => $value) $this->setOption($key, $value);
+ }
+
+
+
+ /**
+ * Read a file's contents
+ *
+ * Simply gets the file's content
+ *
+ * @access public
+ * @param string $filename name and path of file to read
+ * @return string file content (can be binary)
+ */
+ public function read_File($filename) {
+ $content = '';
+
+ $fp = fopen($filename, 'r');
+ if(!$fp) return false;
+
+ while(!feof($fp)) {
+ $content .= fread($fp, 1024);
+ }
+ fclose($fp);
+
+ return $content;
+ }
+
+
+
+ /**
+ * set smtp connection encryption
+ *
+ * @access public
+ * @param string $mode encryption mode (tls, ssl or empty string)
+ */
+ public function setSMTPEncryption($mode = '') {
+ if($mode != 'ssl' && $mode != 'tls') $mode = '';
+ $this->smtp_crypt = $mode;
+ }
+
+ /**
+ * set a mail header
+ *
+ * Sets a single mail header to a given value
+ *
+ * @access public
+ * @param string $header header name to set
+ * @param string $value value to set in header field
+ */
+ public function setHeader($header, $value) {
+ if(strtolower($header) == 'bcc') $header = 'Bcc';
+ elseif(strtolower($header) == 'cc') $header = 'Cc';
+ elseif(strtolower($header) == 'from') $header = 'From';
+ $this->headers["$header"] = $value;
+ }
+
+
+
+ /**
+ * get a mail header value
+ *
+ * Returns a value of a single mail header
+ *
+ * @access public
+ * @param string $header header name to get
+ * @return string header value
+ */
+ public function getHeader($header) {
+ if(strtolower($header) == 'bcc') $header = 'Bcc';
+ elseif(strtolower($header) == 'cc') $header = 'Cc';
+ elseif(strtolower($header) == 'from') $header = 'From';
+ return isset($this->headers["$header"]) ? $this->headers["$header"] : '';
+ }
+
+
+
+ /**
+ * Set email sender
+ *
+ * Sets the email sender and optionally the sender's name
+ *
+ * @access public
+ * @param string $email sender email address
+ * @param string $name sender name
+ */
+ public function setSender($email, $name = '') {
+ if($name) $header = '"' . $name . '" <' . $email . '>';
+ else $header = '<' . $email . '>';
+
+ $this->_mail_sender = $email;
+
+ $this->setHeader('From', $header);
+ }
+
+
+
+ /**
+ * Set mail subject
+ *
+ * @access public
+ * @param string $subject the mail subject
+ * @return string where-string for db query
+ */
+ public function setSubject($subject) {
+ $this->setHeader('Subject', $subject);
+ }
+
+
+
+ /**
+ * Get current mail subject
+ *
+ * @access public
+ * @return string mail subject
+ */
+ public function getSubject() {
+ return $this->headers['Subject'];
+ }
+
+
+
+ /**
+ * Set mail content
+ *
+ * Sets the mail html and plain text content
+ *
+ * @access public
+ * @param string $text plain text mail content (can be empty)
+ * @param string $html html mail content
+ */
+ public function setMailText($text, $html = '') {
+ $this->text_part = $text;
+ $this->html_part = $html;
+ }
+
+
+
+ /**
+ * Read and attach a file
+ *
+ * Reads a file and attaches it to the current email
+ *
+ * @access public
+ * @param string $filename the file to read and attach
+ * @param string $display_name the name that will be displayed in the mail
+ * @see read_File
+ */
+ public function readAttachFile($filename, $display_name = '') {
+ if($display_name == '') {
+ $path_parts = pathinfo($filename);
+ $display_name = $path_parts["basename"];
+ unset($path_parts);
+ }
+ $this->attachFile($this->read_File($filename), $display_name);
+ }
+
+
+
+ /**
+ * Attach a file
+ *
+ * Attaches a string (can be binary) as a file to the mail
+ *
+ * @access public
+ * @param string $content attachment data string
+ * @param string $filename name for file attachment
+ */
+ public function attachFile($content, $filename) {
+ $attachment = array('content' => $content,
+ 'filename' => $filename,
+ 'type' => 'application/octet-stream',
+ 'encoding' => 'base64'
+ );
+ $this->attachments[] = $attachment;
+ }
+
+
+
+ /**
+ * @access private
+ */
+ private function create() {
+ $attach = false;
+ $html = false;
+ $text = false;
+
+ if($this->html_part) $html = true;
+ if($this->text_part) $text = true;
+ if(count($this->attachments) > 0) $attach = true;
+
+ $textonly = false;
+ $htmlonly = false;
+ if($text == true && $html == false && $attach == false) {
+ // only text
+ $content_type = 'text/plain; charset="' . strtolower($this->mail_charset) . '"';
+ $textonly = true;
+ } elseif($text == true && $html == false && $attach == true) {
+ // text and attachment
+ $content_type = 'multipart/mixed;';
+ $content_type .= "\n" . ' boundary="' . $this->mime_boundary . '"';
+ } elseif($html == true && $text == true && $attach == false) {
+ // html only (or text too)
+ $content_type = 'multipart/alternative;';
+ $content_type .= "\n" . ' boundary="' . $this->mime_boundary . '"';
+ } elseif($html == true && $text == false && $attach == false) {
+ // html only (or text too)
+ $content_type = 'text/html; charset="' . strtolower($this->mail_charset) . '"';
+ $htmlonly = true;
+ } elseif($html == true && $attach == true) {
+ // html and attachments
+ $content_type = 'multipart/mixed;';
+ $content_type .= "\n" . ' boundary="' . $this->mime_boundary . '"';
+ }
+
+ $this->headers['Content-Type'] = $content_type;
+
+ if($textonly == false && $htmlonly == false) {
+ $this->body = "This is a multi-part message in MIME format.\n\n";
+
+ if($text) {
+ /*$this->body .= "--{$this->mime_boundary}\n" .
+ "Content-Type:text/plain; charset=\"" . strtolower($this->mail_charset) . "\"\n" .
+ "Content-Transfer-Encoding: 7bit\n\n" . $this->text_part . "\n\n";*/
+ $this->body .= "--{$this->mime_boundary}\n" .
+ "Content-Type:text/plain; charset=\"UTF-8\"\n" .
+ "Content-Transfer-Encoding: 8bit\n\n" . $this->text_part . "\n\n";
+ }
+
+ if($html) {
+ /*$this->body .= "--{$this->mime_boundary}\n" .
+ "Content-Type:text/html; charset=\"" . strtolower($this->mail_charset) . "\"\n" .
+ "Content-Transfer-Encoding: 7bit\n\n" . $this->html_part . "\n\n";*/
+ $this->body .= "--{$this->mime_boundary}\n" .
+ "Content-Type:text/html; charset=\"UTF-8\"\n" .
+ "Content-Transfer-Encoding: 8bit\n\n" . $this->html_part . "\n\n";
+ }
+
+ if($attach) {
+ foreach($this->attachments as $att) {
+ $this->body .= "--{$this->mime_boundary}\n" .
+ "Content-Type: " . $att['type'] . ";\n" .
+ " name=\"" . $att['filename'] . "\"\n" .
+ "Content-Transfer-Encoding: base64\n" .
+ "Content-Disposition: attachment;\n\n" .
+ chunk_split(base64_encode($att['content'])) . "\n\n";
+ }
+ }
+ $this->body .= "--{$this->mime_boundary}--\n";
+ } elseif($htmlonly == true) {
+ $this->body = $this->html_part;
+ } else {
+ $this->body = $this->text_part;
+ }
+
+ if (isset($this->body)) {
+ // Add message ID header
+ $message_id = sprintf('<%s.%s@%s>', base_convert(time(), 10, 36), base_convert(rand(), 10, 36), $this->smtp_helo != '' ? $this->smtp_helo : $this->detectHelo());
+ $this->headers['Message-ID'] = $message_id;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+
+
+ /**
+ * Function to sign an email body
+ */
+ private function sign() {
+ if($this->sign_email == false || $this->sign_key == '' || $this->sign_cert == '') return false;
+ if(function_exists('openssl_pkcs7_sign') == false) return false;
+
+ $tmpin = tempnam(sys_get_temp_dir(), 'sign');
+ $tmpout = tempnam(sys_get_temp_dir(), 'sign');
+ if(!file_exists($tmpin) || !is_writable($tmpin)) return false;
+
+ file_put_contents($tmpin, 'Content-Type: ' . $this->getHeader('Content-Type') . "\n\n" . $this->body);
+ $tmpf_key = tempnam(sys_get_temp_dir(), 'sign');
+ file_put_contents($tmpf_key, $this->sign_key);
+ $tmpf_cert = tempnam(sys_get_temp_dir(), 'sign');
+ file_put_contents($tmpf_cert, $this->sign_cert);
+ if($this->sign_bundle != '') {
+ $tmpf_bundle = tempnam(sys_get_temp_dir(), 'sign');
+ file_put_contents($tmpf_bundle, $this->sign_bundle);
+ openssl_pkcs7_sign($tmpin, $tmpout, 'file://' . realpath($tmpf_cert), array('file://' . realpath($tmpf_key), $this->sign_key_pass), array(), PKCS7_DETACHED, realpath($tmpf_bundle));
+ } else {
+ openssl_pkcs7_sign($tmpin, $tmpout, 'file://' . realpath($tmpf_cert), array('file://' . realpath($tmpf_key), $this->sign_key_pass), array());
+ }
+ unlink($tmpin);
+ unlink($tmpf_cert);
+ unlink($tmpf_key);
+ if(file_exists($tmpf_bundle)) unlink($tmpf_bundle);
+
+ if(!file_exists($tmpout) || !is_readable($tmpout)) return false;
+ $this->body = file_get_contents($tmpout);
+ unlink($tmpout);
+
+ unset($this->headers['Content-Type']);
+ unset($this->headers['MIME-Version']);
+
+ $this->_is_signed = true;
+ }
+
+ private function _char_to_hex($matches) {
+ return '=' . strtoupper(dechex(ord($matches[1])));
+ }
+
+
+
+ /**
+ * Function to encode a header if necessary
+ * according to RFC2047
+ * @access private
+ */
+ private function _encodeHeader($input, $charset = 'ISO-8859-1') {
+ preg_match_all('/(\s?\w*[\x80-\xFF]+\w*\s?)/', $input, $matches);
+ foreach ($matches[1] as $value) {
+ $replacement = preg_replace_callback('/([\x20\x80-\xFF])/', array($this, '_char_to_hex'), $value);
+ $input = str_replace($value, '=?' . $charset . '?Q?' . $replacement . '?=', $input);
+ }
+
+ return $input;
+ }
+
+
+
+ /**
+ * Function to encode the subject if necessary
+ * according to RFC2047
+ * @access private
+ */
+ private function _encodeSubject($input, $charset = 'ISO-8859-1') {
+ /*
+ if($charset == 'UTF-8' && function_exists('imap_8bit')) {
+ $input = "=?utf-8?Q?" . imap_8bit($input) . "?=";
+ } else {
+ preg_match_all('/(\s?\w*[\x80-\xFF]+\w*\s?)/', $input, $matches);
+ foreach ($matches[1] as $value) {
+ $replacement = preg_replace('/([\x20\x80-\xFF])/e', '"=" . strtoupper(dechex(ord("\1")))', $value);
+ $input = str_replace($value, '=?' . $charset . '?Q?' . $replacement . '?=', $input);
+ }
+ }*/
+ $input='=?UTF-8?B?'.base64_encode($input).'?=';
+
+ return $input;
+ }
+
+
+
+ /**
+ * @access private
+ */
+ private function _smtp_login() {
+ $this->_smtp_conn = fsockopen(($this->smtp_crypt == 'ssl' ? 'ssl://' : '') . $this->smtp_host, $this->smtp_port, $errno, $errstr, 30);
+ $response = fgets($this->_smtp_conn, 515);
+ if(empty($this->_smtp_conn)) return false;
+
+ //Say Hello to SMTP
+ if($this->smtp_helo == '') $this->detectHelo();
+ fputs($this->_smtp_conn, 'HELO ' . $this->smtp_helo . $this->_crlf);
+ $response = fgets($this->_smtp_conn, 515);
+
+ // ENCRYPTED?
+ if($this->smtp_crypt == 'tls') {
+ fputs($this->_smtp_conn, 'STARTTLS' . $this->_crlf);
+ fgets($this->_smtp_conn, 515);
+ stream_socket_enable_crypto($this->_smtp_conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
+ }
+
+ //AUTH LOGIN
+ fputs($this->_smtp_conn, 'AUTH LOGIN' . $this->_crlf);
+ $response = fgets($this->_smtp_conn, 515);
+
+ //Send username
+ fputs($this->_smtp_conn, base64_encode($this->smtp_user) . $this->_crlf);
+ $response = fgets($this->_smtp_conn, 515);
+
+ //Send password
+ fputs($this->_smtp_conn, base64_encode($this->smtp_pass) . $this->_crlf);
+ $response = fgets($this->_smtp_conn, 515);
+
+ $this->_logged_in = true;
+ return true;
+ }
+
+
+
+ /**
+ * @access private
+ */
+ private function _smtp_close() {
+ $this->_logged_in = false;
+
+ if(empty($this->_smtp_conn)) {
+ return false;
+ }
+
+ fputs($this->_smtp_conn, 'QUIT' . $this->_crlf);
+ $response = @fgets($this->_smtp_conn, 515);
+ return true;
+ }
+
+ private function _extract_names($data) {
+ $senders = array();
+
+ $data = stripslashes(preg_replace("'(\t|\r|\n)'", '', $data));
+
+ if(trim($data) == '') return $senders;
+
+ $armail = array();
+ $counter = 0; $inthechar = 0;
+ $chartosplit = ',;'; $protectchar = '"'; $temp = '';
+ $closed = 1;
+
+ for($i = 0; $i < strlen($data); $i++) {
+ $thischar = $data[$i];
+ if($thischar == '<' && $closed) $closed = 0;
+ if($thischar == '>' && !$closed) $closed = 1;
+ if($thischar == $protectchar) $inthechar = ($inthechar) ? 0 : 1;
+ if((strpos($chartosplit, $thischar) !== false) && !$inthechar && $closed) {
+ $armail[] = $temp;
+ $temp = '';
+ } else {
+ $temp .= $thischar;
+ }
+ }
+
+ if(trim($temp) != '') {
+ $armail[] = trim($temp);
+ unset($temp);
+ }
+
+ foreach($armail as $thisPart) {
+ $thisPart = trim(preg_replace('/^"(.*)"$/i', '$1', trim($thisPart)));
+ if($thisPart != '') {
+ $email = '';
+ $name = '';
+ if(preg_match('/(.*)<(.*)>/i', $thisPart, $matches)) {
+ $email = trim($matches[2]);
+ $name = trim($matches[1]);
+ } else {
+ if(preg_match('/([-a-z0-9_$+.]+@[-a-z0-9_.]+[-a-z0-9_]+)((.*))/i', $thisPart, $matches)) {
+ $email = $matches[1];
+ $name = $matches[2];
+ } else {
+ $email = $thisPart;
+ }
+ }
+
+ $email = preg_replace('/<(.*)\\>/', '$1', $email);
+ $name = preg_replace('/"(.*)"/', '$1', trim($name));
+ $name = preg_replace('/\((.*)\)/', '$1', $name);
+
+ if($name == '') $name = $email;
+ if($email == '') $email = $name;
+ $senders[] = array(
+ 'name' => $name,
+ 'mail' => $email
+ );
+ unset($name);
+ unset($email);
+ }
+ }
+ unset($armail);
+ unset($thisPart);
+
+ return $senders;
+ }
+
+ /**
+ * Send the mail to one or more recipients
+ *
+ * The recipients can be either a string (1 recipient email without name) or an associative array of recipients with names as keys and email addresses as values.
+ *
+ * @access public
+ * @param mixed $recipients one email address or array of recipients with names as keys and email addresses as values
+ */
+ public function send($recipients) {
+ if(!is_array($recipients)) $recipients = array($recipients);
+
+ if($this->use_smtp == true) $this->_crlf = "\r\n";
+ else $this->_crlf = "\n";
+
+ $this->create();
+ if($this->sign_email == true) $this->sign();
+
+ $subject = '';
+ if (!empty($this->headers['Subject'])) {
+ //$subject = $this->_encodeHeader($this->headers['Subject'], $this->mail_charset);
+ $subject = $this->headers['Subject'];
+
+ //$enc_subject = $this->_encodeHeader($subject, $this->mail_charset);
+ $enc_subject = $this->_encodeSubject($subject, $this->mail_charset);
+ unset($this->headers['Subject']);
+ }
+
+ if($this->notification == true) $this->setHeader('Disposition-Notification-To', $this->getHeader('From'));
+
+ unset($this->headers['To']); // always reset the To header to prevent from sending to multiple users at once
+ $this->headers['Date'] = date('r'); //date('D, d M Y H:i:s O');
+
+ // Get flat representation of headers
+ foreach ($this->headers as $name => $value) {
+ if(strtolower($name) == 'to' || strtolower($name) == 'cc' || strtolower($name) == 'bcc') continue; // never add the To header
+ $headers[] = $name . ': ' . $this->_encodeHeader($value, $this->mail_charset);
+ }
+
+ if($this->use_smtp == true) {
+ if(!$this->_logged_in || !$this->_smtp_conn) {
+ $result = $this->_smtp_login();
+ if(!$result) return false;
+ }
+ $bcc_cc_sent = false;
+ foreach($recipients as $recipname => $recip) {
+ if($this->_sent_mails >= $this->smtp_max_mails) {
+ // close connection to smtp and reconnect
+ $this->_sent_mails = 0;
+ $this->_smtp_close();
+ $result = $this->_smtp_login();
+ if(!$result) return false;
+ }
+ $this->_sent_mails += 1;
+
+ $recipname = trim(str_replace('"', '', $recipname));
+ $recip = $this->_encodeHeader($recip, $this->mail_charset);
+ $recipname = $this->_encodeHeader($recipname, $this->mail_charset);
+
+ //Email From
+ fputs($this->_smtp_conn, 'MAIL FROM: <' . $this->_mail_sender . '>' . $this->_crlf);
+ $response = fgets($this->_smtp_conn, 515);
+
+ //Email To
+ fputs($this->_smtp_conn, 'RCPT TO: <' . $recip . '>' . $this->_crlf);
+ $response = fgets($this->_smtp_conn, 515);
+
+ if($bcc_cc_sent == false) {
+ $add_recips = array();
+ if($this->getHeader('Cc') != '') $add_recips = array_merge($add_recips, $this->_extract_names($this->getHeader('Cc')));
+ if($this->getHeader('Bcc') != '') $add_recips = array_merge($add_recips, $this->_extract_names($this->getHeader('Bcc')));
+ foreach($add_recips as $add_recip) {
+ if(!$add_recip['mail']) continue;
+ fputs($this->_smtp_conn, 'RCPT TO: <' . $this->_encodeHeader($add_recip['mail'], $this->mail_charset) . '>' . $this->_crlf);
+ $response = fgets($this->_smtp_conn, 515);
+ }
+ unset($add_recips);
+ $bcc_cc_sent = true;
+ }
+
+ //The Email
+ fputs($this->_smtp_conn, 'DATA' . $this->_crlf);
+ $response = fgets($this->_smtp_conn, 515);
+
+ //Construct Headers
+ if($recipname && !is_numeric($recipname)) $this->setHeader('To', $recipname . ' <' . $recip . '>');
+ else $this->setHeader('To', $recip);
+
+ $mail_content = 'Subject: ' . $enc_subject . $this->_crlf;
+ $mail_content .= 'To: ' . $this->getHeader('To') . $this->_crlf;
+ if($this->getHeader('Cc') != '') $mail_content .= 'Cc: ' . $this->_encodeHeader($this->getHeader('Cc'), $this->mail_charset) . $this->_crlf;
+ $mail_content .= implode($this->_crlf, $headers) . $this->_crlf . ($this->_is_signed == false ? $this->_crlf : '') . $this->body;
+
+ fputs($this->_smtp_conn, $mail_content . $this->_crlf . '.' . $this->_crlf);
+ $response = fgets($this->_smtp_conn, 515);
+
+ // hopefully message was correctly sent now
+ $result = true;
+ }
+ } else {
+ if($this->getHeader('Bcc') != '') $headers[] = 'Bcc: ' . $this->_encodeHeader($this->getHeader('Bcc'), $this->mail_charset);
+ if($this->getHeader('Cc') != '') $headers[] = 'Cc: ' . $this->_encodeHeader($this->getHeader('Cc'), $this->mail_charset);
+ $rec_string = '';
+ foreach($recipients as $recipname => $recip) {
+ $recipname = trim(str_replace('"', '', $recipname));
+
+ if($rec_string != '') $rec_string .= ', ';
+ if($recipname && !is_numeric($recipname)) $rec_string .= $recipname . '<' . $recip . '>';
+ else $rec_string .= $recip;
+ }
+ $to = $this->_encodeHeader($rec_string, $this->mail_charset);
+ //$result = mail($to, $subject, $this->body, implode($this->_crlf, $headers));
+ $result = mail($to, $enc_subject, $this->body, implode($this->_crlf, $headers));
+ }
+
+ // Reset the subject in case mail is resent
+ if ($subject !== '') {
+ $this->headers['Subject'] = $subject;
+ }
+
+ // Return
+ return $result;
+ }
+
+
+
+ /**
+ * Close mail connections
+ *
+ * This closes an open smtp connection so you should always call this function in your script if you have finished sending all emails
+ *
+ * @access public
+ */
+ public function finish() {
+ if($this->use_smtp == true) $this->_smtp_close();
+
+ $rand = md5(microtime());
+ $this->mime_boundary = '==Multipart_Boundary_x' . $rand . 'x';
+
+ $this->headers = array();
+ $this->attachments = array();
+ $this->text_part = '';
+ $this->html_part = '';
+
+ $this->headers['MIME-Version'] = '1.0';
+ $this->headers['User-Agent'] = $this->user_agent;
+
+ $this->smtp_helo = '';
+ $this->smtp_host = '';
+ $this->smtp_port = '';
+ $this->smtp_user = '';
+ $this->smtp_pass = '';
+ $this->use_smtp = false;
+ $this->smtp_crypt = false;
+ $this->mail_charset = 'UTF-8';
+ $this->_sent_mails = 0;
+
+ return;
+ }
+
+}
+
+?>
diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php
index 2170b5c..ae1fbd3 100644
--- a/server/lib/classes/monitor_tools.inc.php
+++ b/server/lib/classes/monitor_tools.inc.php
@@ -62,6 +62,15 @@
$mainver = array_filter($mainver);
$mainver = current($mainver).'.'.next($mainver);
switch ($mainver){
+ case "14.04":
+ $relname = "(Trusty Tahr)";
+ break;
+ case "13.10":
+ $relname = "(Saucy Salamander)";
+ break;
+ case "13.04":
+ $relname = "(Raring Ringtail)";
+ break;
case "12.10":
$relname = "(Quantal Quetzal)";
break;
@@ -201,6 +210,18 @@
$distver = '5.3';
$distid = 'centos53';
$distbaseid = 'fedora';
+ } elseif(stristr($content, 'CentOS Linux release 6')) {
+ $distname = 'CentOS';
+ $distver = 'Unknown';
+ $distid = 'centos53';
+ $distbaseid = 'fedora';
+ swriteln("Operating System: CentOS 6 or compatible\n");
+ } elseif(stristr($content, 'CentOS Linux release 7')) {
+ $distname = 'CentOS';
+ $distver = 'Unknown';
+ $distid = 'centos53';
+ $distbaseid = 'fedora';
+ swriteln("Operating System: CentOS 7 or compatible\n");
} else {
$distname = 'Redhat';
$distver = 'Unknown';
diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 16e91ae..af42e5e 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -34,7 +34,9 @@
var $server_id;
var $server_conf;
var $data;
-
+ var $min_uid = 500;
+ var $min_gid = 500;
+
/**
* Construct for this class
*
@@ -1785,6 +1787,67 @@
return $modules;
}
+
+ //* ISPConfig mail function
+ public function mail($to, $subject, $text, $from, $filepath = '', $filetype = 'application/pdf', $filename = '', $cc = '', $bcc = '', $from_name = '') {
+ global $app, $conf;
+
+ if($conf['demo_mode'] == true) $app->error("Mail sending disabled in demo mode.");
+
+ $app->uses('getconf,ispcmail');
+ $mail_config = $app->getconf->get_global_config('mail');
+ if($mail_config['smtp_enabled'] == 'y') {
+ $mail_config['use_smtp'] = true;
+ $app->ispcmail->setOptions($mail_config);
+ }
+ $app->ispcmail->setSender($from, $from_name);
+ $app->ispcmail->setSubject($subject);
+ $app->ispcmail->setMailText($text);
+
+ if($filepath != '') {
+ if(!file_exists($filepath)) $app->error("Mail attachement does not exist ".$filepath);
+ $app->ispcmail->readAttachFile($filepath);
+ }
+
+ if($cc != '') $app->ispcmail->setHeader('Cc', $cc);
+ if($bcc != '') $app->ispcmail->setHeader('Bcc', $bcc);
+
+ $app->ispcmail->send($to);
+ $app->ispcmail->finish();
+
+ return true;
+ }
+
+ public function is_allowed_user($username, $check_id = true, $restrict_names = false) {
+ global $app;
+
+ $name_blacklist = array('root','ispconfig','vmail','getmail');
+ if(in_array($username,$name_blacklist)) return false;
+
+ if(preg_match('/^[a-zA-Z0-9\.\-_]{1,32}$/', $username) == false) return false;
+
+ if($check_id && intval($this->getuid($username)) < $this->min_uid) return false;
+
+ if($restrict_names == true && preg_match('/^web\d+$/', $username) == false) return false;
+
+ return true;
+ }
+
+ public function is_allowed_group($groupname, $check_id = true, $restrict_names = false) {
+ global $app;
+
+ $name_blacklist = array('root','ispconfig','vmail','getmail');
+ if(in_array($groupname,$name_blacklist)) return false;
+
+ if(preg_match('/^[a-zA-Z0-9\.\-_]{1,32}$/', $groupname) == false) return false;
+
+ if($check_id && intval($this->getgid($groupname)) < $this->min_gid) return false;
+
+ if($restrict_names == true && preg_match('/^client\d+$/', $groupname) == false) return false;
+
+ return true;
+ }
+
}
?>
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 5f81fa6..a533957 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -344,8 +344,9 @@
if($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain') $app->log('document_root not set', LOGLEVEL_WARN);
return 0;
}
- if($data['new']['system_user'] == 'root' or $data['new']['system_group'] == 'root') {
- $app->log('Websites cannot be owned by the root user or group.', LOGLEVEL_WARN);
+ if($app->system->is_allowed_user($data['new']['system_user'], $app->system->is_user($data['new']['system_user']), true) == false
+ || $app->system->is_allowed_group($data['new']['system_group'], $app->system->is_group($data['new']['system_group']), true) == false) {
+ $app->log('Websites cannot be owned by the root user or group. User: '.$data['new']['system_user'].' Group: '.$data['new']['system_group'], LOGLEVEL_WARN);
return 0;
}
if(trim($data['new']['domain']) == '') {
@@ -461,6 +462,9 @@
$app->system->rename($data['new']['document_root'], $data['new']['document_root'].'_bak_'.date('Y_m_d_H_i_s'));
$app->log('Renaming existing directory in new docroot location. mv '.$data['new']['document_root'].' '.$data['new']['document_root'].'_bak_'.date('Y_m_d_H_i_s'), LOGLEVEL_DEBUG);
}
+
+ //* Unmount the old log directory bfore we move the log dir
+ exec('umount '.escapeshellcmd($old_dir.'/log'));
//* Create new base directory, if it does not exist yet
if(!is_dir($new_dir)) $app->system->mkdirpath($new_dir);
@@ -492,6 +496,8 @@
$app->system->removeLine('/etc/fstab', $fstab_line);
$fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.' none bind,nobootwait,_netdev 0 0';
$app->system->replaceLine('/etc/fstab', $fstab_line, $fstab_line, 1, 1);
+
+ exec('mount --bind '.escapeshellarg('/var/log/ispconfig/httpd/'.$data['new']['domain']).' '.escapeshellarg($data['new']['document_root'].'/'.$log_folder));
}
@@ -710,7 +716,7 @@
$app->system->chmod($data['new']['document_root'].'/ssl', 0755);
// make tmp directory writable for Apache and the website users
- $app->system->chmod($data['new']['document_root'].'/tmp', 0777);
+ $app->system->chmod($data['new']['document_root'].'/tmp', 0770);
// Set Log directory to 755 to make the logs accessible by the FTP user
if(realpath($data['new']['document_root'].'/'.$log_folder . '/error.log') == '/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log') {
@@ -770,7 +776,7 @@
$app->system->chmod($data['new']['document_root'].'/cgi-bin', 0755);
// make temp directory writable for Apache and the website users
- $app->system->chmod($data['new']['document_root'].'/tmp', 0777);
+ $app->system->chmod($data['new']['document_root'].'/tmp', 0770);
// Set Log directory to 755 to make the logs accessible by the FTP user
if(realpath($data['new']['document_root'].'/'.$log_folder . '/error.log') == '/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log') {
@@ -1205,18 +1211,15 @@
} else {
//remove the php fastgi starter script if available
+ $fastcgi_starter_script = $fastcgi_config['fastcgi_starter_script'].($data['old']['type'] == 'vhostsubdomain' ? '_web' . $data['old']['domain_id'] : '');
if ($data['old']['php'] == 'fast-cgi') {
$fastcgi_starter_path = str_replace('[system_user]', $data['old']['system_user'], $fastcgi_config['fastcgi_starter_path']);
$fastcgi_starter_path = str_replace('[client_id]', $client_id, $fastcgi_starter_path);
if($data['old']['type'] == 'vhost') {
- if (is_dir($fastcgi_starter_path)) {
- exec('rm -rf '.$fastcgi_starter_path);
- }
+ if(is_file($fastcgi_starter_script)) @unlink($fastcgi_starter_script);
+ if (is_dir($fastcgi_starter_path)) @rmdir($fastcgi_starter_path);
} else {
- $fcgi_starter_script = $fastcgi_starter_path.$fastcgi_config['fastcgi_starter_script'].'_web' . $data['old']['domain_id'];
- if (file_exists($fcgi_starter_script)) {
- exec('rm -f '.$fcgi_starter_script);
- }
+ if(is_file($fastcgi_starter_script)) @unlink($fastcgi_starter_script);
}
}
}
@@ -2009,7 +2012,7 @@
//* Create empty .htpasswd file, if it does not exist
if(!is_file($folder_path.'.htpasswd')) {
$app->system->touch($folder_path.'.htpasswd');
- $app->system->chmod($folder_path.'.htpasswd', 0750);
+ $app->system->chmod($folder_path.'.htpasswd', 0751);
$app->system->chown($folder_path.'.htpasswd', $website['system_user']);
$app->system->chgrp($folder_path.'.htpasswd', $website['system_group']);
$app->log('Created file '.$folder_path.'.htpasswd', LOGLEVEL_DEBUG);
@@ -2063,7 +2066,7 @@
unset($old_content);
$app->system->file_put_contents($folder_path.'.htaccess', $ht_file);
- $app->system->chmod($folder_path.'.htaccess', 0750);
+ $app->system->chmod($folder_path.'.htaccess', 0751);
$app->system->chown($folder_path.'.htaccess', $website['system_user']);
$app->system->chgrp($folder_path.'.htaccess', $website['system_group']);
$app->log('Created/modified file '.$folder_path.'.htaccess', LOGLEVEL_DEBUG);
@@ -2225,7 +2228,7 @@
}
$app->system->file_put_contents($new_folder_path.'.htaccess', $ht_file);
- $app->system->chmod($new_folder_path.'.htaccess', 0750);
+ $app->system->chmod($new_folder_path.'.htaccess', 0751);
$app->system->chown($new_folder_path.'.htaccess', $website['system_user']);
$app->system->chgrp($new_folder_path.'.htaccess', $website['system_group']);
$app->log('Created/modified file '.$new_folder_path.'.htaccess', LOGLEVEL_DEBUG);
@@ -2233,7 +2236,7 @@
//* Create empty .htpasswd file, if it does not exist
if(!is_file($folder_path.'.htpasswd')) {
$app->system->touch($new_folder_path.'.htpasswd');
- $app->system->chmod($new_folder_path.'.htpasswd', 0750);
+ $app->system->chmod($new_folder_path.'.htpasswd', 0751);
$app->system->chown($new_folder_path.'.htpasswd', $website['system_user']);
$app->system->chgrp($new_folder_path.'.htpasswd', $website['system_group']);
$app->log('Created file '.$new_folder_path.'.htpasswd', LOGLEVEL_DEBUG);
@@ -2654,7 +2657,7 @@
$fpm_socket = $socket_dir.$pool_name.'.sock';
$tpl->setVar('fpm_socket', $fpm_socket);
- $tpl->setVar('fpm_listen_mode', '0600');
+ $tpl->setVar('fpm_listen_mode', '0660');
$tpl->setVar('fpm_pool', $pool_name);
$tpl->setVar('fpm_port', $web_config['php_fpm_start_port'] + $data['new']['domain_id'] - 1);
diff --git a/server/plugins-available/backup_plugin.inc.php b/server/plugins-available/backup_plugin.inc.php
index 46be0a6..c3ed1ae 100644
--- a/server/plugins-available/backup_plugin.inc.php
+++ b/server/plugins-available/backup_plugin.inc.php
@@ -75,10 +75,10 @@
$backup_dir_is_ready = true;
$server_config['backup_dir_mount_cmd'] = trim($server_config['backup_dir_mount_cmd']);
if($server_config['backup_dir_is_mount'] == 'y' && $server_config['backup_dir_mount_cmd'] != ''){
- if(!$app->system->is_mounted($backup_dir)){
+ if(!$app->system->is_mounted($server_config['backup_dir'])){
exec(escapeshellcmd($server_config['backup_dir_mount_cmd']));
sleep(1);
- if(!$app->system->is_mounted($backup_dir)) $backup_dir_is_ready = false;
+ if(!$app->system->is_mounted($server_config['backup_dir'])) $backup_dir_is_ready = false;
}
}
diff --git a/server/plugins-available/bind_dlz_plugin.inc.php b/server/plugins-available/bind_dlz_plugin.inc.php
index f6d367f..63abcc4 100644
--- a/server/plugins-available/bind_dlz_plugin.inc.php
+++ b/server/plugins-available/bind_dlz_plugin.inc.php
@@ -188,7 +188,7 @@
//$_db = clone $app->db;
//$_db->dbName = 'named';
- $app->db->query("DELETE FROM named.records WHERE ispconfig_id = {$data["old"]["id"]}");
+ $app->db->query( "DELETE FROM named.dns_records WHERE zone = '".substr($data['old']['origin'], 0, -1)."'");
//unset($_db);
}
@@ -252,6 +252,9 @@
if ($type == 'MX') {
$app->db->query("INSERT INTO named.records (zone, ttl, type, host, mx_priority, data, ispconfig_id)".
" VALUES ('$origin', $ttl, '$type', '$name', {$data["new"]["aux"]}, '$content', $ispconfig_id)");
+ } elseif ($type == 'SRV') {
+ $app->db->query("INSERT INTO named.records (zone, ttl, type, data, ispconfig_id)".
+ " VALUES ('$origin', $ttl, '$type', '{$data["new"]["aux"]} $content', $ispconfig_id)");
} else {
$app->db->query("INSERT INTO named.records (zone, ttl, type, host, data, ispconfig_id)".
" VALUES ('$origin', $ttl, '$type', '$name', '$content', $ispconfig_id)");
@@ -327,6 +330,9 @@
if ($type == 'MX') {
$app->db->query("UPDATE named.records SET zone = '$origin', ttl = $ttl, type = '$type', host = '$name', mx_priority = $prio, ".
"data = '$content' WHERE ispconfig_id = $ispconfig_id AND type != 'SOA'");
+ } elseif ($type == 'SRV') {
+ $app->db->query("UPDATE named.records SET zone = '$origin', ttl = $ttl, type = '$type', ".
+ "data = '$prio $content' WHERE ispconfig_id = $ispconfig_id AND type != 'SOA'");
} else {
$app->db->query("UPDATE named.records SET zone = '$origin', ttl = $ttl, type = '$type', host = '$name', ".
"data = '$content' WHERE ispconfig_id = $ispconfig_id AND type != 'SOA'");
@@ -345,7 +351,7 @@
//$_db = clone $app->db;
//$_db->dbName = 'named';
- $app->db->query("DELETE FROM named.records WHERE ispconfig_id = {$data["old"]["id"]} AND type != 'SOA'");
+ $app->db->query( "DELETE FROM named.dns_records WHERE type != 'SOA' AND zone = '".substr($data['old']['origin'], 0, -1)."'");
//unset($_db);
}
diff --git a/server/plugins-available/cron_jailkit_plugin.inc.php b/server/plugins-available/cron_jailkit_plugin.inc.php
index c3bd5b7..4c95b83 100644
--- a/server/plugins-available/cron_jailkit_plugin.inc.php
+++ b/server/plugins-available/cron_jailkit_plugin.inc.php
@@ -80,10 +80,14 @@
if(!$parent_domain["domain_id"]) {
$app->log("Parent domain not found", LOGLEVEL_WARN);
return 0;
- } elseif($parent_domain["system_user"] == 'root' or $parent_domain["system_group"] == 'root') {
- $app->log("Websites (and Crons) cannot be owned by the root user or group.", LOGLEVEL_WARN);
- return 0;
}
+
+ if(!$app->system->is_allowed_user($parent_domain['system_user'], true, true)
+ || !$app->system->is_allowed_group($parent_domain['system_group'], true, true)) {
+ $app->log("Websites (and Crons) cannot be owned by the root user or group.", LOGLEVEL_WARN);
+ return false;
+ }
+
$this->parent_domain = $parent_domain;
@@ -155,9 +159,11 @@
if(!$parent_domain["domain_id"]) {
$app->log("Parent domain not found", LOGLEVEL_WARN);
return 0;
- } elseif($parent_domain["system_user"] == 'root' or $parent_domain["system_group"] == 'root') {
+ }
+ if(!$app->system->is_allowed_user($parent_domain['system_user'], true, true)
+ || !$app->system->is_allowed_group($parent_domain['system_group'], true, true)) {
$app->log("Websites (and Crons) cannot be owned by the root user or group.", LOGLEVEL_WARN);
- return 0;
+ return false;
}
$app->uses('system');
diff --git a/server/plugins-available/cron_plugin.inc.php b/server/plugins-available/cron_plugin.inc.php
index fe00713..7f8070d 100644
--- a/server/plugins-available/cron_plugin.inc.php
+++ b/server/plugins-available/cron_plugin.inc.php
@@ -96,11 +96,14 @@
if(!$parent_domain["domain_id"]) {
$app->log("Parent domain not found", LOGLEVEL_WARN);
return 0;
- } elseif($parent_domain["system_user"] == 'root' or $parent_domain["system_group"] == 'root') {
- $app->log("Websites (and Crons) cannot be owned by the root user or group.", LOGLEVEL_WARN);
- return 0;
}
+ if(!$app->system->is_allowed_user($parent_domain['system_user'], true, true)
+ || !$app->system->is_allowed_group($parent_domain['system_group'], true, true)) {
+ $app->log("Websites (and Crons) cannot be owned by the root user or group.", LOGLEVEL_WARN);
+ return false;
+ }
+
// Get the client ID
$client = $app->dbmaster->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ".intval($data["new"]["sys_groupid"]));
$client_id = intval($client["client_id"]);
diff --git a/server/plugins-available/firewall_plugin.inc.php b/server/plugins-available/firewall_plugin.inc.php
index 186e9b9..2cca769 100644
--- a/server/plugins-available/firewall_plugin.inc.php
+++ b/server/plugins-available/firewall_plugin.inc.php
@@ -76,29 +76,31 @@
global $app, $conf;
//* load the server configuration options
- $app->uses('getconf');
- $server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
- if($server_config['firewall'] == 'ufw') {
- $this->ufw_update($event_name, $data);
- } else {
- $this->bastille_update($event_name, $data);
+ if(!$data['mirrored']) {
+ $app->uses('getconf');
+ $server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
+ if($server_config['firewall'] == 'ufw') {
+ $this->ufw_update($event_name, $data);
+ } else {
+ $this->bastille_update($event_name, $data);
+ }
}
-
}
public function delete($event_name, $data) {
global $app, $conf;
//* load the server configuration options
- $app->uses('getconf');
- $server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
+ if(!$data['mirrored']) {
+ $app->uses('getconf');
+ $server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
- if($server_config['firewall'] == 'ufw') {
- $this->ufw_delete($event_name, $data);
- } else {
- $this->bastille_delete($event_name, $data);
+ if($server_config['firewall'] == 'ufw') {
+ $this->ufw_delete($event_name, $data);
+ } else {
+ $this->bastille_delete($event_name, $data);
+ }
}
-
}
private function ufw_update($event_name, $data) {
diff --git a/server/plugins-available/mail_plugin.inc.php b/server/plugins-available/mail_plugin.inc.php
index 5bf37d1..6d109c5 100644
--- a/server/plugins-available/mail_plugin.inc.php
+++ b/server/plugins-available/mail_plugin.inc.php
@@ -107,10 +107,11 @@
$maildomain_path .= '/Maildir';
}
- //* When the mail user dir exists but it is not a valid maildir, remove it
+ //* When the mail user dir exists but it is not a valid maildir, move it to corrupted maildir folder
if(!empty($maildomain_path) && is_dir($maildomain_path) && !is_dir($maildomain_path.'/new') && !is_dir($maildomain_path.'/cur')) {
- exec("su -c 'rm -rf ".escapeshellcmd($data['new']['maildir'])."' vmail");
- $app->log('Removed invalid maildir and rebuild it: '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_WARN);
+ if(!is_dir($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'])) $app->system->mkdirpath($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
+ exec("su -c 'mv -f ".escapeshellcmd($data['new']['maildir'])." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id']."' vmail");
+ $app->log('Moved invalid maildir to corrupted Maildirs folder: '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_WARN);
}
//* Create the maildir, if it doesn not exist, set permissions, set quota.
@@ -238,10 +239,11 @@
$maildomain_path .= '/Maildir';
}
- //* When the mail user dir exists but it is not a valid maildir, remove it
+ //* When the mail user dir exists but it is not a valid maildir, move it to corrupted maildir folder
if(!empty($maildomain_path) && is_dir($maildomain_path) && !is_dir($maildomain_path.'/new') && !is_dir($maildomain_path.'/cur')) {
- exec("su -c 'rm -rf ".escapeshellcmd($data['new']['maildir'])."' vmail");
- $app->log('Removed invalid maildir and rebuild it: '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_WARN);
+ if(!is_dir($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'])) $app->system->mkdirpath($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
+ exec("su -c 'mv -f ".escapeshellcmd($data['new']['maildir'])." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id']."' vmail");
+ $app->log('Moved invalid maildir to corrupted Maildirs folder: '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_WARN);
}
//* Create the maildir, if it doesn not exist, set permissions, set quota.
diff --git a/server/plugins-available/mysql_clientdb_plugin.inc.php b/server/plugins-available/mysql_clientdb_plugin.inc.php
index cba977c..6145db0 100644
--- a/server/plugins-available/mysql_clientdb_plugin.inc.php
+++ b/server/plugins-available/mysql_clientdb_plugin.inc.php
@@ -83,7 +83,14 @@
if(!is_array($host_list)) $host_list = explode(',', $host_list);
$success = true;
-
+ if(!preg_match('/\*[A-F0-9]{40}$/', $database_password)) {
+ $result = $link->query("SELECT PASSWORD('" . $link->escape_string($database_password) . "') as `crypted`");
+ if($result) {
+ $row = $result->fetch_assoc();
+ $database_password = $row['crypted'];
+ $result->free();
+ }
+ }
// loop through hostlist
foreach($host_list as $db_host) {
$db_host = trim($db_host);
@@ -270,7 +277,7 @@
$old_host_list .= 'localhost';
// Create the database user if database was disabled before
- if($data['new']['active'] == 'y' && $data['old']['active'] == 'n') {
+ if($data['new']['active'] == 'y') {
if($db_user) {
if($db_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
else $this->process_host_list('GRANT', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $host_list, $link);
diff --git a/server/plugins-available/network_settings_plugin.inc.php b/server/plugins-available/network_settings_plugin.inc.php
index 56e4980..46242d9 100644
--- a/server/plugins-available/network_settings_plugin.inc.php
+++ b/server/plugins-available/network_settings_plugin.inc.php
@@ -243,12 +243,61 @@
} else {
if($data['mirrored'] == true) {
- $app->log('Skipping network config request. IP addresses from amster are not configured on the mirror.', LOGLEVEL_DEBUG);
+ $app->log('Skipping network config request. IP addresses from master are not configured on the mirror.', LOGLEVEL_DEBUG);
}
if($server_config['auto_network_configuration'] == 'n') {
$app->log('Network configuration disabled in server settings.', LOGLEVEL_DEBUG);
}
}
+
+ //* Configure hostname
+ if($event_name == 'server_update' && $data['mirrored'] == false) {
+
+ //* get old server config
+ $tmp = $app->ini_parser->parse_ini_string(stripslashes($data['old']['config']));
+ $old_server_config = $tmp['server'];
+ unset($tmp);
+
+ $new_hostname = trim($server_config['hostname']);
+ $old_hostname = trim($old_server_config['hostname']);
+
+ if($new_hostname != '' && $old_hostname != $new_hostname) {
+
+ if(is_file('/etc/hostname')) {
+ $app->system->file_put_contents('/etc/hostname',$new_hostname);
+ $app->log('Changed /etc/hostname to '.$new_hostname, LOGLEVEL_DEBUG);
+ }
+
+ if(is_file('/etc/mailname')) {
+ $app->system->file_put_contents('/etc/mailname',$new_hostname);
+ $app->log('Changed /etc/mailname to '.$new_hostname, LOGLEVEL_DEBUG);
+ }
+
+ $postconf_commands = array(
+ 'myhostname = '.$new_hostname,
+ 'mydestination = '.$new_hostname.', localhost, localhost.localdomain'
+ );
+
+ //* Executing the postconf commands
+ foreach($postconf_commands as $cmd) {
+ $command = "postconf -e '$cmd'";
+ exec($command);
+ }
+
+ $app->log('Changed changed myhostname and mydestination in postfix main.cf to '.$new_hostname, LOGLEVEL_DEBUG);
+
+ //* change /etc/hosts
+ $hosts = file_get_contents('/etc/hosts');
+ $hosts = str_replace($old_hostname,$new_hostname,$hosts);
+ $app->system->file_put_contents('/etc/hosts',$hosts);
+
+ exec($app->system->getinitcommand('postfix', 'restart').' 2>&1');
+ exec($app->system->getinitcommand('networking', 'restart').' 2>&1');
+
+ }
+
+ }
+
}
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index dcfc674..b0e18c7 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -351,10 +351,13 @@
if($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain') $app->log('document_root not set', LOGLEVEL_WARN);
return 0;
}
- if($data['new']['system_user'] == 'root' or $data['new']['system_group'] == 'root') {
- $app->log('Websites cannot be owned by the root user or group.', LOGLEVEL_WARN);
+
+ if($app->system->is_allowed_user($data['new']['system_user'], $app->system->is_user($data['new']['system_user']), true) == false
+ || $app->system->is_allowed_group($data['new']['system_group'], $app->system->is_group($data['new']['system_group']), true) == false) {
+ $app->log('Websites cannot be owned by the root user or group. User: '.$data['new']['system_user'].' Group: '.$data['new']['system_group'], LOGLEVEL_WARN);
return 0;
}
+
if(trim($data['new']['domain']) == '') {
$app->log('domain is empty', LOGLEVEL_WARN);
return 0;
@@ -465,6 +468,9 @@
$app->system->rename($data['new']['document_root'], $data['new']['document_root'].'_bak_'.date('Y_m_d_H_i_s'));
$app->log('Renaming existing directory in new docroot location. mv '.$data['new']['document_root'].' '.$data['new']['document_root'].'_bak_'.date('Y_m_d_H_i_s'), LOGLEVEL_DEBUG);
}
+
+ //* Unmount the old log directory bfore we move the log dir
+ exec('umount '.escapeshellcmd($old_dir.'/log'));
//* Create new base directory, if it does not exist yet
if(!is_dir($new_dir)) $app->system->mkdirpath($new_dir);
@@ -496,6 +502,8 @@
$app->system->removeLine('/etc/fstab', $fstab_line);
$fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.' none bind,nobootwait,_netdev 0 0';
$app->system->replaceLine('/etc/fstab', $fstab_line, $fstab_line, 1, 1);
+
+ exec('mount --bind '.escapeshellarg('/var/log/ispconfig/httpd/'.$data['new']['domain']).' '.escapeshellarg($data['new']['document_root'].'/'.$log_folder));
}
@@ -714,7 +722,7 @@
$app->system->chmod($data['new']['document_root'].'/ssl', 0755);
// make tmp directory writable for nginx and the website users
- $app->system->chmod($data['new']['document_root'].'/tmp', 0777);
+ $app->system->chmod($data['new']['document_root'].'/tmp', 0770);
// Set Log directory to 755 to make the logs accessible by the FTP user
if(realpath($data['new']['document_root'].'/'.$log_folder . '/error.log') == '/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log') {
@@ -774,7 +782,7 @@
$app->system->chmod($data['new']['document_root'].'/cgi-bin', 0755);
// make temp directory writable for nginx and the website users
- $app->system->chmod($data['new']['document_root'].'/tmp', 0777);
+ $app->system->chmod($data['new']['document_root'].'/tmp', 0770);
// Set Log directory to 755 to make the logs accessible by the FTP user
if(realpath($data['new']['document_root'].'/'.$log_folder . '/error.log') == '/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log') {
diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php
index 0ceced9..e331624 100755
--- a/server/plugins-available/shelluser_base_plugin.inc.php
+++ b/server/plugins-available/shelluser_base_plugin.inc.php
@@ -82,6 +82,13 @@
$app->log('Directory of the shell user is not valid.',LOGLEVEL_WARN);
return false;
}
+
+ if(!$app->system->is_allowed_user($data['new']['username'], false, false)
+ || !$app->system->is_allowed_user($data['new']['puser'], true, true)
+ || !$app->system->is_allowed_group($data['new']['pgroup'], true, true)) {
+ $app->log('Shell user must not be root or in group root.',LOGLEVEL_WARN);
+ return false;
+ }
if($app->system->is_user($data['new']['puser'])) {
@@ -151,6 +158,13 @@
return false;
}
+ if(!$app->system->is_allowed_user($data['new']['username'], false, false)
+ || !$app->system->is_allowed_user($data['new']['puser'], true, true)
+ || !$app->system->is_allowed_group($data['new']['pgroup'], true, true)) {
+ $app->log('Shell user must not be root or in group root.',LOGLEVEL_WARN);
+ return false;
+ }
+
if($app->system->is_user($data['new']['puser'])) {
// Get the UID of the parent user
$uid = intval($app->system->getuid($data['new']['puser']));
diff --git a/server/plugins-available/shelluser_jailkit_plugin.inc.php b/server/plugins-available/shelluser_jailkit_plugin.inc.php
index 90ed677..9cf6fc8 100755
--- a/server/plugins-available/shelluser_jailkit_plugin.inc.php
+++ b/server/plugins-available/shelluser_jailkit_plugin.inc.php
@@ -74,6 +74,13 @@
$app->uses('system');
$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$data['new']['parent_domain_id']);
+ if(!$app->system->is_allowed_user($data['new']['username'], false, false)
+ || !$app->system->is_allowed_user($data['new']['puser'], true, true)
+ || !$app->system->is_allowed_group($data['new']['pgroup'], true, true)) {
+ $app->log('Shell user must not be root or in group root.',LOGLEVEL_WARN);
+ return false;
+ }
+
if($app->system->is_user($data['new']['puser'])) {
// Get the UID of the parent user
$uid = intval($app->system->getuid($data['new']['puser']));
@@ -139,6 +146,13 @@
$app->uses('system');
$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$data['new']['parent_domain_id']);
+ if(!$app->system->is_allowed_user($data['new']['username'], false, false)
+ || !$app->system->is_allowed_user($data['new']['puser'], true, true)
+ || !$app->system->is_allowed_group($data['new']['pgroup'], true, true)) {
+ $app->log('Shell user must not be root or in group root.',LOGLEVEL_WARN);
+ return false;
+ }
+
if($app->system->is_user($data['new']['puser'])) {
// Get the UID of the parent user
$uid = intval($app->system->getuid($data['new']['puser']));
diff --git a/server/scripts/ispconfig_update.php b/server/scripts/ispconfig_update.php
index 3512de9..2a5deed 100644
--- a/server/scripts/ispconfig_update.php
+++ b/server/scripts/ispconfig_update.php
@@ -86,9 +86,9 @@
|___/ ";
echo "\n".str_repeat('-', 80)."\n";
echo "\n\n>> Update \n\n";
-echo "Please choose the update method. For production systems select 'stable'. \nThe update from svn is only for development systems and may break your current setup.\nNote: Update all slave server, before you update master server.\n\n";
+echo "Please choose the update method. For production systems select 'stable'. \nWARNING: The update from GIT is only for development systems and may break your current setup. Do not use the GIT version on servers that host any live websites!\nNote: Update all slave server, before you update master server.\n\n";
-$method = simple_query('Select update method', array('stable', 'svn'), 'stable');
+$method = simple_query('Select update method', array('stable', 'git'), 'stable');
if($method == 'stable') {
$new_version = @file_get_contents('http://www.ispconfig.org/downloads/ispconfig3_version.txt') or die('Unable to retrieve version file.');
--
Gitblit v1.9.1