Marius Cramer
2015-01-06 9724f8f13bdc6bfb2f9649c54ad37fb45bea9870
Merge remote-tracking branch 'ispc/master' into new-layout-3.1

Conflicts:
interface/web/dns/templates/dns_dkim_edit.htm
interface/web/sites/templates/aps_instances_list.htm
2 files deleted
66 files modified
66 files added
4489 ■■■■ changed files
interface/lib/classes/aps_guicontroller.inc.php 220 ●●●● patch | view | raw | blame | history
interface/lib/classes/remote.d/aps.inc.php 318 ●●●●● patch | view | raw | blame | history
interface/lib/plugins/sites_web_vhost_domain_plugin.inc.php 2 ●●●●● patch | view | raw | blame | history
interface/web/admin/form/server_config.tform.php 4 ●●●● patch | view | raw | blame | history
interface/web/dns/dns_dkim_edit.php 31 ●●●●● patch | view | raw | blame | history
interface/web/dns/dns_dkim_get.php 86 ●●●●● patch | view | raw | blame | history
interface/web/dns/dns_dmarc_edit.php 377 ●●●●● patch | view | raw | blame | history
interface/web/dns/dns_spf_edit.php 269 ●●●●● patch | view | raw | blame | history
interface/web/dns/form/dns_dmarc.tform.php 164 ●●●●● patch | view | raw | blame | history
interface/web/dns/form/dns_spf.tform.php 164 ●●●●● patch | view | raw | blame | history
interface/web/dns/form/dns_txt.tform.php 31 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/ar_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/ar_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/ar_dns_txt.lng 29 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/bg_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/bg_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/bg_dns_txt.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br_dns_txt.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/cz_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/cz_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/cz_dns_txt.lng 4 ●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/de_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/de_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/de_dns_txt.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/el_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/el_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/el_dns_txt.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/en_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/en_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/en_dns_txt.lng 5 ●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/es_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/es_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/es_dns_txt.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/fi_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/fi_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/fi_dns_txt.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/fr_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/fr_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/fr_dns_txt.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/hr_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/hr_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/hr_dns_txt.lng 5 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/hu_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/hu_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/hu_dns_txt.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/id_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/id_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/id_dns_txt.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/it_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/it_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/it_dns_txt.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/ja_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/ja_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/ja_dns_txt.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/nl_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/nl_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/nl_dns_txt.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/pl_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/pl_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/pl_dns_txt.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/pt_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/pt_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/pt_dns_txt.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/ro_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/ro_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/ro_dns_txt.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/ru_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/ru_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/ru_dns_txt.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/se_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/se_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/se_dns_txt.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/sk_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/sk_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/sk_dns_txt.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/tr_dns_dmarc.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/tr_dns_spf.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/tr_dns_txt.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/dns/templates/dns_dkim_edit.htm 5 ●●●●● patch | view | raw | blame | history
interface/web/dns/templates/dns_dmarc_edit.htm 100 ●●●●● patch | view | raw | blame | history
interface/web/js/dns_dkim.js 72 ●●●●● patch | view | raw | blame | history
interface/web/js/mail_domain_dkim.js 25 ●●●●● patch | view | raw | blame | history
interface/web/mail/mail_domain_dkim_create.php 96 ●●●● patch | view | raw | blame | history
interface/web/mail/mail_domain_edit.php 161 ●●●●● patch | view | raw | blame | history
interface/web/mail/templates/mail_domain_edit.htm 2 ●●● patch | view | raw | blame | history
interface/web/sites/aps_do_operation.php 25 ●●●●● patch | view | raw | blame | history
interface/web/sites/aps_installedpackages_list.php 4 ●●●● patch | view | raw | blame | history
interface/web/sites/backup_stats.php 39 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/ar_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/bg_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/br_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/cz_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/de_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/de_backup_stats_list.lng 9 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/el_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/en_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/en_backup_stats_list.lng 9 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/es_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/fi_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/fr_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/hr_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/hu_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/id_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/it_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/ja_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/pl_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/pt_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/ro_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/ru_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/se_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/sk_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/tr_aps_instances_list.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/module.conf.php 7 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/remote.conf.php 2 ●●● patch | view | raw | blame | history
interface/web/sites/list/backup_stats.list.php 52 ●●●●● patch | view | raw | blame | history
interface/web/sites/templates/aps_instances_list.htm 5 ●●●● patch | view | raw | blame | history
interface/web/sites/templates/backup_stats_list.htm 48 ●●●●● patch | view | raw | blame | history
remoting_client/API-docs/navigation.html 11 ●●●●● patch | view | raw | blame | history
remoting_client/API-docs/sites_aps_available_packages_list.html 29 ●●●●● patch | view | raw | blame | history
remoting_client/API-docs/sites_aps_get_package_details.html 29 ●●●●● patch | view | raw | blame | history
remoting_client/API-docs/sites_aps_get_package_file.html 29 ●●●●● patch | view | raw | blame | history
remoting_client/API-docs/sites_aps_get_package_settings.html 29 ●●●●● patch | view | raw | blame | history
remoting_client/API-docs/sites_aps_install_package.html 29 ●●●●● patch | view | raw | blame | history
remoting_client/API-docs/sites_aps_instance_delete.html 29 ●●●●● patch | view | raw | blame | history
remoting_client/API-docs/sites_aps_instance_get.html 29 ●●●●● patch | view | raw | blame | history
remoting_client/API-docs/sites_aps_instance_settings_get.html 29 ●●●●● patch | view | raw | blame | history
remoting_client/API-docs/sites_aps_update_package_list.html 29 ●●●●● patch | view | raw | blame | history
server/conf/bastille-firewall.cfg.master 2 ●●● patch | view | raw | blame | history
server/lib/classes/aps_installer.inc.php 2 ●●● patch | view | raw | blame | history
server/lib/classes/cron.d/500-backup_mail.inc.php 8 ●●●● patch | view | raw | blame | history
server/plugins-available/mail_plugin_dkim.inc.php 7 ●●●● patch | view | raw | blame | history
interface/lib/classes/aps_guicontroller.inc.php
@@ -211,8 +211,93 @@
        return true;
    }
    public function createDatabaseForPackageInstance(&$settings, $websrv) {
        global $app;
        $app->uses('tools_sites');
        $global_config = $app->getconf->get_global_config('sites');
        $tmp = array();
        $tmp['parent_domain_id'] = $websrv['domain_id'];
        $tmp['sys_groupid'] = $websrv['sys_groupid'];
        $dbname_prefix = $app->tools_sites->replacePrefix($global_config['dbname_prefix'], $tmp);
        $dbuser_prefix = $app->tools_sites->replacePrefix($global_config['dbuser_prefix'], $tmp);
        unset($tmp);
        // get information if the webserver is a db server, too
        $web_server = $app->db->queryOneRecord("SELECT server_id,server_name,db_server FROM server WHERE server_id  = ".$app->functions->intval($websrv['server_id']));
        if($web_server['db_server'] == 1) {
            // create database on "localhost" (webserver)
            $mysql_db_server_id = $app->functions->intval($websrv['server_id']);
            $settings['main_database_host'] = 'localhost';
            $mysql_db_remote_access = 'n';
            $mysql_db_remote_ips = '';
        } else {
            //* get the default database server of the client
            $client = $app->db->queryOneRecord("SELECT default_dbserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ".$app->functions->intval($websrv['sys_groupid']));
            if(is_array($client) && $client['default_dbserver'] > 0 && $client['default_dbserver'] != $websrv['server_id']) {
                $mysql_db_server_id =  $app->functions->intval($client['default_dbserver']);
                $dbserver_config = $web_config = $app->getconf->get_server_config($app->functions->intval($mysql_db_server_id), 'server');
                $settings['main_database_host'] = $dbserver_config['ip_address'];
                $mysql_db_remote_access = 'y';
                $webserver_config = $app->getconf->get_server_config($app->functions->intval($websrv['server_id']), 'server');
                $mysql_db_remote_ips = $webserver_config['ip_address'];
            } else {
                /* I left this in place for a fallback that should NEVER! happen.
                 * if we reach this point it means that there is NO default db server for the client
                * AND the webserver has NO db service enabled.
                * We have to abort the aps installation here... so I added a return false
                * although this does not present any error message to the user.
                */
                return false;
                /*$mysql_db_server_id = $websrv['server_id'];
                 $settings['main_database_host'] = 'localhost';
                $mysql_db_remote_access = 'n';
                $mysql_db_remote_ips = '';*/
            }
        }
        if (empty($settings['main_database_name'])) {
            //* Find a free db name for the app
            for($n = 1; $n <= 1000; $n++) {
                $mysql_db_name = $app->db->quote(($dbname_prefix != '' ? $dbname_prefix.'aps'.$n : uniqid('aps')));
                $tmp = $app->db->queryOneRecord("SELECT count(database_id) as number FROM web_database WHERE database_name = '".$app->db->quote($mysql_db_name)."'");
                if($tmp['number'] == 0) break;
            }
            $settings['main_database_name'] = $mysql_db_name;
        }
        if (empty($settings['main_database_login'])) {
            //* Find a free db username for the app
            for($n = 1; $n <= 1000; $n++) {
                $mysql_db_user = $app->db->quote(($dbuser_prefix != '' ? $dbuser_prefix.'aps'.$n : uniqid('aps')));
                $tmp = $app->db->queryOneRecord("SELECT count(database_user_id) as number FROM web_database_user WHERE database_user = '".$app->db->quote($mysql_db_user)."'");
                if($tmp['number'] == 0) break;
            }
            $settings['main_database_login'] = $mysql_db_user;
        }
        //* Create the mysql database user if not existing
        $tmp = $app->db->queryOneRecord("SELECT database_user_id FROM web_database_user WHERE database_user = '".$app->db->quote($settings['main_database_login'])."'");
        if(!$tmp) {
            $insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `database_user`, `database_user_prefix`, `database_password`)
                                          VALUES( ".$app->functions->intval($websrv['sys_userid']).", ".$app->functions->intval($websrv['sys_groupid']).", 'riud', '".$app->functions->intval($websrv['sys_perm_group'])."', '', 0, '".$settings['main_database_login']."', '".$app->db->quote($dbuser_prefix) . "', PASSWORD('".$settings['main_database_password']."'))";
            $mysql_db_user_id = $app->db->datalogInsert('web_database_user', $insert_data, 'database_user_id');
        }
        else $mysql_db_user_id = $tmp['database_user_id'];
        //* Create the mysql database if not existing
        $tmp = $app->db->queryOneRecord("SELECT count(database_id) as number FROM web_database WHERE database_name = '".$app->db->quote($settings['main_database_name'])."'");
        if($tmp['number'] == 0) {
            $insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `parent_domain_id`, `type`, `database_name`, `database_name_prefix`, `database_user_id`, `database_ro_user_id`, `database_charset`, `remote_access`, `remote_ips`, `backup_copies`, `active`, `backup_interval`)
                                          VALUES( ".$app->functions->intval($websrv['sys_userid']).", ".$app->functions->intval($websrv['sys_groupid']).", 'riud', '".$app->functions->intval($websrv['sys_perm_group'])."', '', $mysql_db_server_id, ".$app->functions->intval($websrv['domain_id']).", 'mysql', '".$settings['main_database_name']."', '" . $app->db->quote($dbname_prefix) . "', '$mysql_db_user_id', 0, '', '$mysql_db_remote_access', '$mysql_db_remote_ips', ".$app->functions->intval($websrv['backup_copies']).", 'y', '".$app->functions->intval($websrv['backup_interval'])."')";
            $app->db->datalogInsert('web_database', $insert_data, 'database_id');
        }
        return true;
    }
    /**
     * Creates a new database record for the package instance and
     * an install task
@@ -250,86 +335,15 @@
        }
        //* Create the MySQL database for the application
        //* Create the MySQL database for the application if necessary
        $pkg = $app->db->queryOneRecord('SELECT * FROM aps_packages WHERE id = '.$app->db->quote($packageid).';');
        $metafile = $this->interface_pkg_dir.'/'.$pkg['path'].'/APP-META.xml';
        $sxe = $this->readInMetaFile($metafile);
        $db_id = parent::getXPathValue($sxe, '//db:id');
        if (!empty($db_id)) {
            $global_config = $app->getconf->get_global_config('sites');
            $tmp = array();
            $tmp['parent_domain_id'] = $websrv['domain_id'];
            $tmp['sys_groupid'] = $websrv['sys_groupid'];
            $dbname_prefix = $app->tools_sites->replacePrefix($global_config['dbname_prefix'], $tmp);
            $dbuser_prefix = $app->tools_sites->replacePrefix($global_config['dbuser_prefix'], $tmp);
            unset($tmp);
            // get information if the webserver is a db server, too
            $web_server = $app->db->queryOneRecord("SELECT server_id,server_name,db_server FROM server WHERE server_id  = ".$app->functions->intval($websrv['server_id']));
            if($web_server['db_server'] == 1) {
                // create database on "localhost" (webserver)
                $mysql_db_server_id = $app->functions->intval($websrv['server_id']);
                $mysql_db_host = 'localhost';
                $mysql_db_remote_access = 'n';
                $mysql_db_remote_ips = '';
            } else {
                //* get the default database server of the client
                $client = $app->db->queryOneRecord("SELECT default_dbserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ".$app->functions->intval($websrv['sys_groupid']));
                if(is_array($client) && $client['default_dbserver'] > 0 && $client['default_dbserver'] != $websrv['server_id']) {
                    $mysql_db_server_id =  $app->functions->intval($client['default_dbserver']);
                    $dbserver_config = $web_config = $app->getconf->get_server_config($app->functions->intval($mysql_db_server_id), 'server');
                    $mysql_db_host = $dbserver_config['ip_address'];
                    $mysql_db_remote_access = 'y';
                    $webserver_config = $app->getconf->get_server_config($app->functions->intval($websrv['server_id']), 'server');
                    $mysql_db_remote_ips = $webserver_config['ip_address'];
                } else {
                    /* I left this in place for a fallback that should NEVER! happen.
                     * if we reach this point it means that there is NO default db server for the client
                     * AND the webserver has NO db service enabled.
                     * We have to abort the aps installation here... so I added a return false
                     * although this does not present any error message to the user.
                     */
                    return false;
                    /*$mysql_db_server_id = $websrv['server_id'];
                    $mysql_db_host = 'localhost';
                    $mysql_db_remote_access = 'n';
                    $mysql_db_remote_ips = '';*/
                }
            }
            //* Find a free db name for the app
            for($n = 1; $n <= 1000; $n++) {
                $mysql_db_name = $app->db->quote(($dbname_prefix != '' ? $dbname_prefix.'aps'.$n : uniqid('aps')));
                $tmp = $app->db->queryOneRecord("SELECT count(database_id) as number FROM web_database WHERE database_name = '".$app->db->quote($mysql_db_name)."'");
                if($tmp['number'] == 0) break;
            }
            //* Find a free db username for the app
            for($n = 1; $n <= 1000; $n++) {
                $mysql_db_user = $app->db->quote(($dbuser_prefix != '' ? $dbuser_prefix.'aps'.$n : uniqid('aps')));
                $tmp = $app->db->queryOneRecord("SELECT count(database_user_id) as number FROM web_database_user WHERE database_user = '".$app->db->quote($mysql_db_user)."'");
                if($tmp['number'] == 0) break;
            }
            $mysql_db_password = $settings['main_database_password'];
            //* Create the mysql database user
            $insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `database_user`, `database_user_prefix`, `database_password`)
                      VALUES( ".$app->functions->intval($websrv['sys_userid']).", ".$app->functions->intval($websrv['sys_groupid']).", 'riud', '".$app->functions->intval($websrv['sys_perm_group'])."', '', 0, '$mysql_db_user', '".$app->db->quote($dbuser_prefix) . "', PASSWORD('$mysql_db_password'))";
            $mysql_db_user_id = $app->db->datalogInsert('web_database_user', $insert_data, 'database_user_id');
            //* Create the mysql database
            $insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `parent_domain_id`, `type`, `database_name`, `database_name_prefix`, `database_user_id`, `database_ro_user_id`, `database_charset`, `remote_access`, `remote_ips`, `backup_copies`, `active`, `backup_interval`)
                      VALUES( ".$app->functions->intval($websrv['sys_userid']).", ".$app->functions->intval($websrv['sys_groupid']).", 'riud', '".$app->functions->intval($websrv['sys_perm_group'])."', '', $mysql_db_server_id, ".$app->functions->intval($websrv['domain_id']).", 'mysql', '$mysql_db_name', '" . $app->db->quote($dbname_prefix) . "', '$mysql_db_user_id', 0, '', '$mysql_db_remote_access', '$mysql_db_remote_ips', ".$app->functions->intval($websrv['backup_copies']).", 'y', '".$app->functions->intval($websrv['backup_interval'])."')";
            $app->db->datalogInsert('web_database', $insert_data, 'database_id');
            //* Add db details to package settings
            $settings['main_database_host'] = $mysql_db_host;
            $settings['main_database_name'] = $mysql_db_name;
            $settings['main_database_login'] = $mysql_db_user;
            // mysql-database-name is updated inside if not set already
            if (!$this->createDatabaseForPackageInstance($settings, $websrv)) return false;
        }
        //* Insert new package instance
@@ -348,15 +362,13 @@
        $app->db->datalogUpdate('aps_instances', "instance_status = ".INSTANCE_INSTALL, 'id', $InstanceID);
    }
    /**
     * Sets the status of an instance to "should be removed" and creates a
     * datalog entry to give the ISPConfig server a real removal advice
     *
     * @param $instanceid the instance to delete
     */
    public function deleteInstance($instanceid)
    public function deleteInstance($instanceid, $keepdatabase = false)
    {
        global $app;
        /*
@@ -370,46 +382,18 @@
        $app->db->datalogSave('aps', 'DELETE', 'id', $instanceid, array(), $datalog);
        */
        $sql = "SELECT web_database.database_id as database_id, web_database.database_user_id as `database_user_id` FROM aps_instances_settings, web_database WHERE aps_instances_settings.value = web_database.database_name AND aps_instances_settings.name = 'main_database_name' AND aps_instances_settings.instance_id = ".$instanceid." LIMIT 0,1";
        $tmp = $app->db->queryOneRecord($sql);
        if($tmp['database_id'] > 0) $app->db->datalogDelete('web_database', 'database_id', $tmp['database_id']);
        $database_user = $tmp['database_user_id'];
        $tmp = $app->db->queryOneRecord("SELECT COUNT(*) as `cnt` FROM `web_database` WHERE `database_user_id` = '" . $app->functions->intval($database_user) . "' OR `database_ro_user_id` = '" . $app->functions->intval($database_user) . "'");
        if($tmp['cnt'] < 1) $app->db->datalogDelete('web_database_user', 'database_user_id', $database_user);
        if (!$keepdatabase) {
            $sql = "SELECT web_database.database_id as database_id, web_database.database_user_id as `database_user_id` FROM aps_instances_settings, web_database WHERE aps_instances_settings.value = web_database.database_name AND aps_instances_settings.name = 'main_database_name' AND aps_instances_settings.instance_id = ".$instanceid." LIMIT 0,1";
            $tmp = $app->db->queryOneRecord($sql);
            if($tmp['database_id'] > 0) $app->db->datalogDelete('web_database', 'database_id', $tmp['database_id']);
            $database_user = $tmp['database_user_id'];
            $tmp = $app->db->queryOneRecord("SELECT COUNT(*) as `cnt` FROM `web_database` WHERE `database_user_id` = '" . $app->functions->intval($database_user) . "' OR `database_ro_user_id` = '" . $app->functions->intval($database_user) . "'");
            if($tmp['cnt'] < 1) $app->db->datalogDelete('web_database_user', 'database_user_id', $database_user);
        }
        $app->db->datalogUpdate('aps_instances', "instance_status = ".INSTANCE_REMOVE, 'id', $instanceid);
    }
    /**
     * Sets the status of an instance to "installation planned" and creates a
     * datalog entry to re-install the package. The existing package is simply overwritten.
     *
     * @param $instanceid the instance to delete
     */
    public function reinstallInstance($instanceid)
    {
        global $app;
        /*
        $app->db->query("UPDATE aps_instances SET instance_status = ".INSTANCE_INSTALL." WHERE id = ".$instanceid.";");
        $webserver_id = $this->getInstanceDataForDatalog($instanceid);
        if($webserver_id == '') return;
        // Create a sys_datalog entry for re-installation
        $datalog = array('instance_id' => $instanceid, 'server_id' => $webserver_id);
        $app->db->datalogSave('aps', 'INSERT', 'id', $instanceid, array(), $datalog);
        */
        $sql = "SELECT web_database.database_id as database_id FROM aps_instances_settings, web_database WHERE aps_instances_settings.value = web_database.database_name AND aps_instances_settings.value =  aps_instances_settings.name = 'main_database_name' AND aps_instances_settings.instance_id = ".$app->db->quote($instanceid)." LIMIT 0,1";
        $tmp = $app->db->queryOneRecord($sql);
        if($tmp['database_id'] > 0) $app->db->datalogDelete('web_database', 'database_id', $tmp['database_id']);
        $app->db->datalogUpdate('aps_instances', "instance_status = ".INSTANCE_INSTALL, 'id', $instanceid);
    }
    /**
@@ -608,6 +592,10 @@
        if(isset($pkg_details['Requirements Database'])
            && $pkg_details['Requirements Database'] != '')
        {
            if (isset($postinput['main_database_host'])) $input['main_database_host'] = $postinput['main_database_host'];
            if (isset($postinput['main_database_name'])) $input['main_database_name'] = $postinput['main_database_name'];
            if (isset($postinput['main_database_login'])) $input['main_database_login'] = $postinput['main_database_login'];
            if(isset($postinput['main_database_password']))
            {
                if($postinput['main_database_password'] == '') $error[] = $app->lng('error_no_database_pw');
interface/lib/classes/remote.d/aps.inc.php
New file
@@ -0,0 +1,318 @@
<?php
/*
Copyright (c) 2007 - 2013, 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.
--UPDATED 01.2015--
Created by Dominik Müller <info@profi-webdesign.net>
Copyright (c) Profi Webdesign Dominik Müller
*/
class remoting_aps extends remoting {
    //* Functions for APS
    public function sites_aps_update_package_list($session_id)
    {
        global $app;
        if(!$this->checkPerm($session_id, 'sites_aps_update_package')) {
            $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
            return false;
        }
        $app->load('aps_crawler');
        $aps = new ApsCrawler($app, false); // true = Interface mode, false = Server mode
        $aps->startCrawler();
        $aps->parseFolderToDB();
        $aps->fixURLs();
        return true;
    }
    public function sites_aps_available_packages_list($session_id, $params)
    {
        global $app;
        if(!$this->checkPerm($session_id, 'sites_aps_available_packages_list')) {
            $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
            return false;
        }
        $app->load('aps_base');
        if (isset($params['all_packages']) && ($params['all_packages'] == true)) {
            $where = '(aps_packages.package_status = '.PACKAGE_ENABLED.' OR aps_packages.package_status = '.PACKAGE_LOCKED.')';
        }
        else {
            $where = 'aps_packages.package_status = '.PACKAGE_ENABLED;
        }
        $sql  = 'SELECT * FROM aps_packages WHERE '.$where.' ORDER BY aps_packages.name, aps_packages.version';
        return $app->db->queryAllRecords($sql);
    }
    public function sites_aps_get_package_details($session_id, $primary_id)
    {
        global $app;
        if(!$this->checkPerm($session_id, 'sites_aps_get_package_details')) {
            $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
            return false;
        }
        $app->load('aps_guicontroller');
        $gui = new ApsGUIController($app);
        // Package-ID Check
        if (isset($primary_id))
        {
            $newest_pkg_id = $gui->getNewestPackageID($pkg_id);
            if($newest_pkg_id != 0) $primary_id = $newest_pkg_id;
        }
        // Make sure an integer ID is given
        if (!isset($primary_id) || !$gui->isValidPackageID($primary_id, true)) {// always adminflag
            $this->server->fault('package_error', 'The given Package ID is not valid.');
            return false;
        }
        // Get package details
        $details = $gui->getPackageDetails($primary_id);
        if (isset($details['error'])) {
            $this->server->fault('package_error', $details['error']);
            return false;
        }
        // encode all parts to ensure SOAP-XML-format
        array_walk_recursive($details, function(&$item, &$key) { $item = utf8_encode($item); } );
        // Special handling for license-text because of too much problems with soap-transport
        $details['License content'] = base64_encode($details['License content']);
        return $details;
    }
    public function sites_aps_get_package_file($session_id, $primary_id, $filename) {
        global $app;
        if(!$this->checkPerm($session_id, 'sites_aps_get_package_file')) {
            $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
            return false;
        }
        $app->load('aps_guicontroller');
        $gui = new ApsGUIController($app);
        // Package-ID Check
        if (isset($primary_id))
        {
            $newest_pkg_id = $gui->getNewestPackageID($pkg_id);
            if($newest_pkg_id != 0) $primary_id = $newest_pkg_id;
        }
        // Make sure an integer ID is given
        if (!isset($primary_id) || !$gui->isValidPackageID($primary_id, true)) {// always adminflag
            $this->server->fault('package_error', 'The given Package ID is not valid.');
            return false;
        }
        // Get package details
        $details = $gui->getPackageDetails($primary_id);
        if (isset($details['error'])) {
            $this->server->fault('package_error', $details['error']);
            return false;
        }
        // find file in details
        $found = false;
        if (basename($details['Icon']) == $filename) $found = true;
        if (!$found && isset($details['Screenshots']) && is_array($details['Screenshots']))
        foreach ($details['Screenshots'] as $screen) { if (basename($screen['ScreenPath']) == $filename) { $found = true; break; } }
        if (!$found) {
            $this->server->fault('package_error', 'File not found in package.');
            return false;
        }
        return base64_encode(file_get_contents(ISPC_ROOT_PATH.'/web/sites/aps_meta_packages/'.$details['path'].'/'.$filename));
    }
    public function sites_aps_get_package_settings($session_id, $primary_id)
    {
        global $app;
        if(!$this->checkPerm($session_id, 'sites_aps_get_package_details')) {
            $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
            return false;
        }
        $app->load('aps_guicontroller');
        $gui = new ApsGUIController($app);
        // Package-ID Check
        if (isset($primary_id))
        {
            $newest_pkg_id = $gui->getNewestPackageID($pkg_id);
            if($newest_pkg_id != 0) $primary_id = $newest_pkg_id;
        }
        // Make sure an integer ID is given
        if (!isset($primary_id) || !$gui->isValidPackageID($primary_id, true)) {// always adminflag
            $this->server->fault('package_error', 'The given Package ID is not valid.');
            return false;
        }
        // Get package settings
        $settings = $gui->getPackageSettings($primary_id);
        if (isset($settings['error'])) {
            $this->server->fault('package_error', $settings['error']);
            return false;
        }
        // encode all parts to ensure SOAP-XML-format
        array_walk_recursive($settings, function(&$item, &$key) { $item = utf8_encode($item); } );
        return $settings;
    }
    public function sites_aps_install_package($session_id, $primary_id, $params)
    {
        global $app;
        if(!$this->checkPerm($session_id, 'sites_aps_install_package')) {
            $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
            return false;
        }
        $app->load('aps_guicontroller');
        $gui = new ApsGUIController($app);
        // Package-ID Check
        if (isset($primary_id))
        {
            $newest_pkg_id = $gui->getNewestPackageID($primary_id);
            if($newest_pkg_id != 0) $primary_id = $newest_pkg_id;
        }
        // Make sure an integer ID is given
        if (!isset($primary_id) || !$gui->isValidPackageID($primary_id, true)) {// always adminflag
            $this->server->fault('package_error', 'The given Package ID is not valid.');
            return false;
        }
        // Get package details
        $details = $gui->getPackageDetails($primary_id);
        if (isset($details['error'])) {
            $this->server->fault('package_error', $details['error']);
            return false;
        }
        $settings = $gui->getPackageSettings($primary_id);
        if (isset($settings['error'])) {
            $this->server->fault('package_error', $settings['error']);
            return false;
        }
        // Check given Site/VHostDomain
        if (!isset($params['main_domain'])) {
            $this->server->fault('invalid parameters', 'No valid domain given.');
            return false;
        }
        $sql = "SELECT * FROM web_domain WHERE domain = '".$app->db->quote($params['main_domain'])."'";
        $domain = $app->db->queryOneRecord($sql);
        if (!$domain) {
            $this->server->fault('invalid parameters', 'No valid domain given.');
            return false;
        }
        $domains = array($domain['domain']); // Simulate correct Domain-List
        $result = $gui->validateInstallerInput($params, $details, $domains, $settings);
        if(empty($result['error']))
        {
            return $gui->createPackageInstance($result['input'], $primary_id);
        }
        $this->server->fault('invalid parameters', implode('<br />', $result['error']));
        return false;
    }
    public function sites_aps_instance_get($session_id, $primary_id)
    {
        global $app;
        if(!$this->checkPerm($session_id, 'sites_aps_instance_get')) {
            $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
            return false;
        }
        $sql  = "SELECT * FROM aps_instances WHERE id = ".$app->functions->intval($primary_id);
        $result = $app->db->queryOneRecord($sql);
        return $result;
    }
    public function sites_aps_instance_settings_get($session_id, $primary_id)
    {
        global $app;
        if(!$this->checkPerm($session_id, 'sites_aps_instance_get')) {
            $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
            return false;
        }
        $sql  = "SELECT * FROM aps_instances_settings WHERE instance_id = ".$app->functions->intval($primary_id);
        $result = $app->db->queryAllRecords($sql);
        return $result;
    }
    public function sites_aps_instance_delete($session_id, $primary_id, $params = array())
    {
        global $app;
        if(!$this->checkPerm($session_id, 'sites_aps_instance_delete')) {
            $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
            return false;
        }
        $app->load('aps_guicontroller');
        $gui = new ApsGUIController($app);
        // Check if Instance exists
        $sql  = "SELECT * FROM aps_instances WHERE id = ".$app->functions->intval($primary_id);
        $result = $app->db->queryOneRecord($sql);
        if (!$result) {
            $this->server->fault('instance_error', 'No valid instance id given.');
            return false;
        }
        $gui->deleteInstance($primary_id, (isset($params['keep_database']) && ($params['keep_database'] === true)));
        return true;
    }
}
?>
interface/lib/plugins/sites_web_vhost_domain_plugin.inc.php
@@ -212,8 +212,6 @@
                    if(is_array($records) && !empty($records)){
                        foreach($records as $rec){
                            $app->db->datalogUpdate('aps_instances_settings', "value = '".$app->db->quote($page_form->dataRecord["domain"])."'", 'id', $rec['id']);
                            // Reinstall of package needed?
                            //$app->db->datalogUpdate('aps_instances', "instance_status = '1'", 'id', $rec['instance_id']);
                        }
                    }
                    unset($records);
interface/web/admin/form/server_config.tform.php
@@ -320,8 +320,8 @@
        'dkim_strength' => array(
            'datatype' => 'INTEGER',
            'formtype' => 'SELECT',
            'default' => '1024',
            'value' => array('1024' => 'normal (1024)', '2048' => 'strong (2048)', '4096' => 'very strong (4096)')
            'default' => '2048',
            'value' => array('1024' => 'week (1024)', '2048' => 'normal (2048)', '4096' => 'strong (4096)')
        ),
        'relayhost_password' => array(
            'datatype' => 'VARCHAR',
interface/web/dns/dns_dkim_edit.php
@@ -70,12 +70,20 @@
        }
        parent::onShowNew();
        $soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND ?'", $_GET['zone'], $app->tform->getAuthSQL('r'));
        $sql=$app->db->queryOneRecord("SELECT dkim_public, dkim_selector FROM mail_domain WHERE domain = ? AND dkim = 'y' AND ?", substr_replace($soa['origin'],'',-1), $app->tform->getAuthSQL('r'));
        $public_key=str_replace(array('-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----',"\r","\n"),'',$sql['dkim_public']);
        $app->tpl->setVar('public_key', $public_key);
        $app->tpl->setVar('selector', $sql['dkim_selector']);
        $app->tpl->setVar('name', $soa['origin']);
    }
    function onSubmit() {
        global $app, $conf;
        // Get the parent soa record of the domain
        $soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->intval($_POST["zone"]));
        $soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND ?", $_POST["zone"], $app->tform->getAuthSQL('r'));
        // Check if Domain belongs to user
        if($soa["id"] != $_POST["zone"]) $app->tform->errorMessage .= $app->tform->wordbook["no_zone_perm"];
@@ -101,16 +109,15 @@
            $this->dataRecord['data']='v=DKIM1; t=s; p='.$this->dataRecord['data'];
            $this->dataRecord['name']=$this->dataRecord['selector'].'._domainkey.'.$this->dataRecord['name'];
        }
        // Update the serial number  and timestamp of the RR record
        $soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ?", $this->id);
        $this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
        $this->dataRecord["stamp"] = date('Y-m-d H:i:s');
            // Update the serial number  and timestamp of the RR record
            $soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ?", $this->id);
            $this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
            $this->dataRecord["stamp"] = date('Y-m-d H:i:s');
        // check for duplicate entry
        $check=$app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ? AND type = ? AND data = ? AND name = ?", $this->dataRecord['zone'], $this->dataRecord['type'], $this->dataRecord['data'], $this->dataRecord['name']);
        if ($check!='') $app->tform->errorMessage .= $app->tform->wordbook["record_exists_txt"];
        if (empty($this->dataRecord['data'])) $app->tform->errorMessage .= $app->tform->wordbook["dkim_disabled_txt"];
            // check for duplicate entry
            $check=$app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ? AND type = ? AND data = ? AND name = ?", $this->dataRecord["zone"], $this->dataRecord["type"], $this->dataRecord["data"], $this->dataRecord['name']);
            if ($check!='') $app->tform->errorMessage .= $app->tform->wordbook["record_exists_txt"];
            if (empty($this->dataRecord['data'])) $app->tform->errorMessage .= $app->tform->wordbook["dkim_disabled_txt"];
        parent::onSubmit();
    }
@@ -118,7 +125,7 @@
        global $app, $conf;
        //* Set the sys_groupid of the rr record to be the same then the sys_groupid of the soa record
        $soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->intval($this->dataRecord['zone']));
        $soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = ? AND ?", $this->dataRecord["zone"], $app->tform->getAuthSQL('r'));
        $app->db->datalogUpdate('dns_rr', "sys_groupid = ".$soa['sys_groupid'], 'id', $this->id);
        //* Update the serial number of the SOA record
@@ -131,7 +138,7 @@
        global $app, $conf;
        //* Update the serial number of the SOA record
        $soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->intval($this->dataRecord["zone"]));
        $soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = ? AND ?", $this->dataRecord["zone"], $app->tform->getAuthSQL('r'));
        $soa_id = $app->functions->intval($_POST["zone"]);
        $serial = $app->validate_dns->increase_serial($soa["serial"]);
        $app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
interface/web/dns/dns_dkim_get.php
File was deleted
interface/web/dns/dns_dmarc_edit.php
New file
@@ -0,0 +1,377 @@
<?php
/*
Copyright (c) 2014, Florian Schaal, info@schaal-24.de
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.
*/
/******************************************
* Begin Form configuration
******************************************/
$tform_def_file = "form/dns_dmarc.tform.php";
/******************************************
* End Form configuration
******************************************/
require_once '../../lib/config.inc.php';
require_once '../../lib/app.inc.php';
//* Check permissions for module
$app->auth->check_module_permissions('dns');
// Loading classes
$app->uses('tpl,tform,tform_actions,validate_dns');
$app->load('tform_actions');
class page_action extends tform_actions {
    function onShowNew() {
        global $app, $conf;
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
            $client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
            // Check if the user may add another mailbox.
            if($client["limit_dns_record"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = ?", $client_group_id);
                if($tmp["number"] >= $client["limit_dns_record"]) {
                    $app->error($app->tform->wordbook["limit_dns_record_txt"]);
                }
            }
        }
        parent::onShowNew();
    }
    function onShowEnd() {
        global $app, $conf;
        $zone = $app->functions->intval($_GET['zone']);
        // get domain-name
        $sql = "SELECT * FROM dns_soa WHERE id = ? AND ?";
        $rec = $app->db->queryOneRecord($sql, $zone, $app->tform->getAuthSQL('r'));
        $domain_name = rtrim($rec['origin'], '.');
        // set defaults
        $dmarc_policy = 'none';
        $dmarc_adkim = 'r';
        $dmarc_aspf = 'r';
        $dmarc_rf = 'afrf';
        $dmarc_pct = 100;
        $dmarc_ri = 86400;
        $dmarc_sp = 'same';
        //* check for an existing dmarc-record
        $sql = "SELECT data, active FROM dns_rr WHERE data LIKE 'v=DMARC1%' AND zone = ? AND name = ? AND ?";
        $rec = $app->db->queryOneRecord($sql, $zone, '_dmarc.'.$domain_name.'.', $app->tform->getAuthSQL('r'));
        if ( isset($rec) && !empty($rec) ) {
            $this->id = 1;
            $old_data = strtolower($rec['data']);
            $app->tpl->setVar("data", $old_data);
            if ($rec['active'] == 'Y') $app->tpl->setVar("active", "CHECKED");
            $dmarc_rua = '';
            $dmarc_ruf = '';
            $dmac_rf = '';
            $dmac_rua = '';
            $dmac_ruf = '';
            // browse through data
            $temp = explode('; ', $old_data);
            foreach ($temp as $part) {
                if (preg_match("/^p=/", $part)) $dmarc_policy = str_replace('p=', '', $part);
                if (preg_match("/^rua=/", $part)) {
                    $dmarc_rua = str_replace(array('rua=','mailto:'), '', $part).' ';
                    $dmarc_rua = str_replace(',', ' ', $dmarc_rua);
                }
                if (preg_match("/^ruf=/", $part)) {
                    $dmarc_ruf = str_replace(array('ruf=','mailto:'), '', $part).' ';
                    $dmarc_ruf = str_replace(',', ' ', $dmarc_ruf);
                }
                if (preg_match("/^fo=/", $part)) $dmarc_fo = str_replace('fo=', '', $part);
                if (preg_match("/^adkim=/", $part)) $dmarc_adkim = str_replace('adkim=', '', $part);
                if (preg_match("/^aspf=/", $part)) $dmarc_aspf = str_replace('aspf=', '', $part);
                if (preg_match("/^rf=/", $part)) $dmarc_rf = str_replace('rf=', '', $part);
                if (preg_match("/^(afrf:iodef|iodef:afrf)$/s", $dmarc_rf)) $dmarc_rf = str_replace(':', ' ', $dmarc_rf);
                if (preg_match("/^pct=/", $part)) $dmarc_pct = str_replace('pct=', '', $part);
                if (preg_match("/^ri=/", $part)) $dmarc_ri = str_replace('ri=', '', $part);
            }
        }
        //set html-values
        $app->tpl->setVar('domain', $domain_name);
        //create dmarc-policy-list
        $dmarc_policy_value = array(
            'none' => 'dmarc_policy_none_txt',
            'quarantine' => 'dmarc_policy_quarantine_txt',
            'reject' => 'dmarc_policy_reject_txt',
        );
        $dmarc_policy_list='';
        foreach($dmarc_policy_value as $value => $txt) {
            $selected = @($dmarc_policy == $value)?' selected':'';
            $dmarc_policy_list .= "<option value='$value'$selected>".$app->tform->wordbook[$txt]."</option>\r\n";
        }
        $app->tpl->setVar('dmarc_policy', $dmarc_policy_list);
        if (!empty($dmarc_rua)) $app->tpl->setVar("dmarc_rua", $dmarc_rua);
        if (!empty($dmarc_ruf)) $app->tpl->setVar("dmarc_ruf", $dmarc_ruf);
        //set dmarc-fo-options
        if (isset($dmarc_fo)) {
            $temp = explode(':', $dmarc_fo);
            foreach ($temp as $fo => $value) $app->tpl->setVar("dmarc_fo".$value, 'CHECKED');
        } else
            $app->tpl->setVar("dmarc_fo0", 'CHECKED');
        unset($temp);
        //create dmarc-adkim-list
        $dmarc_adkim_value = array(
            'r' => 'dmarc_adkim_r_txt',
            's' => 'dmarc_adkim_s_txt',
        );
        $dmarc_adkim_list='';
        foreach($dmarc_adkim_value as $value => $txt) {
            $selected = @($dmarc_adkim == $value)?' selected':'';
            $dmarc_adkim_list .= "<option value='$value'$selected>".$app->tform->wordbook[$txt]."</option>\r\n";
        }
        $app->tpl->setVar('dmarc_adkim', $dmarc_adkim_list);
        //create dmarc-aspf-list
        $dmarc_aspf_value = array(
            'r' => 'dmarc_aspf_r_txt',
            's' => 'dmarc_aspf_s_txt',
        );
        $dmarc_aspf_list='';
        foreach($dmarc_aspf_value as $value => $txt) {
            $selected = @($dmarc_aspf == $value)?' selected':'';
            $dmarc_aspf_list .= "<option value='$value'$selected>".$app->tform->wordbook[$txt]."</option>\r\n";
        }
        $app->tpl->setVar('dmarc_aspf', $dmarc_aspf_list);
        if ( strpos($dmarc_rf, 'afrf') !== false ) $app->tpl->setVar("dmarc_rf_afrf", 'CHECKED');
        if ( strpos($dmarc_rf, 'iodef') !== false ) $app->tpl->setVar("dmarc_rf_iodef", 'CHECKED');
        $app->tpl->setVar("dmarc_pct", $dmarc_pct);
        $app->tpl->setVar("dmarc_ri", $dmarc_ri);
        //create dmarc-sp-list
        $dmarc_sp_value = array(
            'same' => 'dmarc_sp_same_txt',
            'none' => 'dmarc_sp_none_txt',
            'quarantine' => 'dmarc_sp_quarantine_txt',
            'reject' => 'dmarc_sp_reject_txt',
        );
        $dmarc_sp_list='';
        foreach($dmarc_sp_value as $value => $txt) {
            $selected = @($dmarc_sp == $value)?' selected':'';
            $dmarc_sp_list .= "<option value='$value'$selected>".$app->tform->wordbook[$txt]."</option>\r\n";
        }
        $app->tpl->setVar('dmarc_sp', $dmarc_sp_list);
        parent::onShowEnd();
    }
    function onSubmit() {
        global $app, $conf;
        // Get the parent soa record of the domain
        $soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND ?", $_POST['zone'], $app->tform->getAuthSQL('r'));
        // Check if Domain belongs to user
        if($soa["id"] != $_POST["zone"]) $app->tform->errorMessage .= $app->tform->wordbook["no_zone_perm"];
        // Check the client limits, if user is not the admin
        if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
            // Get the limits of the client
            $client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
            $client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
            // Check if the user may add another mailbox.
            if($this->id == 0 && $client["limit_dns_record"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = ?", $client_group_id);
                if($tmp["number"] >= $client["limit_dns_record"]) {
                    $app->error($app->tform->wordbook["limit_dns_record_txt"]);
                }
            }
        } // end if user is not admin
        $domain_name = rtrim($soa['origin'], '.');
        // DMARC requieres at least one active dkim-record...
        $sql = "SELECT * FROM dns_rr WHERE name LIKE ? AND type='TXT' AND data like 'v=DKIM1;%' AND active='Y'";
        $temp = $app->db->queryAllRecords($sql, '%._domainkey.$domain_name'.'.');
        if (!is_array($temp)) {
            if (isset($app->tform->errorMessage )) $app->tform->errorMessage = '<br/>' . $app->tform->errorMessage;
            $app->tform->errorMessage .= $app->tform->wordbook['dmarc_no_dkim_txt'].$email;
        }
        // ... and an active spf-record (this breaks the current draft but DMARC is useless if you use DKIM or SPF
        $sql = "SELECT * FROM dns_rr WHERE name LIKE ? AND type='TXT' AND (data LIKE 'v=spf1;%' AND active = 'y')";
        $temp = $app->db->queryAllRecords($sql, $domain_name.'.');
        // abort if more than 1 active spf-records (backward-compatibility)
        if (is_array($temp[1])) {
            if (isset($app->tform->errorMessage )) $app->tform->errorMessage = '<br/>' . $app->tform->errorMessage;
            $app->tform->errorMessage .= $app->tform->wordbook['dmarc_more_spf_txt'];
        }
        if (empty($temp)) {
            if (isset($app->tform->errorMessage )) $app->tform->errorMessage = '<br/>' . $app->tform->errorMessage;
            $app->tform->errorMessage .= $app->tform->wordbook['dmarc_no_spf_txt'];
        }
        unset($temp);
        //validate dmarc_pct
        $this->dataRecord['dmarc_pct'] = $app->functions->intval($this->dataRecord['dmarc_pct']);
        if ($this->dataRecord['dmarc_pct'] < 0) $this->dataRecord['dmarc_pct'] = 0;
        if ($this->dataRecord['dmarc_pct'] > 100) $this->dataRecord['dmarc_pct'] = 100;
        //create dmarc-record
        $dmarc_record[] = 'p='.$this->dataRecord['dmarc_policy'];
        if (!empty($this->dataRecord['dmarc_rua'])) {
            $dmarc_rua = explode(' ', $this->dataRecord['dmarc_rua']);
            $dmarc_rua = array_filter($dmarc_rua);
            foreach ($dmarc_rua as $rec) {
                if (!filter_var($rec, FILTER_VALIDATE_EMAIL)) {
                    if (isset($app->tform->errorMessage )) $app->tform->errorMessage = '<br/>' . $app->tform->errorMessage;
                    $app->tform->errorMessage .= $app->tform->wordbook['dmarc_invalid_email_txt'].': '.$dmarc_rua;
                } else {
                    $temp .= 'mailto:'.$rec.',';
                }
            }
            $dmarc_record[] = 'rua='.rtrim($temp, ',');
            unset ($dmarc_rua);
            unset($temp);
        }
        if (!empty($this->dataRecord['dmarc_ruf'])) {
            $dmarc_ruf = explode(' ', $this->dataRecord['dmarc_ruf']);
            $dmarc_ruf = array_filter($dmarc_ruf);
            foreach ($dmarc_ruf as $rec) {
                if (!filter_var($rec, FILTER_VALIDATE_EMAIL)) {
                    if (isset($app->tform->errorMessage )) $app->tform->errorMessage = '<br/>' . $app->tform->errorMessage;
                    $app->tform->errorMessage .= $app->tform->wordbook['dmarc_invalid_email_txt'].': '.$dmarc_rua;
                } else {
                    $temp .= 'mailto:'.$rec.',';
                }
            }
            $dmarc_record[] = 'ruf='.rtrim($temp, ',');
            unset ($dmarc_ruf);
            unset($temp);
        }
        $fo_rec = '';
        if (isset($this->dataRecord['dmarc_fo0'])) $fo_rec[] = '0';
        if (isset($this->dataRecord['dmarc_fo1'])) $fo_rec[] = '1';
        if (isset($this->dataRecord['dmarc_fod'])) $fo_rec[] = 'd';
        if (isset($this->dataRecord['dmarc_fos'])) $fo_rec[] = 's';
        if (is_array($fo_rec) && !empty($fo_rec)) {
            $rec = 'fo='.implode(':', $fo_rec);
            if ($rec != 'fo=0') $dmarc_record[] = 'fo='.implode(':', $fo_rec);
            unset($rec);
        }
        if ($this->dataRecord['dmarc_adkim'] != 'r' )
            $dmarc_record[] = 'adkim='.$this->dataRecord['dmarc_adkim'];
        if ($this->dataRecord['dmarc_aspf'] != 'r' )
            $dmarc_record[] = 'aspf='.$this->dataRecord['dmarc_aspf'];
        if (isset($this->dataRecord['dmarc_rf_afrf']) && isset($this->dataRecord['dmarc_rf_iodef']))
            $dmarc_record[] = 'rf=afrf:iodef';
        else {
             if (isset($this->dataRecord['dmarc_rf_iodef']))
                $dmarc_record[] = 'rf=iodef';
        }
        unset($fo_rec);
        if (!empty($this->dataRecord['dmarc_pct']) && $this->dataRecord['dmarc_pct'] != 100)
            $dmarc_record[] = 'pct='.$this->dataRecord['dmarc_pct'];
        if (!empty($this->dataRecord['dmarc_ri']) && $this->dataRecord['dmarc_ri'] != '86400')
            $dmarc_record[] = 'ri='.$this->dataRecord['dmarc_ri'];
        if (!empty($this->dataRecord['dmarc_sp']) && $this->dataRecord['dmarc_sp'] != 'same')
            $dmarc_record[] = 'sp='.$this->dataRecord['dmarc_sp'];
        $temp = implode('; ', $dmarc_record);
        if (!empty($temp))
            $this->dataRecord['data'] = 'v=DMARC1; ' . $temp;
        else $app->tform->errorMessage .= $app->tform->wordbook["dmarc_empty_txt"];
        $this->dataRecord['name'] = '_dmarc.' . $soa['origin'];
        if (isset($this->dataRecord['active'])) $this->dataRecord['active'] = 'Y';
        // Set the server ID of the rr record to the same server ID as the parent record.
        $this->dataRecord["server_id"] = $soa["server_id"];
        // Update the serial number  and timestamp of the RR record
        $soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ?", $this->id);
        $this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
        $this->dataRecord["stamp"] = date('Y-m-d H:i:s');
        // always update an existing entry
        $check=$app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ? AND type = ? AND data LIKE 'v=DMARC1%' AND name = ?", $this->dataRecord['zone'], $this->dataRecord['type'], $this->dataRecord['name']);
        $this->id = $check['id'];
        if (!isset($this->dataRecord['active'])) $this->dataRecord['active'] = 'N';
        parent::onSubmit();
    }
    function onAfterInsert() {
        global $app, $conf;
        //* Set the sys_groupid of the rr record to be the same then the sys_groupid of the soa record
        $soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = ? AND ?", $app->functions->intval($this->dataRecord["zone"]), $app->tform->getAuthSQL('r'));
        $app->db->datalogUpdate('dns_rr', "sys_groupid = ".$soa['sys_groupid'], 'id', $this->id);
        //* Update the serial number of the SOA record
        $soa_id = $app->functions->intval($_POST["zone"]);
        $serial = $app->validate_dns->increase_serial($soa["serial"]);
        $app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
    }
    function onAfterUpdate() {
        global $app, $conf;
        //* Update the serial number of the SOA record
        $soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = ? AND ?", $app->functions->intval($this->dataRecord["zone"]), $app->tform->getAuthSQL('r'));
        $soa_id = $app->functions->intval($_POST["zone"]);
        $serial = $app->validate_dns->increase_serial($soa["serial"]);
        $app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
    }
}
$page = new page_action;
$page->onLoad();
?>
interface/web/dns/dns_spf_edit.php
New file
@@ -0,0 +1,269 @@
<?php
/*
Copyright (c) 2014, Florian Schaal, info@schaal-24.de
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.
*/
/******************************************
* Begin Form configuration
******************************************/
$tform_def_file = "form/dns_spf.tform.php";
/******************************************
* End Form configuration
******************************************/
require_once '../../lib/config.inc.php';
require_once '../../lib/app.inc.php';
//* Check permissions for module
$app->auth->check_module_permissions('dns');
// Loading classes
$app->uses('tpl,tform,tform_actions,validate_dns');
$app->load('tform_actions');
class page_action extends tform_actions {
    function onShowNew() {
        global $app, $conf;
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
            $client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = =", $client_group_id);
            // Check if the user may add another mailbox.
            if($client["limit_dns_record"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = ?", $client_group_id);
                if($tmp["number"] >= $client["limit_dns_record"]) {
                    $app->error($app->tform->wordbook["limit_dns_record_txt"]);
                }
            }
        }
        parent::onShowNew();
    }
    function onShowEnd() {
        global $app, $conf;
        $zone = $app->functions->intval($_GET['zone']);
        //* check for an existing spf-record
        $sql = "SELECT data, active FROM dns_rr WHERE data LIKE 'v=spf1%' AND zone = ? AND ?";
        $rec = $app->db->queryOneRecord($sql, $zone, $app->tform->getAuthSQL('r'));
        if ( isset($rec) && !empty($rec) ) {
            $this->id = 1;
            $old_data = strtolower($rec['data']);
            $app->tpl->setVar("data", $old_data);
            if ($rec['active'] == 'Y') $app->tpl->setVar("active", "CHECKED"); else $app->tpl->setVar("active", "UNCHECKED");
            $spf_hostname = '';
            $spf_ip = '';
            $spf_domain = '';
            $spf_mechanism = '';
            // browse through data
            $temp = explode(' ', $old_data);
            foreach ($temp as $part) {
                if ($part == 'a') $app->tpl->setVar("spf_a_active", "CHECKED");
                if ($part == 'mx') $app->tpl->setVar("spf_mx_active", "CHECKED");
                if (preg_match("/^ip(4|6):/", $part)) $spf_ip .= str_replace(array('ip4:','ip6:'), '', $part) . ' ';
                if (preg_match("/^a:/", $part)) $spf_hostname .= str_replace('a:', '', $part) . ' ';
                if (preg_match("/^\\??include/", $part)) $spf_domain .= str_replace(array('include:', '?'), '', $part) . ' ';
            }
            unset($temp);
            $spf_ip = rtrim($spf_ip);
            $spf_hostname = rtrim($spf_hostname);
            $spf_domain = rtrim($spf_domain);
            $spf_mechanism = substr($rec['data'], -4, 1);
        }
        //set html-values
        $app->tpl->setVar("spf_ip", $spf_ip);
        $app->tpl->setVar("spf_hostname", $spf_hostname);
        $app->tpl->setVar("spf_domain", $spf_domain);
        //create spf-mechanism-list
        $spf_mechanism_value = array(
            '+' => 'spf_mechanism_pass_txt',
            '-' => 'spf_mechanism_fail_txt',
            '~' => 'spf_mechanism_softfail_txt',
            '?' => 'spf_mechanism_neutral_txt'
        );
        $spf_mechanism_list='';
        foreach($spf_mechanism_value as $value => $txt) {
            $selected = @($spf_mechanism == $value)?' selected':'';
            $spf_mechanism_list .= "<option value='$value'$selected>".$app->tform->wordbook[$txt]."</option>\r\n";
        }
        $app->tpl->setVar('spf_mechanism', $spf_mechanism_list);
        parent::onShowEnd();
    }
    function onSubmit() {
        global $app, $conf;
        // Get the parent soa record of the domain
        $soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND ?", $app->functions->intval($_POST["zone"]), $app->tform->getAuthSQL('r'));
        // Check if Domain belongs to user
        if($soa["id"] != $_POST["zone"]) $app->tform->errorMessage .= $app->tform->wordbook["no_zone_perm"];
        // Check the client limits, if user is not the admin
        if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
            // Get the limits of the client
            $client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
            $client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
            // Check if the user may add another mailbox.
            if($this->id == 0 && $client["limit_dns_record"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = ?", $client_group_id);
                if($tmp["number"] >= $client["limit_dns_record"]) {
                    $app->error($app->tform->wordbook["limit_dns_record_txt"]);
                }
            }
        } // end if user is not admin
        //create spf-record
        if (!empty($this->dataRecord['spf_mx'])) {
            $spf_record[] = 'mx';
        }
        if (!empty($this->dataRecord['spf_a'])) {
            $spf_record[] = 'a';
        }
        $spf_ip = trim($this->dataRecord['spf_ip']);
        if (!empty($spf_ip)) {
            $rec = split(' ', $spf_ip);
            foreach ($rec as $ip) {
                $temp_ip = explode('/', $ip);
                if (filter_var($temp_ip[0], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
                    $temp = 'ip4:' . $temp_ip[0];
                    if (isset($temp_ip[1])) $temp .= '/' . $temp_ip[1];
                    $spf_record[] = $temp;
                    unset($temp);
                }
                elseif (filter_var($temp_ip[0], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
                    $temp = 'ip6:' . $temp_ip[0];
                    if (isset($temp_ip[1])) $temp .= '/' . $temp_ip[1];
                    $spf_record[] = $temp;
                    unset($temp);
                }
                else {
                    if (isset($app->tform->errorMessage )) $app->tform->errorMessage = '<br/>' . $app->tform->errorMessage;
                    $app->tform->errorMessage .= $app->tform->wordbook["spf_invalid_ip_txt"]. $temp_ip[0];
                    if (isset( $temp_ip[1])) $app->tform->errorMessage .= "/".$temp_ip[1];
                }
            }
        }
        $spf_hostname = trim($this->dataRecord['spf_hostname']);
        if (!empty($spf_hostname)) {
            $rec = split(' ', $spf_hostname);
            foreach ($rec as $hostname) {
                if (preg_match('/^[a-zA-Z0-9\\.\\-\\*]{0,64}$/', $hostname))
                    $spf_record[] = 'a:' . $hostname;
                else {
                    if (isset($app->tform->errorMessage )) $app->tform->errorMessage .= '<br/>' . $app->tform->wordbook["spf_invalid_hostname_txt"]. $hostname;
                    $app->tform->errorMessage .= $app->tform->wordbook["spf_invalid_hostname_txt"]. $hostname;
                }
            }
            unset($rec);
        }
        $spf_domain = trim($this->dataRecord['spf_domain']);
        if (!empty($spf_domain)) {
            $rec = split(' ', $spf_domain);
            foreach ($rec as $domain) {
                if (preg_match('/_^[a-zA-Z0-9\\.\\-\\*]{0,64}$/', $domain))
                    $spf_record[] = 'include:' . $domain;
                else {
                    if (isset($app->tform->errorMessage )) $app->tform->errorMessage .= '<br/>' . $app->tform->wordbook["spf_invalid_domain_txt"]. $domain;
                    $app->tform->errorMessage .= $app->tform->wordbook["spf_invalid_domain_txt"]. $domain;
                }
            }
        }
        $temp = implode(' ', $spf_record);unset($spf_record);
        if (!empty($temp))
            $this->dataRecord['data'] = 'v=spf1 ' . $temp . ' ' . $this->dataRecord['spf_mechanism'] . 'all';
        else $this->dataRecord['data'] = 'v=spf1 ' . $this->dataRecord['spf_mechanism'] . 'all';
        unset($temp);
        $this->dataRecord['name'] = $soa['origin'];
        if (isset($this->dataRecord['active'])) $this->dataRecord['active'] = 'Y';
        // Set the server ID of the rr record to the same server ID as the parent record.
        $this->dataRecord["server_id"] = $soa["server_id"];
        // Update the serial number  and timestamp of the RR record
        $soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ?", $this->id);
        $this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
        $this->dataRecord["stamp"] = date('Y-m-d H:i:s');
        // always update an existing entry
        $check=$app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ? AND type = ? AND data LIKE 'v=spf1%' AND name = ?", $this->dataRecord["zone"], $this->dataRecord["type"], $this->dataRecord['name'].'.');
        $this->id = $check['id'];
        if (!isset($this->dataRecord['active'])) $this->dataRecord['active'] = 'N';
        parent::onSubmit();
    }
    function onAfterInsert() {
        global $app, $conf;
        //* Set the sys_groupid of the rr record to be the same then the sys_groupid of the soa record
        $soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = ? AND ?", $app->functions->intval($this->dataRecord["zone"]), $app->tform->getAuthSQL('r'));
        $app->db->datalogUpdate('dns_rr', "sys_groupid = ".$soa['sys_groupid'], 'id', $this->id);
        //* Update the serial number of the SOA record
        $soa_id = $app->functions->intval($_POST["zone"]);
        $serial = $app->validate_dns->increase_serial($soa["serial"]);
        $app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
    }
    function onAfterUpdate() {
        global $app, $conf;
        //* Update the serial number of the SOA record
        $soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = ? AND ?", $app->functions->intval($this->dataRecord["zone"]), $app->tform->getAuthSQL('r'));
        $soa_id = $app->functions->intval($_POST["zone"]);
        $serial = $app->validate_dns->increase_serial($soa["serial"]);
        $app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
    }
}
$page = new page_action;
$page->onLoad();
?>
interface/web/dns/form/dns_dmarc.tform.php
New file
@@ -0,0 +1,164 @@
<?php
/*
    Form Definition
    Tabledefinition
    Datatypes:
    - INTEGER (Forces the input to Int)
    - DOUBLE
    - CURRENCY (Formats the values to currency notation)
    - VARCHAR (no format check, maxlength: 255)
    - TEXT (no format check)
    - DATE (Dateformat, automatic conversion to timestamps)
    Formtype:
    - TEXT (Textfield)
    - TEXTAREA (Textarea)
    - PASSWORD (Password textfield, input is not shown when edited)
    - SELECT (Select option field)
    - RADIO
    - CHECKBOX
    - CHECKBOXARRAY
    - FILE
    VALUE:
    - Wert oder Array
    Hint:
    The ID field of the database table is not part of the datafield definition.
    The ID field must be always auto incement (int or bigint).
*/
global $app;
$form["title"]    = "DNS DMARC Record";
$form["description"]  = "";
$form["name"]    = "dns_dmarc";
$form["action"]   = "dns_dmarc_edit.php";
$form["db_table"]  = "dns_rr";
$form["db_table_idx"] = "id";
$form["db_history"]  = "yes";
$form["tab_default"] = "dns";
$form["list_default"] = "dns_a_list.php";
$form["auth"]   = 'yes'; // yes / no
$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
$form["tabs"]['dns'] = array (
    'title'  => "DNS DMARC",
    'width'  => 100,
    'template'  => "templates/dns_dmarc_edit.htm",
    'fields'  => array (
        //#################################
        // Begin Datatable fields
        //#################################
        'server_id' => array (
            'datatype' => 'INTEGER',
            'formtype' => 'SELECT',
            'default' => '',
            'value'  => '',
            'width'  => '30',
            'maxlength' => '255'
        ),
        'zone' => array (
            'datatype' => 'INTEGER',
            'formtype' => 'TEXT',
            'default' => @$app->functions->intval($_REQUEST["zone"]),
            'value'  => '',
            'width'  => '30',
            'maxlength' => '255'
        ),
        'name' => array (
            'datatype' => 'VARCHAR',
            'formtype' => 'TEXT',
            'filters'   => array( 0 => array( 'event' => 'SAVE',
                    'type' => 'IDNTOASCII'),
                1 => array( 'event' => 'SHOW',
                    'type' => 'IDNTOUTF8'),
                2 => array( 'event' => 'SAVE',
                    'type' => 'TOLOWER')
            ),
            'validators' => array (  0 => array ( 'type' => 'REGEX',
                    'regex' => '/^[a-zA-Z0-9\.\-\_]{0,255}$/',
                    'errmsg'=> 'name_error_regex'),
            ),
            'default' => '',
            'value'  => '',
            'width'  => '30',
            'maxlength' => '255'
        ),
        'type' => array (
            'datatype' => 'VARCHAR',
            'formtype' => 'TEXT',
            'default' => 'TXT',
            'value'  => '',
            'width'  => '5',
            'maxlength' => '5'
        ),
        'data' => array (
            'datatype' => 'VARCHAR',
            'formtype' => 'TEXT',
            'default' => '',
            'value'  => '',
            'width'  => '30',
            'maxlength' => '255'
        ),
        /*
        'aux' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'default'    => '0',
            'value'        => '',
            'width'        => '10',
            'maxlength'    => '10'
        ),
        */
        'ttl' => array (
            'datatype' => 'INTEGER',
            'formtype' => 'TEXT',
            'validators' => array (  0 => array ( 'type' => 'RANGE',
                    'range' => '60:',
                    'errmsg'=> 'ttl_range_error'),
            ),
            'default' => '3600',
            'value'  => '',
            'width'  => '10',
            'maxlength' => '10'
        ),
        'active' => array (
            'datatype' => 'VARCHAR',
            'formtype' => 'CHECKBOX',
            'default' => 'Y',
        ),
        'stamp' => array (
            'datatype' => 'VARCHAR',
            'formtype' => 'TEXT',
            'default' => '',
            'value'  => '',
            'width'  => '30',
            'maxlength' => '255'
        ),
        'serial' => array (
            'datatype' => 'INTEGER',
            'formtype' => 'TEXT',
            'default' => '',
            'value'  => '',
            'width'  => '10',
            'maxlength' => '10'
        ),
        //#################################
        // End Datatable fields
        //#################################
    )
);
?>
interface/web/dns/form/dns_spf.tform.php
New file
@@ -0,0 +1,164 @@
<?php
/*
    Form Definition
    Tabledefinition
    Datatypes:
    - INTEGER (Forces the input to Int)
    - DOUBLE
    - CURRENCY (Formats the values to currency notation)
    - VARCHAR (no format check, maxlength: 255)
    - TEXT (no format check)
    - DATE (Dateformat, automatic conversion to timestamps)
    Formtype:
    - TEXT (Textfield)
    - TEXTAREA (Textarea)
    - PASSWORD (Password textfield, input is not shown when edited)
    - SELECT (Select option field)
    - RADIO
    - CHECKBOX
    - CHECKBOXARRAY
    - FILE
    VALUE:
    - Wert oder Array
    Hint:
    The ID field of the database table is not part of the datafield definition.
    The ID field must be always auto incement (int or bigint).
*/
global $app;
$form["title"]    = "DNS SPF Record";
$form["description"]  = "";
$form["name"]    = "dns_spf";
$form["action"]   = "dns_spf_edit.php";
$form["db_table"]  = "dns_rr";
$form["db_table_idx"] = "id";
$form["db_history"]  = "yes";
$form["tab_default"] = "dns";
$form["list_default"] = "dns_a_list.php";
$form["auth"]   = 'yes'; // yes / no
$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
$form["tabs"]['dns'] = array (
    'title'  => "DNS SPF",
    'width'  => 100,
    'template'  => "templates/dns_spf_edit.htm",
    'fields'  => array (
        //#################################
        // Begin Datatable fields
        //#################################
        'server_id' => array (
            'datatype' => 'INTEGER',
            'formtype' => 'SELECT',
            'default' => '',
            'value'  => '',
            'width'  => '30',
            'maxlength' => '255'
        ),
        'zone' => array (
            'datatype' => 'INTEGER',
            'formtype' => 'TEXT',
            'default' => @$app->functions->intval($_REQUEST["zone"]),
            'value'  => '',
            'width'  => '30',
            'maxlength' => '255'
        ),
        'name' => array (
            'datatype' => 'VARCHAR',
            'formtype' => 'TEXT',
            'filters'   => array( 0 => array( 'event' => 'SAVE',
                    'type' => 'IDNTOASCII'),
                1 => array( 'event' => 'SHOW',
                    'type' => 'IDNTOUTF8'),
                2 => array( 'event' => 'SAVE',
                    'type' => 'TOLOWER')
            ),
            'validators' => array (  0 => array ( 'type' => 'REGEX',
                    'regex' => '/^[a-zA-Z0-9\.\-\_]{0,255}$/',
                    'errmsg'=> 'name_error_regex'),
            ),
            'default' => '',
            'value'  => '',
            'width'  => '30',
            'maxlength' => '255'
        ),
        'type' => array (
            'datatype' => 'VARCHAR',
            'formtype' => 'TEXT',
            'default' => 'TXT',
            'value'  => '',
            'width'  => '5',
            'maxlength' => '5'
        ),
        'data' => array (
            'datatype' => 'VARCHAR',
            'formtype' => 'TEXT',
            'default' => '',
            'value'  => '',
            'width'  => '30',
            'maxlength' => '255'
        ),
        /*
        'aux' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'default'    => '0',
            'value'        => '',
            'width'        => '10',
            'maxlength'    => '10'
        ),
        */
        'ttl' => array (
            'datatype' => 'INTEGER',
            'formtype' => 'TEXT',
            'validators' => array (  0 => array ( 'type' => 'RANGE',
                    'range' => '60:',
                    'errmsg'=> 'ttl_range_error'),
            ),
            'default' => '86400',
            'value'  => '',
            'width'  => '10',
            'maxlength' => '10'
        ),
        'active' => array (
            'datatype' => 'VARCHAR',
            'formtype' => 'CHECKBOX',
            'default' => 'Y',
        ),
        'stamp' => array (
            'datatype' => 'VARCHAR',
            'formtype' => 'TEXT',
            'default' => '',
            'value'  => '',
            'width'  => '30',
            'maxlength' => '255'
        ),
        'serial' => array (
            'datatype' => 'INTEGER',
            'formtype' => 'TEXT',
            'default' => '',
            'value'  => '',
            'width'  => '10',
            'maxlength' => '10'
        ),
        //#################################
        // End Datatable fields
        //#################################
    )
);
?>
interface/web/dns/form/dns_txt.tform.php
@@ -105,24 +105,31 @@
        'data' => array (
            'datatype' => 'VARCHAR',
            'formtype' => 'TEXT',
            'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
                    'errmsg'=> 'data_error_empty'),
            'validators' => array (
                0 => array (
                    'type' => 'NOTEMPTY',
                    'errmsg'=> 'data_error_empty'
                ),
                1 => array (
                    'type' => 'REGEX',
                    'regex' => "/^((?!v=DKIM).)*$/s",
                    'errmsg'=> 'invalid_type_dkim'
                ),
                2 => array (
                    'type' => 'REGEX',
                    'regex' => "/^((?!v=DMARC1; ).)*$/s",
                    'errmsg'=> 'invalid_type_dmarc'),
                3 => array (
                    'type' => 'REGEX',
                    'regex' => "/^((?!v=spf).)*$/s",
                    'errmsg'=> 'invalid_type_spf'
                ),
            ),
            'default' => '',
            'value'  => '',
            'width'  => '30',
            'maxlength' => '255'
        ),
        /*
        'aux' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'default'    => '0',
            'value'        => '',
            'width'        => '10',
            'maxlength'    => '10'
        ),
        */
        'ttl' => array (
            'datatype' => 'INTEGER',
            'formtype' => 'TEXT',
interface/web/dns/lib/lang/ar_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/ar_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/ar_dns_txt.lng
@@ -1,16 +1,19 @@
<?php
$wb['server_id_txt'] = 'Server';
$wb['zone_txt'] = 'Zone';
$wb['name_txt'] = 'Hostname';
$wb['type_txt'] = 'type';
$wb['data_txt'] = 'Text';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['name_error_empty'] = 'The hostname is empty.';
$wb['name_error_regex'] = 'The hostname has the wrong format.';
$wb['data_error_empty'] = 'Text empty';
$wb['data_error_regex'] = 'Text format invalid';
$wb["server_id_txt"] = 'Server';
$wb["zone_txt"] = 'Zone';
$wb["name_txt"] = 'Hostname';
$wb["type_txt"] = 'type';
$wb["data_txt"] = 'Text';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb["name_error_empty"] = 'The hostname is empty.';
$wb["name_error_regex"] = 'The hostname has the wrong format.';
$wb["data_error_empty"] = 'Text empty';
$wb["data_error_regex"] = 'Text format invalid';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/bg_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/bg_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/bg_dns_txt.lng
@@ -13,4 +13,7 @@
$wb['data_error_empty'] = 'Text empty';
$wb['data_error_regex'] = 'Text format invalid';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/br_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/br_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/br_dns_txt.lng
@@ -13,4 +13,7 @@
$wb['data_error_empty'] = 'Endereço IP em branco';
$wb['data_error_regex'] = 'Endereço IP formato inválido';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/cz_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/cz_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/cz_dns_txt.lng
@@ -13,5 +13,7 @@
$wb['data_error_empty'] = 'Text je prázdný';
$wb['data_error_regex'] = 'Text má chybný formát';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/de_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/de_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanismus';
$wb['spf_mechanism_pass_txt'] = 'Pass - Mails von anderen Sendern zulassen';
$wb['spf_mechanism_fail_txt'] = 'Fail - Mails von anderen Sendern abweisen';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - Mails von anderen Sendern zulassen aber markieren';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - nichts unternehmen';
$wb['spf_mx_txt'] = 'Von allen MX-Servern dürfen Mails für diese Domain verschicken';
$wb['spf_a_txt'] = 'Von allen eingetragenen IP-Adressen dürfen Mails für diese Domain verschickt werden';
$wb['spf_ip_txt'] = 'Zusätzliche IP-Adressen im CIDR Format, die Mails für diese Domain verschicken dürfen';
$wb['spf_ip_note_txt'] = '(mehrere IPs mit Leerzeichen trennen)';
$wb['spf_invalid_ip_txt'] = 'Ungültige IP-Adresse';
$wb['spf_hostname_txt'] = 'Zusätzliche Hostnamen, die für diese Domain Mails verschicken dürfen oder als Relay arbeiten.';
$wb['spf_hostname_note_txt'] = '(mehrere Hostnamen mit Leerzeichen trennen)';
$wb['spf_invalid_hostname_txt'] = 'Ungültiger Hostname';
$wb['spf_domain_txt'] = 'Zusätzliche Domains, die Mails verschicken dürfen oder als Relay arbeiten';
$wb['spf_domain_note_txt'] = '(mehrerer Domains mit Leerzeichen trennen)';
$wb['spf_invalid_domain_txt'] = 'Ungültiger Domainname';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Aktiv';
$wb["record_exists_txt"] = 'DNS-Eintrag existiert bereits';
$wb['ttl_range_error'] = 'Min. TTL time ist 60 Sekunden.';
$wb['limit_dns_record_txt'] = 'Die maximale Anzahl an DNS Einträgen für Ihr Konto wurde erreicht.';
$wb['no_zone_perm'] = 'Sie haben nicht die Berechtigung, einen Eintrag zu dieser DNS Zone hinzuzufügen.';
?>
interface/web/dns/lib/lang/de_dns_txt.lng
@@ -13,4 +13,7 @@
$wb['data_error_empty'] = 'Text ist leer';
$wb['data_error_regex'] = 'Textformat ungültig';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['invalid_type_dkim'] = 'DKIM ist nicht zulässig. Bitte den DKIM-Button nutzen';
$wb['invalid_type_dmarc'] = 'DMARC ist nicht zulässig. Bitte den DMARC-Button nutzen';
$wb['invalid_type_spf'] = 'SPF ist nicht zulässig. Bitte den SPF-Button nutzen';
?>
interface/web/dns/lib/lang/el_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/el_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/el_dns_txt.lng
@@ -13,4 +13,7 @@
$wb['data_error_empty'] = 'Το κείμενο δεν έχει οριστεί';
$wb['data_error_regex'] = 'Κείμενο με μη έγκυρη μορφοποίηση';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/en_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/en_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/en_dns_txt.lng
@@ -13,4 +13,7 @@
$wb["data_error_empty"] = 'Text empty';
$wb["data_error_regex"] = 'Text format invalid';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/es_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/es_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/es_dns_txt.lng
@@ -13,4 +13,7 @@
$wb['data_error_empty'] = 'Texto vacío.';
$wb['data_error_regex'] = 'Formato de texto no válido';
$wb['ttl_range_error'] = 'TTL mínimo es 60 segundos';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/fi_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/fi_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/fi_dns_txt.lng
@@ -13,4 +13,7 @@
$wb['data_error_empty'] = 'Tekstikenttä on tyhjä';
$wb['data_error_regex'] = 'Tekstikenttä on vääränlainen';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/fr_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/fr_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/fr_dns_txt.lng
@@ -13,4 +13,7 @@
$wb['data_error_empty'] = 'Le texte est vide';
$wb['data_error_regex'] = 'Le format du texte est invalide';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/hr_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/hr_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/hr_dns_txt.lng
@@ -13,6 +13,7 @@
$wb['data_error_empty'] = 'TXT polje je prazno';
$wb['data_error_regex'] = 'Neispravan format TXT zapisa';
$wb['ttl_range_error'] = 'Minimalno TTL vrijeme je 60 sekundi.';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/hu_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/hu_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/hu_dns_txt.lng
@@ -13,4 +13,7 @@
$wb['data_error_empty'] = 'Text empty';
$wb['data_error_regex'] = 'Text format invalid';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/id_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/id_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/id_dns_txt.lng
@@ -13,4 +13,7 @@
$wb['data_error_empty'] = 'Teks kosong';
$wb['data_error_regex'] = 'Format teks tidak valid';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/it_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/it_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/it_dns_txt.lng
@@ -13,4 +13,7 @@
$wb['data_error_empty'] = 'Text empty';
$wb['data_error_regex'] = 'Text format invalid';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/ja_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/ja_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/ja_dns_txt.lng
@@ -13,4 +13,7 @@
$wb['data_error_empty'] = 'TXT を入力してください。';
$wb['data_error_regex'] = 'TXT の形式が不正です。';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/nl_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/nl_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/nl_dns_txt.lng
@@ -13,4 +13,7 @@
$wb['data_error_empty'] = 'Tekst is niet ingvuld';
$wb['data_error_regex'] = 'Tekst formaat ongeldig';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/pl_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/pl_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/pl_dns_txt.lng
@@ -13,4 +13,7 @@
$wb['data_error_empty'] = 'Tekst jest pusty.';
$wb['data_error_regex'] = 'Tekst ma zły format.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/pt_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/pt_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/pt_dns_txt.lng
@@ -13,4 +13,7 @@
$wb['data_error_empty'] = 'Endereço-IP em branco';
$wb['data_error_regex'] = 'Endereço-IP formato inválido';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/ro_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/ro_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/ro_dns_txt.lng
@@ -13,4 +13,7 @@
$wb['data_error_empty'] = 'Text necompletat';
$wb['data_error_regex'] = 'Format text invalid';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/ru_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/ru_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/ru_dns_txt.lng
@@ -13,4 +13,7 @@
$wb['data_error_empty'] = 'Текст пустой';
$wb['data_error_regex'] = 'Формат неправилен';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/se_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/se_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/se_dns_txt.lng
@@ -13,4 +13,7 @@
$wb['data_error_empty'] = 'Text empty';
$wb['data_error_regex'] = 'Text format invalid';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/sk_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/sk_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/sk_dns_txt.lng
@@ -13,4 +13,7 @@
$wb['data_error_empty'] = 'Text je prázdny';
$wb['data_error_regex'] = 'Text má zlý formát';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/lib/lang/tr_dns_dmarc.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb['data_txt'] = 'DMARC Record';
$wb['domain_txt'] = 'Domain';
$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
$wb['dmarc_policy_none_txt'] = 'none';
$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
$wb['dmarc_policy_reject_txt'] = 'reject';
$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
$wb['dmarc_fo_txt'] = 'Forensic reporting options';
$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
$wb['dmarc_adkim_r_txt'] = 'relaxed';
$wb['dmarc_adkim_s_txt'] = 'strict';
$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
$wb['dmarc_aspf_r_txt'] = 'relaxed';
$wb['dmarc_aspf_s_txt'] = 'strict';
$wb['dmarc_rf_txt'] = 'Report Format';
$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
$wb['dmarc_ri_txt'] = 'Reporting Interval';
$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
$wb['dmarc_sp_same_txt'] = 'same as domain';
$wb['dmarc_sp_none_txt'] = 'none';
$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
$wb['dmarc_sp_reject_txt'] = 'reject';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
$wb['record_exists_txt'] = 'DNS-Record already exists';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/tr_dns_spf.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['data_txt'] = 'SPF-Record';
$wb['spf_mechanism_txt'] = 'SPF Mechanism';
$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["record_exists_txt"] = 'DNS-Record already exists';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
?>
interface/web/dns/lib/lang/tr_dns_txt.lng
@@ -13,4 +13,7 @@
$wb['data_error_empty'] = 'Metin boş';
$wb['data_error_regex'] = 'Metin geçersiz formatta';
$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
?>
interface/web/dns/templates/dns_dkim_edit.htm
@@ -7,11 +7,11 @@
        
              <div class="form-group">
                <label for="data" class="col-sm-3 control-label">{tmpl_var name='public_key_txt'}</label>
                <textarea name="data" id="data" >{tmpl_var name='public_key'}</textarea>
                <textarea name="data" readonly id="data" >{tmpl_var name='public_key'}</textarea>
              </div>
              <div class="form-group">
                <label for="selector" class="col-sm-3 control-label">{tmpl_var name='selector_txt'}</label>
                <div class="col-sm-9"><input type="text" name="selector" id="selector" value="{tmpl_var name='selector'}" class="form-control" />
                <div class="col-sm-9"><input type="text" name="selector" id="selector" value="{tmpl_var name='selector'}" readonly class="form-control" />
              </div></div>
            <div class="form-group">
                <label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
@@ -36,5 +36,4 @@
            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','dns/dns_dkim_edit.php');">{tmpl_var name='btn_save_txt'}</button>
            <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
        </div></div>
<script language="JavaScript" type="text/javascript" src="js/dns_dkim.js"></script>
interface/web/dns/templates/dns_dmarc_edit.htm
New file
@@ -0,0 +1,100 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_txt">
    <div class="pnl_formsarea">
        <fieldset class="inlineLabels">
            <div class="ctrlHolder">
                <label for="domain">{tmpl_var name='domain_txt'}</label>
                <input name="domain" id="domain" value="{tmpl_var name='domain'}" readonly size="30" maxlength="255" type="text" class="textInput" />
            </div>
            <div class="ctrlHolder">
                <label for="dmarc_policy">{tmpl_var name='dmarc_policy_txt'}</label>
                <select name="dmarc_policy" id="dmarc_policy" class="selectInput">
                    {tmpl_var name='dmarc_policy'}
                </select>
                {tmpl_var name='dmarc_policy_note_txt'}
            </div>
            <div class="ctrlHolder">
                <label for="dmarc_rua">{tmpl_var name='dmarc_rua_txt'}</label>
                <input name="dmarc_rua" id="dmarc_rua" value="{tmpl_var name='dmarc_rua'}" size="20" maxlength="63" type="text" class="textInput" />
                {tmpl_var name='dmarc_rua_note_txt'}
            </div>
            <div class="ctrlHolder">
                <label for="dmarc_ruf">{tmpl_var name='dmarc_ruf_txt'}</label>
                <input name="dmarc_ruf" id="dmarc_ruf" value="{tmpl_var name='dmarc_ruf'}" size="20" maxlength="63" type="text" class="textInput" />
                {tmpl_var name='dmarc_ruf_note_txt'}
            </div>
            <div class="ctrlHolder">
                <p class="label">{tmpl_var name='dmarc_fo_txt'}</p>
                <div class="multiField">
                    <input type="checkbox" value="1" id="dmarc_fo0" name="dmarc_fo0" {tmpl_var name='dmarc_fo0'}/>{tmpl_var name='dmarc_fo0_txt'}<br>
                    <input type="checkbox" value="1" id="dmarc_fo1" name="dmarc_fo1" {tmpl_var name='dmarc_fo1'}/>{tmpl_var name='dmarc_fo1_txt'}<br>
                    <input type="checkbox" value="1" id="dmarc_fod" name="dmarc_fod" {tmpl_var name='dmarc_fod'}/>{tmpl_var name='dmarc_fod_txt'}<br>
                    <input type="checkbox" value="1" id="dmarc_fos" name="dmarc_fos" {tmpl_var name='dmarc_fos'}/>{tmpl_var name='dmarc_fos_txt'}
                </div>
            </div>
            <div class="ctrlHolder">
                <label for="dmarc_adkim">{tmpl_var name='dmarc_adkim_txt'}</label>
                <select name="dmarc_adkim" id="dmarc_adkim" class="selectInput">
                    {tmpl_var name='dmarc_adkim'}
                </select>
                {tmpl_var name='dmarc_adkim_note_txt'}
            </div>
            <div class="ctrlHolder">
                <label for="dmarc_aspf">{tmpl_var name='dmarc_aspf_txt'}</label>
                <select name="dmarc_aspf" id="dmarc_aspf" class="selectInput">
                    {tmpl_var name='dmarc_aspf'}
                </select>
                {tmpl_var name='dmarc_aspf_note_txt'}
            </div>
            <div class="ctrlHolder">
                <p class="label">{tmpl_var name='dmarc_rf_txt'}</p>
                <div class="multiField">
                     <input type="checkbox" value="1" id=dmarc_rf_afrf" name="dmarc_rf_afrf" {tmpl_var name='dmarc_rf_afrf'}/>{tmpl_var name='dmarc_rf_afrf_txt'}<br>
                    <input type="checkbox" value="1" id="dmarc_rf_iodef" name="dmarc_rf_iodef" {tmpl_var name='dmarc_rf_iodef'}/>{tmpl_var name='dmarc_rf_iodef_txt'}
                </div>
            </div>
            <div class="ctrlHolder">
                <label for="dmarc_pct">{tmpl_var name='dmarc_pct_txt'}</label>
                <input name="dmarc_pct" id="dmarc_pct" value="{tmpl_var name='dmarc_pct'}" size="20" maxlength="63" type="text" class="textInput" />
                {tmpl_var name='dmarc_pct_note_txt'}
            </div>
            <div class="ctrlHolder">
                <label for="dmarc_ri">{tmpl_var name='dmarc_ri_txt'}</label>
                <input name="dmarc_ri" id="dmarc_ri" value="{tmpl_var name='dmarc_ri'}" size="20" maxlength="63" type="text" class="textInput" />
                {tmpl_var name='dmarc_ri_note_txt'}
            </div>
            <div class="ctrlHolder">
                <label for="dmarc_sp">{tmpl_var name='dmarc_sp_txt'}</label>
                <select name="dmarc_sp" id="dmarc_sp" class="selectInput">
                    {tmpl_var name='dmarc_sp'}
                </select>
            </div>
            <div class="ctrlHolder">
                <label for="ttl">{tmpl_var name='ttl_txt'}</label>
                <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
            <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                <div class="multiField">
                    <input type="checkbox" value="1" id="active" name="active" {tmpl_var name='active'} / >
                </div>
            </div>
        </fieldset>
        <input type="hidden" name="id" value="{tmpl_var name='id'}">
        <input type="hidden" name="zone" value="{tmpl_var name='zone'}" id="zone">
        <input type="hidden" name="type" value="{tmpl_var name='type'}">
        <input type="hidden" name="name" value="{tmpl_var name='name'}">
            </div>
        <div class="buttonHolder buttons">
            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','dns/dns_dmarc_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
            <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
        </div>
    </div>
</div>
interface/web/js/dns_dkim.js
File was deleted
interface/web/js/mail_domain_dkim.js
@@ -31,15 +31,16 @@
This Javascript is invoked by
    * mail/templates/mail_domain_edit.htm to show and/or create the key-pair
*/
var request = false;
$('.subsectiontoggle').on('click', function(){
    $(this).children().toggleClass('showing').end().next().slideToggle();
});
function setRequest(action) {
var request = false;
//function setRequest(action) {
function setRequest() {
    if (window.XMLHttpRequest) {
        request = new XMLHttpRequest();
            request = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        try {
            request = new ActiveXObject('Msxml2.XMLHTTP');
@@ -51,7 +52,6 @@
            catch (e) {}
        }
    }
    if (!request) {
        alert("Error creating XMLHTTP-instance");
        return false;
@@ -64,12 +64,20 @@
        } else { 
            var domain = jQuery('#domain').val();
        }
        // we nedd the client-id to get the dkim-strength of the right mail-server
        try {
            var clientid = document.getElementById("client_group_id").selectedIndex; // admin and reseller
        }
        catch (e) {
            var clientid = jQuery('#client_id').val();; // user
        }
        var selector=jQuery('#dkim_selector').val();
        var publickey=jQuery('#dkim_public').val();
        var privatekey=encodeURIComponent(document.getElementById("dkim_private").value)
        request.open('POST', 'mail/mail_domain_dkim_create.php', true);
        request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        request.send('domain='+domain+'&action='+action+'&dkim_selector='+selector+'&dkim_public='+publickey+'&dkim_private='+privatekey);
        request.send('domain='+domain+'&dkim_selector='+selector+'&dkim_public='+publickey+'&client_id='+clientid);
        request.onreadystatechange = interpretRequest;
    }
}
@@ -86,10 +94,9 @@
                document.getElementsByName('dns_record')[0].value = request.responseXML.getElementsByTagName('dns_record')[0].firstChild.nodeValue;
            }
        break;
        default:
        break;
    }
}
setRequest('show');
//setRequest('show');
interface/web/mail/mail_domain_dkim_create.php
@@ -57,23 +57,6 @@
}
/**
 * This function fix PHP's messing up POST input containing characters space, dot,
 * open square bracket and others to be compatible with with the deprecated register_globals
 * @return array POST
 */
function getRealPOST() {
    $pairs = explode("&", file_get_contents("php://input"));
    $vars = array();
    foreach ($pairs as $pair) {
        $nv = explode("=", $pair, 2);
        $name = urldecode($nv[0]);
        $value = $nv[1];
        $vars[$name] = $value;
    }
    return $vars;
}
/**
 * This function formats the public-key
 * @param array $pubkey
 * @return string public-key
@@ -101,21 +84,32 @@
 * @param string $old_selector
 * @return string selector
 */
function new_selector ($old_selector, $domain) {
function new_selector ($old_selector, $domain, $client_id = -1) {
    global $app;
    //* validate post-values
    if ( validate_domain($domain) && validate_selector($old_selector) ) {
        //* get active selectors from dns
        $soa_rec = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE active = 'Y' AND origin = ?", $domain.'.');
        $soa_rec = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE active = 'Y' AND origin = ?");
        if ( isset($soa_rec) && !empty($soa_rec) ) {
            //* check for a dkim-record in the dns?
            $dns_data = $app->db->queryOneRecord("SELECT name FROM dns_rr WHERE name = ? AND active = 'Y'", $old_selector.'._domainkey.'.$domain.'.');
            $selector = str_replace( '._domainkey.'.$domain.'.', '', $dns_data['name']);
                if ( $old_selector == $selector) {
                    $selector = substr($old_selector, 0, 53) . time(); //* add unix-timestamp to delimiter to allow old and new key in the dns
                } else {
                    $selector = $old_selector;
            $dns_data = $app->db->queryOneRecord("SELECT name FROM dns_rr WHERE name = ? AND active = 'Y''", $old_selector.'._domainkey.'.$domain.'.');
            if ( !empty($dns_data) ){
                $selector = str_replace( '._domainkey.'.$domain.'.', '', $dns_data['name']);
            } else {
            }
        } else { //* no dns-zone found - check for existing mail-domain to create a new selector (we need this if a external dns is used)
            if ( $client_id >= 0 ) {
                $sql = "SELECT * from mail_domain WHERE dkim = 'y' AND domain = ? AND dkim_selector = ?";
                $maildomain =  $app->db->queryOneRecord($sql, $domain, $old_selector);
                if ( !empty($maildomain) ) {
                    $selector = $maildomain['selector'];
                }
            }
        }
        if ( $old_selector == $selector) {
            $selector = substr($old_selector, 0, 53) . time(); //* add unix-timestamp to delimiter to allow old and new key in the dns
        } else {
            $selector = $old_selector;
        }
    } else {
        $selector = 'invalid domain or selector';
@@ -123,35 +117,35 @@
    return $selector;
}
$client_id = $app->functions->intval($_POST['client_id']);
//* get dkim-strength for server_id
//$mail_server_id = $app->functions->intval( $app->db->queryOneRecord("SELECT server_id from mail_domain WHERE domain = ?", $_POST['domain']) );
//$dkim_strength = $app->functions->intval( $app->getconf->get_server_config($mail_server_id, 'mail')['dkim_strength'] );
$rec = $app->db->queryOneRecord("SELECT server_id from mail_domain WHERE domain = ?", $_POST['domain']);
$mail_server_id = $app->functions->intval($rec['server_id']);
unset ($rec);
$rec = $app->getconf->get_server_config($mail_server_id, 'mail');
$dkim_strength = $app->functions->intval($rec['dkim_strength']);
unset ($rec);
if ( empty($dkim_strength) ) $dkim_strength = 1024;
switch ($_POST['action']) {
    case 'create': /* create DKIM Private-key */
        $_POST=getRealPOST();
        $rnd_val = $dkim_strength * 10;
        exec('openssl rand -out ../../temp/random-data.bin '.$rnd_val.' 2> /dev/null', $output, $result);
        exec('openssl genrsa -rand ../../temp/random-data.bin '.$dkim_strength.' 2> /dev/null', $privkey, $result);
        unlink('../../temp/random-data.bin');
        foreach($privkey as $values) $private_key=$private_key.$values."\n";
        //* check the selector for updated dkim-settings only
        if ( isset($_POST['dkim_public']) && !empty($_POST['dkim_public']) ) $selector = new_selector($_POST['dkim_selector'], $_POST['domain']);
    break;
    case 'show': /* show the DNS-Record onLoad */
        $private_key=$_POST['dkim_private'];
    break;
$sql = "SELECT server_id from mail_domain WHERE domain = ?";
$mail_server = $app->db->queryOneRecord($sql, $_POST['domain']);
if ( is_array($mail_server) ) { //* we are adding an existing mail-domain
    $mail_server_id = $app->functions->intval( $mail_server['server_id'] );
} else {
    $sql = "SELECT default_mailserver FROM client WHERE client_id = ?";
    $mail_server = $app->db->queryOneRecord($sql, $client_id);
    $mail_server_id = $app->functions->intval( $mail_server['default_mailserver'] );
}
unset($mail_server);
$mail_config = $app->getconf->get_server_config($mail_server_id, 'mail');
$dkim_strength = $app->functions->intval($mail_config['dkim_strength']);
unset($mail_config);
$public_key=get_public_key($private_key, $dkim_strength);
if ( empty($dkim_strength) ) $dkim_strength = 2048;
$rnd_val = $dkim_strength * 10;
exec('openssl rand -out ../../temp/random-data.bin '.$rnd_val.' 2> /dev/null', $output, $result);
exec('openssl genrsa -rand ../../temp/random-data.bin '.$dkim_strength.' 2> /dev/null', $privkey, $result);
unlink("../../temp/random-data.bin");
foreach($privkey as $values) $private_key=$private_key.$values."\n";
//* check the selector for updated dkim-settings only
if ( isset($_POST['dkim_public']) && !empty($_POST['dkim_public']) ) $selector = new_selector($_POST['dkim_selector'], $_POST['domain'], $client_id);
if ( !isset($public_key) ) $public_key=get_public_key($private_key, $dkim_strength);
$dns_record=str_replace(array('-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----',"\r","\n"),'',$public_key);
if ( !isset($selector) ) {
interface/web/mail/mail_domain_edit.php
old mode 100644 new mode 100755
@@ -206,6 +206,16 @@
            $app->tpl->setVar("edit_disabled", 0);
        }
        // load dkim-values
        $sql = "SELECT domain, dkim_private, dkim_public, dkim_selector FROM mail_domain WHERE domain_id = ?";
        $rec = $app->db->queryOneRecord($sql, $app->functions->intval($_GET['id']));
        $dns_key = str_replace(array('-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----',"\r","\n"),'',$rec['dkim_public']);
        $dns_record = '.' . $rec['dkim_selector'] . '_domainkey._' . $rec['domain'] . '. 3600   TXT   v=DKIM1; t=s; p=' . $dns_key;
        $app->tpl->setVar('dkim_selector', $rec['dkim_selector']);
        $app->tpl->setVar('dkim_private', $rec['dkim_private']);
        $app->tpl->setVar('dkim_public', $rec['dkim_public']);
        if (!empty($rec['dkim_public'])) $app->tpl->setVar('dns_record', $dns_record);
        parent::onShowEnd();
    }
@@ -286,36 +296,6 @@
            }
        } // endif spamfilter policy
        //* create dns-record with dkim-values if the zone exists
        if ( (isset($this->dataRecord['dkim']) && $this->dataRecord['dkim'] == 'y') && (isset($this->dataRecord['active']) && $this->dataRecord['active'] == 'y') ) {
            $soa_rec = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $this->dataRecord['domain'].'.');
            if ( isset($soa_rec) && !empty($soa_rec) ) {
                //* check for a dkim-record in the dns
                $dns_data = $app->db->queryOneRecord("SELECT * FROM dns_rr WHERE name = ? AND sys_groupid = ?", $this->dataRecord['dkim_selector'].'._domainkey.'.$this->dataRecord['domain'].'.', $_SESSION["s"]["user"]['sys_groupid']);
                if ( isset($dns_data) && !empty($dns_data) ) {
                    $dns_data['data'] = 'v=DKIM1; t=s; p='.str_replace(array('-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----',"\r","\n"), '', $this->dataRecord['dkim_public']);
                    $dns_data['active'] = 'Y';
                    $dns_data['stamp'] = date('Y-m-d H:i:s');
                    $dns_data['serial'] = $app->validate_dns->increase_serial($dns_data['serial']);
                    $app->db->datalogUpdate('dns_rr', $dns_data, 'id', $dns_data['id']);
                    $zone = $app->db->queryOneRecord("SELECT id, serial FROM dns_soa WHERE active = 'Y' AND id = ?", $dns_data['zone']);
                    $new_serial = $app->validate_dns->increase_serial($zone['serial']);
                    $app->db->datalogUpdate('dns_soa', "serial = '".$new_serial."'", 'id', $zone['id']);
                } else { //* no dkim-record found - create new record
                    $dns_data = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $this->dataRecord['domain'].'.');
                    $dns_data['name'] = $this->dataRecord['dkim_selector'].'._domainkey.'.$this->dataRecord['domain'].'.';
                    $dns_data['type'] = 'TXT';
                    $dns_data['data'] = 'v=DKIM1; t=s; p='.str_replace(array('-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----',"\r","\n"), '', $this->dataRecord['dkim_public']);
                    $dns_data['aux'] = 0;
                    $dns_data['active'] = 'Y';
                    $dns_data['stamp'] = date('Y-m-d H:i:s');
                    $dns_data['serial'] = $app->validate_dns->increase_serial($dns_data['serial']);
                    $app->db->datalogInsert('dns_rr', $dns_data, 'id', $dns_data['zone']);
                    $new_serial = $app->validate_dns->increase_serial($soa_rec['serial']);
                    $app->db->datalogUpdate('dns_soa', "serial = '".$new_serial."'", 'id', $soa_rec['zone']);
                }
            }
        } //* endif add dns-record
    }
    function onBeforeUpdate() {
@@ -343,68 +323,6 @@
            unset($rec);
        }
        //* update dns-record when the dkim record was changed
        // NOTE: only if the domain-name was not changed
        //* get domain-data from the db
        $mail_data = $app->db->queryOneRecord("SELECT * FROM mail_domain WHERE domain = ?", $this->dataRecord['domain']);
        if ( isset($mail_data) && !empty($mail_data) ) {
            $post_data = $mail_data;
            $post_data['dkim_selector'] = $this->dataRecord['dkim_selector'];
            $post_data['dkim_public'] = $this->dataRecord['dkim_public'];
            $post_data['dkim_private'] = $this->dataRecord['dkim_private'];
            if ( isset($this->dataRecord['dkim']) ) $post_data['dkim'] = 'y'; else $post_data['dkim'] = 'n';
            if ( isset($this->dataRecord['active']) ) $post_data['active'] = 'y'; else      $post_data['active'] = 'n';
        }
        //* dkim-value changed
        if ( $mail_data != $post_data ) {
            //* get the dns-record for the public from the db
            $dns_data = $app->db->queryOneRecord("SELECT * FROM dns_rr WHERE name = ? AND sys_groupid = ?", $mail_data['dkim_selector'].'._domainkey.'.$mail_data['domain'].'.', $mail_data['sys_groupid']);
            //* we modify dkim dns-values for active mail-domains only
            if ( $post_data['active'] == 'y' ) {
                if ( $post_data['dkim'] == 'n' ) {
                    $new_dns_data['active'] = 'N';
                } else {
                    if ( $post_data['dkim_selector'] != $mail_data['dkim_selector'] )
                        $new_dns_data['name'] = $post_data['dkim_selector'].'._domainkey.'.$post_data['domain'].'.';
                    if ( $post_data['dkim'] != $mail_data['dkim'] )
                        $new_dns_data['active'] = 'Y';
                    if ( $post_data['active'] != $mail_data['active'] && $post_data['active'] == 'y' )
                        $new_dns_data['active'] = 'Y';
                    if ( $post_data['dkim_public'] != $mail_data['dkim_public'] )
                        $new_dns_data['data'] = 'v=DKIM1; t=s; p='.str_replace(array('-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----',"\r","\n"), '', $post_data['dkim_public']);
                }
            } else $new_dns_data['active'] = 'N';
            if ( isset($dns_data) && !empty($dns_data) && isset($new_dns_data) ) {
                //* update dns-record
                $new_dns_data['serial'] = $app->validate_dns->increase_serial($dns_data['serial']);
                $app->db->datalogUpdate('dns_rr', $new_dns_data, 'id', $dns_data['id']);
                $zone = $app->db->queryOneRecord("SELECT id, serial FROM dns_soa WHERE active = 'Y' AND id = ?", $dns_data['zone']);
                $new_serial = $app->validate_dns->increase_serial($zone['serial']);
                $app->db->datalogUpdate('dns_soa', "serial = '".$new_serial."'", 'id', $zone['id']);
            } else {
                //* create a new dns-record
                $new_dns_data = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $mail_data['domain'].'.');
                //* create a new record only if the dns-zone exists
                if ( isset($new_dns_data) && !empty($new_dns_data) && $post_data['dkim'] == 'y' ) {
                    $new_dns_data['name'] = $post_data['dkim_selector'].'._domainkey.'.$post_data['domain'].'.';
                    $new_dns_data['type'] = 'TXT';
                    $new_dns_data['data'] = 'v=DKIM1; t=s; p='.str_replace(array('-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----',"\r","\n"), '', $post_data['dkim_public']);
                    $new_dns_data['aux'] = 0;
                    $new_dns_data['active'] = 'Y';
                    $new_dns_data['stamp'] = date('Y-m-d H:i:s');
                    $new_dns_data['serial'] = $app->validate_dns->increase_serial($new_dns_data['serial']);
                    $app->db->datalogInsert('dns_rr', $new_dns_data, 'id', $new_dns_data['zone']);
                    $zone = $app->db->queryOneRecord("SELECT id, serial FROM dns_soa WHERE active = 'Y' AND id = ?", $new_dns_data['zone']);
                    $new_serial = $app->validate_dns->increase_serial($zone['serial']);
                    $app->db->datalogUpdate('dns_soa', "serial = '".$new_serial."'", 'id', $zone['id']);
                }
            }
        } //* endif $mail_data != $post_data
    }
    function onAfterUpdate() {
@@ -482,6 +400,65 @@
        } // end if domain name changed
        //* update dns-record when the dkim record was changed
        // NOTE: only if the domain-name was not changed
        if ( $this->dataRecord['active'] == 'y' && $this->dataRecord['domain'] ==  $this->oldDataRecord['domain'] ) {
            $dkim_active = @($this->dataRecord['dkim'] == 'y') ? true : false;
            $selector = @($this->dataRecord['dkim_selector'] != $this->oldDataRecord['dkim_selector']) ? true : false;
            $dkim_private = @($this->dataRecord['dkim_private'] != $this->oldDataRecord['dkim_private']) ? true : false;
            $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $this->dataRecord['domain']);
            if ( ($selector || $dkim_private || $dkim_active) && $dkim_active )
                //* create a new record only if the dns-zone exists
                if ( isset($soa) && !empty($soa) ) {
                    $this->update_dns($this->dataRecord, $soa);
                }
            elseif ( !isset($this->dataRecord['dkim']) ) {
                // updated existing dmarc-record to policy 'none'
                $sql = "SELECT * from dns_rr WHERE name ='_dmarc.?.' AND data LIKE 'v=DMARC1%' AND ?";
                $rec = $app->db->queryOneRecord($sql, $this->dataRecord['domain'], $app->tform->getAuthSQL('r'));
                if (is_array($rec))
                    if (strpos($rec['data'], 'p=none=') === false) {
                        $rec['data'] = str_replace(array('quarantine', 'reject'), 'none', $rec['data']);
                        $app->db->datalogUpdate('dns_rr', $rec, 'id', $rec['id']);
                        $soa_id = $app->functions->intval($soa['zone']);
                        $serial = $app->validate_dns->increase_serial($soa["serial"]);
                        $app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
                    }
                }
        }
    }
    private function update_dns($dataRecord, $new_rr) {
        global $app, $conf;
        // purge old rr-record(s)
        $sql = "SELECT * FROM dns_rr WHERE name LIKE '%._domainkey.?.' AND data LIKE 'v=DKIM1%' AND ? ORDER BY serial DESC";
        $rec = $app->db->queryAllRecords($sql, $dataRecord['domain'], $app->tform->getAuthSQL('r'));
        if (is_array($rec[1])) {
            for ($i=1; $i < count($rec); ++$i)
                $app->db->datalogDelete('dns_rr', 'id', $rec[$i]['id']);
        }
        // also delete a dsn-records with same selector
        $sql = "SELECT * from dns_rr WHERE name ='?._domainkey.?.' AND data LIKE 'v=DKIM1%' AND ?";
        $rec = $app->db->queryAllRecords($sql, $dataRecord['dkim_selector'], $dataRecord['domain'], $app->tform->getAuthSQL('r'));
        if (is_array($rec))
            foreach ($rec as $del)
                $app->db->datalogDelete('dns_rr', 'id', $del['id']);
        $new_rr['name'] = $dataRecord['dkim_selector'].'._domainkey.'.$dataRecord['domain'].'.';
        $new_rr['type'] = 'TXT';
        $new_rr['data'] = 'v=DKIM1; t=s; p='.str_replace(array('-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----',"\r","\n"), '', $this->dataRecord['dkim_public']);
        $new_rr['aux'] = 0;
        $new_rr['active'] = 'Y';
        $new_rr['stamp'] = date('Y-m-d H:i:s');
        $new_rr['serial'] = $app->validate_dns->increase_serial($new_rr['serial']);
        $app->db->datalogInsert('dns_rr', $new_rr, 'id', $new_rr['zone']);
        $zone = $app->db->queryOneRecord("SELECT id, serial FROM dns_soa WHERE active = 'Y' AND id = ".$app->functions->intval($new_rr['zone']));
        $new_serial = $app->validate_dns->increase_serial($zone['serial']);
        $app->db->datalogUpdate('dns_soa', "serial = '".$new_serial."'", 'id', $zone['id']);
    }
}
interface/web/mail/templates/mail_domain_edit.htm
@@ -102,7 +102,7 @@
              <div class="form-group">
                <label for="dkim_private" class="col-sm-3 control-label">{tmpl_var name='dkim_private_txt'}</label>
                <textarea name="dkim_private" id="dkim_private" rows='10' cols='30'>{tmpl_var name='dkim_private'}</textarea>
<a href="javascript:setRequest('create')">{tmpl_var name='dkim_generate_txt'}</a>
                <a href="javascript:setRequest()">{tmpl_var name='dkim_generate_txt'}</a>
              </div>
        <div class="form-group">
                <textarea name="dkim_public" style="display:none;" id="dkim_public" rows='5' cols='30' readonly>{tmpl_var name='dkim_public'}</textarea>
interface/web/sites/aps_do_operation.php
@@ -84,29 +84,4 @@
        //echo $app->lng('Installation_remove');
        @header('Location:aps_installedpackages_list.php');
    }
else if($_GET['action'] == 'reinstall_instance')
    {
        // Make sure a valid package ID is given (also corresponding to the calling user)
        $client_id = 0;
        $is_admin = ($_SESSION['s']['user']['typ'] == 'admin') ? true : false;
        if(!$is_admin)
        {
            $cid = $app->db->queryOneRecord("SELECT client_id FROM client WHERE username = '".$app->db->quote($_SESSION['s']['user']['username'])."';");
            $client_id = $cid['client_id'];
        }
        // Assume that the given instance belongs to the currently calling client_id. Unimportant if status is admin
        if(!$gui->isValidInstanceID($_GET['id'], $client_id, $is_admin)) die($app->lng('Invalid ID'));
        // We've an InstanceID, so make sure the package is not enabled and InstanceStatus is still "installed"
        $check = $app->db->queryOneRecord("SELECT aps_instances.id FROM aps_instances, aps_packages
        WHERE aps_instances.package_id = aps_packages.id
        AND aps_instances.instance_status = ".INSTANCE_SUCCESS."
        AND aps_packages.package_status = ".PACKAGE_ENABLED."
        AND aps_instances.id = ".$app->db->quote($_GET['id']).";");
        if(!$check) die('Check failed'); // normally this might not happen at all, so just die
        $gui->reinstallInstance($_GET['id']);
        //echo $app->lng('Installation_task');
        @header('Location:aps_installedpackages_list.php');
    }
?>
interface/web/sites/aps_installedpackages_list.php
@@ -125,10 +125,6 @@
        else $ils = $rec['install_location'];
        $rec['install_location_short'] = $ils;
        // Also set a boolean-like variable for the reinstall button (vlibTemplate doesn't allow variable comparisons)
        // For a reinstall, the package must be already installed successfully and (still be) enabled
        if($rec['instance_status'] == INSTANCE_SUCCESS && $rec['package_status'] == PACKAGE_ENABLED)
            $rec['reinstall_possible'] = 'true';
        // Of course an instance can only then be removed when it's not already tagged for removal
        if($rec['instance_status'] != INSTANCE_REMOVE && $rec['instance_status'] != INSTANCE_INSTALL)
            $rec['delete_possible'] = 'true';
interface/web/sites/backup_stats.php
New file
@@ -0,0 +1,39 @@
<?php
require_once '../../lib/config.inc.php';
require_once '../../lib/app.inc.php';
$list_def_file = 'list/backup_stats.list.php';
/******************************************
* End Form configuration
******************************************/
//* Check permissions for module
$app->auth->check_module_permissions('sites');
$app->load('listform_actions','functions');
class list_action extends listform_actions {
    public function prepareDataRow($rec)
    {
        global $app;
        $rec = parent::prepareDataRow($rec);
        $rec['active'] = "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>";
        if ($rec['backup_interval'] === 'none') {
            $rec['active']        = "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>";
            $rec['backup_copies'] = 0;
        }
        $recBackup = $app->db->queryOneRecord('SELECT COUNT(backup_id) AS backup_count FROM web_backup WHERE parent_domain_id = ?', $rec['domain_id']);
        $rec['backup_copies_exists'] = $recBackup['backup_count'];
        return $rec;
    }
}
$list = new list_action;
$list->SQLExtWhere = "";
$list->onLoad();
interface/web/sites/lib/lang/ar_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Install location';
$wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
$wb['filter_txt'] = 'Search';
$wb['delete_txt'] = 'Delete';
$wb['reinstall_txt'] = 'Reinstall';
?>
interface/web/sites/lib/lang/bg_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Install location';
$wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
$wb['filter_txt'] = 'Search';
$wb['delete_txt'] = 'Delete';
$wb['reinstall_txt'] = 'Reinstall';
?>
interface/web/sites/lib/lang/br_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Install location';
$wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
$wb['filter_txt'] = 'Search';
$wb['delete_txt'] = 'Delete';
$wb['reinstall_txt'] = 'Reinstall';
?>
interface/web/sites/lib/lang/cz_aps_instances_list.lng
@@ -6,9 +6,7 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Umístění instalace';
$wb['pkg_delete_confirmation'] = 'Opravdu chcete smazat tuto instalaci ?';
$wb['pkg_reinstall_confirmation'] = 'Opravdu chcete přeinstalovat tento balíček se stejným nastavením ?';
$wb['filter_txt'] = 'Hledat';
$wb['delete_txt'] = 'Smazat';
$wb['reinstall_txt'] = 'Přeinstalovat';
?>
interface/web/sites/lib/lang/de_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Installationsort';
$wb['pkg_delete_confirmation'] = 'Soll diese Installation wirklich gelöscht werden?';
$wb['pkg_reinstall_confirmation'] = 'Soll das Paket wirklich mit den gleichen Einstellungen erneut installiert werden?';
$wb['filter_txt'] = 'Suche';
$wb['delete_txt'] = 'Löschen';
$wb['reinstall_txt'] = 'Neuinstallieren';
?>
interface/web/sites/lib/lang/de_backup_stats_list.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb["list_head_txt"]       = 'Backup Statistiken';
$wb["database_name_txt"]   = '';
$wb['active_txt']          = 'Aktiv';
$wb['domain_txt']          = 'Domain';
$wb['backup_count_txt']    = 'Anz. Backups';
$wb['backup_server_txt']   = 'Server';
$wb['backup_interval_txt'] = 'Intervall / Anz.';
?>
interface/web/sites/lib/lang/el_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Install location';
$wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
$wb['filter_txt'] = 'Search';
$wb['delete_txt'] = 'Delete';
$wb['reinstall_txt'] = 'Reinstall';
?>
interface/web/sites/lib/lang/en_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Install location';
$wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
$wb['filter_txt'] = 'Search';
$wb['delete_txt'] = 'Delete';
$wb['reinstall_txt'] = 'Reinstall';
?>
interface/web/sites/lib/lang/en_backup_stats_list.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb["list_head_txt"]       = 'Backup Stats';
$wb["database_name_txt"]   = '';
$wb['active_txt']          = 'Active';
$wb['domain_txt']          = 'Domain';
$wb['backup_count_txt']    = 'Backup count';
$wb['backup_server_txt']   = 'Server';
$wb['backup_interval_txt'] = 'Interval / cnt.';
?>
interface/web/sites/lib/lang/es_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Estado';
$wb['install_location_txt'] = 'Localización de instalación';
$wb['pkg_delete_confirmation'] = '¿Realmente quieres eliminar esta instalación?';
$wb['pkg_reinstall_confirmation'] = '¿Realmente quieres reinstalar este paquete con la misma configuración?';
$wb['filter_txt'] = 'Buscar';
$wb['delete_txt'] = 'Eliminar';
$wb['reinstall_txt'] = 'Reinstalar';
?>
interface/web/sites/lib/lang/fi_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Install location';
$wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
$wb['filter_txt'] = 'Search';
$wb['delete_txt'] = 'Delete';
$wb['reinstall_txt'] = 'Reinstall';
?>
interface/web/sites/lib/lang/fr_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Statut';
$wb['install_location_txt'] = 'Chemin d\'installation';
$wb['pkg_delete_confirmation'] = 'Etes-vous sûr de vouloir supprimer cette installation ?';
$wb['pkg_reinstall_confirmation'] = 'Etes-vous sûr de vouloir réinstaller ce package avec la même configuration ?';
$wb['filter_txt'] = 'Chercher';
$wb['delete_txt'] = 'Supprimer';
$wb['reinstall_txt'] = 'Réinstaller';
?>
interface/web/sites/lib/lang/hr_aps_instances_list.lng
@@ -6,10 +6,8 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Lokacija instalacije';
$wb['pkg_delete_confirmation'] = 'Da li stvarno želite obrisati ovu instalaciju?';
$wb['pkg_reinstall_confirmation'] = 'Da li stvarno želite reinstalirati ovaj paket sa istim postavkama?';
$wb['filter_txt'] = 'Traži';
$wb['delete_txt'] = 'Obriši';
$wb['reinstall_txt'] = 'Reinstaliraj';
?>
interface/web/sites/lib/lang/hu_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Install location';
$wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
$wb['filter_txt'] = 'Search';
$wb['delete_txt'] = 'Delete';
$wb['reinstall_txt'] = 'Reinstall';
?>
interface/web/sites/lib/lang/id_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Install location';
$wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
$wb['filter_txt'] = 'Search';
$wb['delete_txt'] = 'Delete';
$wb['reinstall_txt'] = 'Reinstall';
?>
interface/web/sites/lib/lang/it_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Install location';
$wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
$wb['filter_txt'] = 'Search';
$wb['delete_txt'] = 'Delete';
$wb['reinstall_txt'] = 'Reinstall';
?>
interface/web/sites/lib/lang/ja_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Install location';
$wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
$wb['filter_txt'] = 'Search';
$wb['delete_txt'] = 'Delete';
$wb['reinstall_txt'] = 'Reinstall';
?>
interface/web/sites/lib/lang/nl_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Install location';
$wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
$wb['filter_txt'] = 'Search';
$wb['delete_txt'] = 'Delete';
$wb['reinstall_txt'] = 'Reinstall';
?>
interface/web/sites/lib/lang/pl_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Lokalizacja instalacji';
$wb['pkg_delete_confirmation'] = 'Na pewno chcesz usunąć tę instalację?';
$wb['pkg_reinstall_confirmation'] = 'Na pewno chcesz przeinstalować ten pakiet z tymi samymi ustawieniami?';
$wb['filter_txt'] = 'Szukaj';
$wb['delete_txt'] = 'Usuń';
$wb['reinstall_txt'] = 'Przeinstaluj';
?>
interface/web/sites/lib/lang/pt_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Install location';
$wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
$wb['filter_txt'] = 'Search';
$wb['delete_txt'] = 'Delete';
$wb['reinstall_txt'] = 'Reinstall';
?>
interface/web/sites/lib/lang/ro_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Install location';
$wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
$wb['filter_txt'] = 'Search';
$wb['delete_txt'] = 'Delete';
$wb['reinstall_txt'] = 'Reinstall';
?>
interface/web/sites/lib/lang/ru_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Install location';
$wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
$wb['filter_txt'] = 'Search';
$wb['delete_txt'] = 'Delete';
$wb['reinstall_txt'] = 'Reinstall';
?>
interface/web/sites/lib/lang/se_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Installationsplats';
$wb['pkg_delete_confirmation'] = 'Vill du verkligen radera denna installation?';
$wb['pkg_reinstall_confirmation'] = 'Vill du verkligen installera om det här paketet med samma inställningar?';
$wb['filter_txt'] = 'Sök';
$wb['delete_txt'] = 'Radera';
$wb['reinstall_txt'] = 'Ominstallera';
?>
interface/web/sites/lib/lang/sk_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Install location';
$wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
$wb['filter_txt'] = 'Search';
$wb['delete_txt'] = 'Delete';
$wb['reinstall_txt'] = 'Reinstall';
?>
interface/web/sites/lib/lang/tr_aps_instances_list.lng
@@ -6,8 +6,6 @@
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Install location';
$wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
$wb['filter_txt'] = 'Search';
$wb['delete_txt'] = 'Delete';
$wb['reinstall_txt'] = 'Reinstall';
?>
interface/web/sites/lib/module.conf.php
@@ -189,6 +189,13 @@
    'link'    => 'sites/database_quota_stats.php',
    'html_id' => 'databse_quota_stats');
$items[] = array (
    'title'   => 'Backup Stats',
    'target'  => 'content',
    'link'    => 'sites/backup_stats.php',
    'html_id' => 'backup_stats'
);
$module['nav'][] = array(   'title' => 'Statistics',
    'open'  => 1,
    'items' => $items);
interface/web/sites/lib/remote.conf.php
@@ -8,6 +8,6 @@
$function_list['sites_web_domain_backup'] = 'Sites Backup functions';
$function_list['sites_web_aliasdomain_get,sites_web_aliasdomain_add,sites_web_aliasdomain_update,sites_web_aliasdomain_delete'] = 'Sites Aliasdomain functions';
$function_list['sites_web_subdomain_get,sites_web_subdomain_add,sites_web_subdomain_update,sites_web_subdomain_delete'] = 'Sites Subdomain functions';
$function_list['sites_aps_update_package_list,sites_aps_available_packages_list,sites_aps_install_package,sites_aps_get_package_details,sites_aps_get_package_file,sites_aps_get_package_settings,sites_aps_instance_get,sites_aps_instance_delete''] = 'Sites APS functions';
?>
interface/web/sites/list/backup_stats.list.php
New file
@@ -0,0 +1,52 @@
<?php
// Name of the list
$liste["name"]     = "backup_stats";
// Database table
$liste["table"]    = "web_domain";
// Index index field of the database table
$liste["table_idx"]   = "domain_id";
// Search Field Prefix
$liste["search_prefix"]  = "search_";
// Records per page
$liste["records_per_page"]  = "15";
// Script File of the list
$liste["file"]    = "backup_stats.php";
// Script file of the edit form
$liste["edit_file"]   = "backup_stats_edit.php";
// Paging Template
$liste["paging_tpl"]  = "templates/paging.tpl.htm";
// Enable auth
$liste["auth"]    = "yes";
// mark columns for php sorting (no real mySQL columns)
$liste["phpsort"] = array('used_sort', 'files');
/*****************************************************
* Suchfelder
*****************************************************/
$liste['item'][] = array (
       'field'    => 'server_id',
    'datatype' => 'INTEGER',
    'formtype' => 'SELECT',
    'op'       => '=',
    'prefix'   => '',
    'width'    => '',
    'value'    => '',
    'suffix'   => '',
    'datasource' => array (
          'type'        => 'SQL',
        'querystring' => 'SELECT a.server_id, a.server_name FROM server a, web_domain b WHERE (a.server_id = b.server_id) ORDER BY a.server_name',
        'keyfield'    => 'server_id',
        'valuefield'  => 'server_name'
    )
);
interface/web/sites/templates/aps_instances_list.htm
@@ -42,10 +42,7 @@
                                <tmpl_if name='delete_possible'>
                                    <a class="btn btn-default formbutton-delete" href="javascript: del_record('sites/aps_do_operation.php?action=delete_instance&id={tmpl_var name='id'}','{tmpl_var name='pkg_delete_confirmation'}')">{tmpl_var name='delete_txt'}</button>
                                </tmpl_if>
                                <tmpl_if name='reinstall_possible'>
                                    <a class="btn btn-default formbutton-default" href="javascript: del_record('sites/aps_do_operation.php?action=reinstall_instance&id={tmpl_var name='id'}','{tmpl_var name='pkg_reinstall_confirmation'}')">{tmpl_var name='reinstall_txt'}</button>
                                </tmpl_if>
                            </td>
                            </td>
                        </tr>
                    </tmpl_loop>
                </tbody>
interface/web/sites/templates/backup_stats_list.htm
New file
@@ -0,0 +1,48 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_list_backup_stats">
    <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_domain" scope="col">
                            <tmpl_var name="domain_txt">
                        </th>
                        <th class="tbl_col_server" scope="col">
                            <tmpl_var name="backup_server_txt">
                        </th>
                        <th class="tbl_col_interval" scope="col">
                            <tmpl_var name="backup_interval_txt">
                        </th>
                        <th class="tbl_col_backup_count" scope="col">
                            <tmpl_var name="backup_count_txt">
                        </th>
                    </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('sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a> </td>
                        <td class="tbl_col_domain"> <a href="#" onclick="loadContent('sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="domain"}</a> </td>
                        <td class="tbl_col_server"> <a href="#" onclick="loadContent('sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a> </td>
                        <td class="tbl_col_interval"> <a href="#" onclick="loadContent('sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="backup_interval"}</a> /  <a href="#" onclick="loadContent('sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="backup_copies"}</a> </td>
                        <td class="tbl_col_backup_count"> <a href="#" onclick="loadContent('sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="backup_copies_exists"}</a> </td>
                    </tr>
                    </tmpl_loop>
                </tbody>
                <tfoot>
                    <tr>
                        <td class="tbl_footer tbl_paging" colspan="5">
                            <tmpl_var name="paging">
                        </td>
                    </tr>
                </tfoot>
            </table>
        </fieldset>
    </div>
</div>
remoting_client/API-docs/navigation.html
@@ -196,6 +196,15 @@
<h3>S</h3>
<p><a href="server_get.html" target="content">server_get</a></p>
<p><a href="server_get_serverid_by_ip.html" target="content">server_get_serverid_by_ip</a></p>
<p><a href="sites_aps_available_packages_list.html" target="content">sites_aps_available_packages_list</a></p>
<p><a href="sites_aps_get_package_details.html" target="content">sites_aps_get_package_details</a></p>
<p><a href="sites_aps_get_package_file.html" target="content">sites_aps_get_package_file</a></p>
<p><a href="sites_aps_get_package_settings.html" target="content">sites_aps_get_package_settings</a></p>
<p><a href="sites_aps_install_package.html" target="content">sites_aps_install_package</a></p>
<p><a href="sites_aps_instance_get.html" target="content">sites_aps_instance_get</a></p>
<p><a href="sites_aps_instance_delete.html" target="content">sites_aps_instance_delete</a></p>
<p><a href="sites_aps_instance_settings_get.html" target="content">sites_aps_instance_settings_get</a></p>
<p><a href="sites_aps_update_package_list.html" target="content">sites_aps_update_package_list</a></p>
<p><a href="sites_cron_add.html" target="content">sites_cron_add</a></p>
<p><a href="sites_cron_delete.html" target="content">sites_cron_delete</a></p>
<p><a href="sites_cron_get.html" target="content">sites_cron_get</a></p>
@@ -226,7 +235,7 @@
<p><a href="sites_web_domain_get.html" target="content">sites_web_domain_get</a></p>
<p><a href="sites_web_domain_set_status.html" target="content">sites_web_domain_set_status</a></p>
<p><a href="sites_web_domain_update.html" target="content">sites_web_domain_update</a></p>
 p><a href="sites_web_domain_backup_list.html" target="content">sites_web_domain_backup_list</a></p>
<p><a href="sites_web_domain_backup_list.html" target="content">sites_web_domain_backup_list</a></p>
<p><a href="sites_web_domain_backup.html" target="content">sites_web_domain_backup</a></p>
<p><a href="sites_web_subdomain_add.html" target="content">sites_web_subdomain_add</a></p>
<p><a href="sites_web_subdomain_delete.html" target="content">sites_web_subdomain_delete</a></p>
remoting_client/API-docs/sites_aps_available_packages_list.html
New file
@@ -0,0 +1,29 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>ISPCOnfig 3 remote API documentation</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <link rel="stylesheet" type="text/css" href="definitionen.css">
  <style type="text/css">
  </style></head>
<body>
<div style="padding:40px">
<h1>sites_aps_available_packages_list(<span class="var">$session_id</span>, <span class="var">$params</span>);</h1>
<br>
<p class="headgrp">Description: </p>
<p class="margin"> Reads all available packages with state PACKAGE_ENABLED. If set param all_packages to true, also includes PACKAGE_LOCKED.</p><br>
<p class="headgrp">Input Variables: </p>
<p class="margin"> <span class="var">$session_id</span>, <span class="var">$params</span></p>
<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
<p class="margin"> all_packages&nbsp;&nbsp;(<span class="paratype">boolean</span>) </p>
<p class="headgrp">Output: </p>
<p class="margin"> Returns array with all selected package records.</p>
<!--<b>Output:</b>
<p style="margin-left:100px">Gives a record of </p> -->
</div>
</body></html>
remoting_client/API-docs/sites_aps_get_package_details.html
New file
@@ -0,0 +1,29 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>ISPCOnfig 3 remote API documentation</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <link rel="stylesheet" type="text/css" href="definitionen.css">
  <style type="text/css">
  </style></head>
<body>
<div style="padding:40px">
<h1>sites_aps_get_package_details(<span class="var">$session_id</span>, <span class="var">$primary_id</span>);</h1>
<br>
<p class="headgrp">Description: </p>
<p class="margin"> Gets all possible details for selected package.</p><br>
<p class="headgrp">Input Variables: </p>
<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span></p>
<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
<p class="margin"> None</p>
<p class="headgrp">Output: </p>
<p class="margin"> Returns array with all details of selected package.</p>
<!--<b>Output:</b>
<p style="margin-left:100px">Gives a record of </p> -->
</div>
</body></html>
remoting_client/API-docs/sites_aps_get_package_file.html
New file
@@ -0,0 +1,29 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>ISPCOnfig 3 remote API documentation</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <link rel="stylesheet" type="text/css" href="definitionen.css">
  <style type="text/css">
  </style></head>
<body>
<div style="padding:40px">
<h1>sites_aps_get_package_file(<span class="var">$session_id</span>, <span class="var">$primary_id</span>, <span class="var">$filename</span>);</h1>
<br>
<p class="headgrp">Description: </p>
<p class="margin"> Gets the file with given name (like screenshots or icon) of the selected package. Use sites_aps_get_package_details to get all available files of this package.</p><br>
<p class="headgrp">Input Variables: </p>
<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span>, <span class="var">$filename</span></p>
<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
<p class="margin"> None</p>
<p class="headgrp">Output: </p>
<p class="margin"> Returns base64_encoded file content of selected file.<br />Use the followoing example code to save file content over remote api:<br /><span class="var">file_put_contents($file, base64_decode(sites_aps_get_package_file($session_id, $primary_id, $filename)));</span></p>
<!--<b>Output:</b>
<p style="margin-left:100px">Gives a record of </p> -->
</div>
</body></html>
remoting_client/API-docs/sites_aps_get_package_settings.html
New file
@@ -0,0 +1,29 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>ISPCOnfig 3 remote API documentation</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <link rel="stylesheet" type="text/css" href="definitionen.css">
  <style type="text/css">
  </style></head>
<body>
<div style="padding:40px">
<h1>sites_aps_get_package_settings(<span class="var">$session_id</span>, <span class="var">$primary_id</span>);</h1>
<br>
<p class="headgrp">Description: </p>
<p class="margin"> Gets all possible settings for selected package.</p><br>
<p class="headgrp">Input Variables: </p>
<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span></p>
<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
<p class="margin"> None</p>
<p class="headgrp">Output: </p>
<p class="margin"> Returns array with all settings of selected package.</p>
<!--<b>Output:</b>
<p style="margin-left:100px">Gives a record of </p> -->
</div>
</body></html>
remoting_client/API-docs/sites_aps_install_package.html
New file
@@ -0,0 +1,29 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>ISPCOnfig 3 remote API documentation</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <link rel="stylesheet" type="text/css" href="definitionen.css">
  <style type="text/css">
  </style></head>
<body>
<div style="padding:40px">
<h1>sites_aps_install_package(<span class="var">$session_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span>);</h1>
<br>
<p class="headgrp">Description: </p>
<p class="margin"> Starts installation of the selected package in given main_domains webfolder.</p><br>
<p class="headgrp">Input Variables: </p>
<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span></p>
<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
<p class="margin"> main_domain&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>) </p>
<p class="headgrp">Output: </p>
<p class="margin"> Returns new instance id or false.</p>
<!--<b>Output:</b>
<p style="margin-left:100px">Gives a record of </p> -->
</div>
</body></html>
remoting_client/API-docs/sites_aps_instance_delete.html
New file
@@ -0,0 +1,29 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>ISPCOnfig 3 remote API documentation</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <link rel="stylesheet" type="text/css" href="definitionen.css">
  <style type="text/css">
  </style></head>
<body>
<div style="padding:40px">
<h1>sites_aps_instance_delete(<span class="var">$session_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span>);</h1>
<br>
<p class="headgrp">Description: </p>
<p class="margin"> Starts deletion of the selected APS instance. If param keep_database is set true, database will not be deleted.</p><br>
<p class="headgrp">Input Variables: </p>
<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span></p>
<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
<p class="margin"> keep_database&nbsp;&nbsp;(<span class="paratype">boolean</span>) </p>
<p class="headgrp">Output: </p>
<p class="margin"> Returns true if deletion is started.</p>
<!--<b>Output:</b>
<p style="margin-left:100px">Gives a record of </p> -->
</div>
</body></html>
remoting_client/API-docs/sites_aps_instance_get.html
New file
@@ -0,0 +1,29 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>ISPCOnfig 3 remote API documentation</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <link rel="stylesheet" type="text/css" href="definitionen.css">
  <style type="text/css">
  </style></head>
<body>
<div style="padding:40px">
<h1>sites_aps_instance_get(<span class="var">$session_id</span>, <span class="var">$primary_id</span>);</h1>
<br>
<p class="headgrp">Description: </p>
<p class="margin"> Gets record of given instance id.</p><br>
<p class="headgrp">Input Variables: </p>
<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span></p>
<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
<p class="margin"> None</p>
<p class="headgrp">Output: </p>
<p class="margin"> Returns record of APS instance.</p>
<!--<b>Output:</b>
<p style="margin-left:100px">Gives a record of </p> -->
</div>
</body></html>
remoting_client/API-docs/sites_aps_instance_settings_get.html
New file
@@ -0,0 +1,29 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>ISPCOnfig 3 remote API documentation</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <link rel="stylesheet" type="text/css" href="definitionen.css">
  <style type="text/css">
  </style></head>
<body>
<div style="padding:40px">
<h1>sites_aps_instance_settings_get(<span class="var">$session_id</span>, <span class="var">$primary_id</span>);</h1>
<br>
<p class="headgrp">Description: </p>
<p class="margin"> Gets record of given instance ids settings.</p><br>
<p class="headgrp">Input Variables: </p>
<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span></p>
<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
<p class="margin"> None</p>
<p class="headgrp">Output: </p>
<p class="margin"> Returns record of APS instance settings.</p>
<!--<b>Output:</b>
<p style="margin-left:100px">Gives a record of </p> -->
</div>
</body></html>
remoting_client/API-docs/sites_aps_update_package_list.html
New file
@@ -0,0 +1,29 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>ISPCOnfig 3 remote API documentation</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <link rel="stylesheet" type="text/css" href="definitionen.css">
  <style type="text/css">
  </style></head>
<body>
<div style="padding:40px">
<h1>sites_aps_update_package_list(<span class="var">$session_id</span>);</h1>
<br>
<p class="headgrp">Description: </p>
<p class="margin"> Update available package list. Starts the ApsCrawler in server mode. May take a while.</p><br>
<p class="headgrp">Input Variables: </p>
<p class="margin"> <span class="var">$session_id</span></p>
<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
<p class="margin"> None</p>
<p class="headgrp">Output: </p>
<p class="margin"> always true</p>
<!--<b>Output:</b>
<p style="margin-left:100px">Gives a record of </p> -->
</div>
</body></html>
server/conf/bastille-firewall.cfg.master
@@ -75,7 +75,7 @@
# use the "\" continuation character (so Bastille can change the
# values if it is run more than once)
TRUSTED_IFACES="lo"                                        # MINIMAL/SAFEST
PUBLIC_IFACES="eth+ ppp+ slip+ venet+ bond+"                        # SAFEST
PUBLIC_IFACES="eth+ ppp+ slip+ venet+ bond+ eno+"                        # SAFEST
INTERNAL_IFACES=""                                # SAFEST
server/lib/classes/aps_installer.inc.php
@@ -376,7 +376,7 @@
           setups get enough time to create the database */
        if($this->handle_type == 'install') {
            for($n = 1; $n < 15; $n++) {
                $link = mysql_connect($newdb_host, $newdb_login, $newdb_pw);
                $link = mysqli_connect($newdb_host, $newdb_login, $newdb_pw);
                if (!$link) {
                    unset($link);
                    sleep(5);
server/lib/classes/cron.d/500-backup_mail.inc.php
@@ -75,10 +75,10 @@
                foreach($records as $rec) {
                    //* Do the mailbox backup
                    if($rec['backup_interval'] == 'daily' or ($rec['backup_interval'] == 'weekly' && date('w') == 0) or ($rec['backup_interval'] == 'monthly' && date('d') == '01')) {
                        $email = $rec['email'];
                        $email=explode("@",$email)[1];
                        $domain_rec=$app->db->queryOneRecord("SELECT * FROM mail_domain WHERE domain = ?", $email);
                        unset($email);
                        $temp = explode("@",$email);
                        $domain = $temp[1];
                        unset($temp);;
                        $domain_rec=$app->db->queryOneRecord("SELECT * FROM mail_domain WHERE domain = ?", $domain);
                        $mail_backup_dir = $backup_dir.'/mail'.$domain_rec['domain_id'];
                        if(!is_dir($mail_backup_dir)) mkdir($mail_backup_dir, 0750);
server/plugins-available/mail_plugin_dkim.inc.php
@@ -143,7 +143,12 @@
                    mkdir($mail_config['dkim_path'], 0755, true);
                    $app->log('No user amavis or vscan found - using root for '.$mail_config['dkim_path'], LOGLEVEL_WARNING);
                }
            }
            } else {
                if (!$app->system->checkpath($mail_config['dkim_path'])) {
                    $app->log('Unable to write DKIM settings - invalid DKIM-Path (symlink?)', LOGLEVEL_ERROR);
                    $check=false;
                }
            }
            if (!is_writeable($mail_config['dkim_path'])) {
                $app->log('DKIM Path '.$mail_config['dkim_path'].' not writeable.', LOGLEVEL_ERROR);