outsource some dns functions to own files; allow opening of dns-editor only for domains that belong to the user (or the user has permission to edit as admin/reseller)
Signed-off-by: Michael Kaufmann (d00p) <d00p@froxlor.org>
This commit is contained in:
@@ -29,15 +29,7 @@ $content = isset($_POST['record']['content']) ? trim($_POST['record']['content']
|
||||
$ttl = isset($_POST['record']['ttl']) ? (int) $_POST['record']['ttl'] : 18000;
|
||||
|
||||
// get domain-name
|
||||
$dom_stmt = Database::prepare("SELECT domain, isbinddomain FROM `" . TABLE_PANEL_DOMAINS . "` WHERE id = :did");
|
||||
$domain = Database::pexecute_first($dom_stmt, array(
|
||||
'did' => $domain_id
|
||||
));
|
||||
|
||||
if ($domain['isbinddomain'] != '1') {
|
||||
standard_error('dns_domain_nodns');
|
||||
}
|
||||
$domain = $idna_convert->decode($domain['domain']);
|
||||
$domain = getAllowedDomainEntry($domain_id, AREA, $userinfo, $idna_convert);
|
||||
|
||||
// select all entries
|
||||
$sel_stmt = Database::prepare("SELECT * FROM `" . TABLE_DOMAIN_DNS . "` WHERE domain_id = :did");
|
||||
|
||||
@@ -278,77 +278,6 @@ function addRequiredEntry($record = '@', $type = 'A', &$required)
|
||||
$required[$type][md5($record)] = $record;
|
||||
}
|
||||
|
||||
function generateDkimEntries($domain)
|
||||
{
|
||||
$zone_dkim = array();
|
||||
|
||||
if (Settings::Get('dkim.use_dkim') == '1' && $domain['dkim'] == '1' && $domain['dkim_pubkey'] != '') {
|
||||
// start
|
||||
$dkim_txt = 'v=DKIM1;';
|
||||
|
||||
// algorithm
|
||||
$algorithm = explode(',', Settings::Get('dkim.dkim_algorithm'));
|
||||
$alg = '';
|
||||
foreach ($algorithm as $a) {
|
||||
if ($a == 'all') {
|
||||
break;
|
||||
} else {
|
||||
$alg .= $a . ':';
|
||||
}
|
||||
}
|
||||
|
||||
if ($alg != '') {
|
||||
$alg = substr($alg, 0, - 1);
|
||||
$dkim_txt .= 'h=' . $alg . ';';
|
||||
}
|
||||
|
||||
// notes
|
||||
if (trim(Settings::Get('dkim.dkim_notes') != '')) {
|
||||
$dkim_txt .= 'n=' . trim(Settings::Get('dkim.dkim_notes')) . ';';
|
||||
}
|
||||
|
||||
// key
|
||||
$dkim_txt .= 'k=rsa;p=' . trim(preg_replace('/-----BEGIN PUBLIC KEY-----(.+)-----END PUBLIC KEY-----/s', '$1', str_replace("\n", '', $domain['dkim_pubkey']))) . ';';
|
||||
|
||||
// service-type
|
||||
if (Settings::Get('dkim.dkim_servicetype') == '1') {
|
||||
$dkim_txt .= 's=email;';
|
||||
}
|
||||
|
||||
// end-part
|
||||
$dkim_txt .= 't=s';
|
||||
|
||||
// split if necessary
|
||||
$txt_record_split = '';
|
||||
$lbr = 50;
|
||||
for ($pos = 0; $pos <= strlen($dkim_txt) - 1; $pos += $lbr) {
|
||||
$txt_record_split .= (($pos == 0) ? '("' : "\t\t\t\t\t \"") . substr($dkim_txt, $pos, $lbr) . (($pos >= strlen($dkim_txt) - $lbr) ? '")' : '"') . "\n";
|
||||
}
|
||||
|
||||
// dkim-entry
|
||||
$zone_dkim[] = $txt_record_split;
|
||||
|
||||
// adsp-entry
|
||||
if (Settings::Get('dkim.dkim_add_adsp') == "1") {
|
||||
$adsp = '"dkim=';
|
||||
switch ((int) Settings::Get('dkim.dkim_add_adsppolicy')) {
|
||||
case 0:
|
||||
$adsp .= 'unknown"';
|
||||
break;
|
||||
case 1:
|
||||
$adsp .= 'all"';
|
||||
break;
|
||||
case 2:
|
||||
$adsp .= 'discardable"';
|
||||
break;
|
||||
}
|
||||
$zone_dkim[] = $adsp;
|
||||
}
|
||||
}
|
||||
|
||||
return $zone_dkim;
|
||||
}
|
||||
|
||||
function encloseTXTContent($txt_content, $isMultiLine = false)
|
||||
{
|
||||
// check that TXT content is enclosed in " "
|
||||
|
||||
87
lib/functions/dns/function.generateDkimEntries.php
Normal file
87
lib/functions/dns/function.generateDkimEntries.php
Normal file
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This file is part of the Froxlor project.
|
||||
* Copyright (c) 2016 the Froxlor Team (see authors).
|
||||
*
|
||||
* For the full copyright and license information, please view the COPYING
|
||||
* file that was distributed with this source code. You can also view the
|
||||
* COPYING file online at http://files.froxlor.org/misc/COPYING.txt
|
||||
*
|
||||
* @copyright (c) the authors
|
||||
* @author Froxlor team <team@froxlor.org> (2016-)
|
||||
* @license GPLv2 http://files.froxlor.org/misc/COPYING.txt
|
||||
* @package Functions
|
||||
*
|
||||
*/
|
||||
|
||||
function generateDkimEntries($domain)
|
||||
{
|
||||
$zone_dkim = array();
|
||||
|
||||
if (Settings::Get('dkim.use_dkim') == '1' && $domain['dkim'] == '1' && $domain['dkim_pubkey'] != '') {
|
||||
// start
|
||||
$dkim_txt = 'v=DKIM1;';
|
||||
|
||||
// algorithm
|
||||
$algorithm = explode(',', Settings::Get('dkim.dkim_algorithm'));
|
||||
$alg = '';
|
||||
foreach ($algorithm as $a) {
|
||||
if ($a == 'all') {
|
||||
break;
|
||||
} else {
|
||||
$alg .= $a . ':';
|
||||
}
|
||||
}
|
||||
|
||||
if ($alg != '') {
|
||||
$alg = substr($alg, 0, - 1);
|
||||
$dkim_txt .= 'h=' . $alg . ';';
|
||||
}
|
||||
|
||||
// notes
|
||||
if (trim(Settings::Get('dkim.dkim_notes') != '')) {
|
||||
$dkim_txt .= 'n=' . trim(Settings::Get('dkim.dkim_notes')) . ';';
|
||||
}
|
||||
|
||||
// key
|
||||
$dkim_txt .= 'k=rsa;p=' . trim(preg_replace('/-----BEGIN PUBLIC KEY-----(.+)-----END PUBLIC KEY-----/s', '$1', str_replace("\n", '', $domain['dkim_pubkey']))) . ';';
|
||||
|
||||
// service-type
|
||||
if (Settings::Get('dkim.dkim_servicetype') == '1') {
|
||||
$dkim_txt .= 's=email;';
|
||||
}
|
||||
|
||||
// end-part
|
||||
$dkim_txt .= 't=s';
|
||||
|
||||
// split if necessary
|
||||
$txt_record_split = '';
|
||||
$lbr = 50;
|
||||
for ($pos = 0; $pos <= strlen($dkim_txt) - 1; $pos += $lbr) {
|
||||
$txt_record_split .= (($pos == 0) ? '("' : "\t\t\t\t\t \"") . substr($dkim_txt, $pos, $lbr) . (($pos >= strlen($dkim_txt) - $lbr) ? '")' : '"') . "\n";
|
||||
}
|
||||
|
||||
// dkim-entry
|
||||
$zone_dkim[] = $txt_record_split;
|
||||
|
||||
// adsp-entry
|
||||
if (Settings::Get('dkim.dkim_add_adsp') == "1") {
|
||||
$adsp = '"dkim=';
|
||||
switch ((int) Settings::Get('dkim.dkim_add_adsppolicy')) {
|
||||
case 0:
|
||||
$adsp .= 'unknown"';
|
||||
break;
|
||||
case 1:
|
||||
$adsp .= 'all"';
|
||||
break;
|
||||
case 2:
|
||||
$adsp .= 'discardable"';
|
||||
break;
|
||||
}
|
||||
$zone_dkim[] = $adsp;
|
||||
}
|
||||
}
|
||||
|
||||
return $zone_dkim;
|
||||
}
|
||||
49
lib/functions/dns/function.getAllowedDomainEntry.php
Normal file
49
lib/functions/dns/function.getAllowedDomainEntry.php
Normal file
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This file is part of the Froxlor project.
|
||||
* Copyright (c) 2016 the Froxlor Team (see authors).
|
||||
*
|
||||
* For the full copyright and license information, please view the COPYING
|
||||
* file that was distributed with this source code. You can also view the
|
||||
* COPYING file online at http://files.froxlor.org/misc/COPYING.txt
|
||||
*
|
||||
* @copyright (c) the authors
|
||||
* @author Froxlor team <team@froxlor.org> (2016-)
|
||||
* @license GPLv2 http://files.froxlor.org/misc/COPYING.txt
|
||||
* @package Functions
|
||||
*
|
||||
*/
|
||||
|
||||
function getAllowedDomainEntry($domain_id, $area = 'customer', $userinfo, &$idna_convert)
|
||||
{
|
||||
$dom_data = array(
|
||||
'did' => $domain_id
|
||||
);
|
||||
|
||||
$where_clause = '';
|
||||
if ($area == 'admin') {
|
||||
if ($userinfo['domains_see_all'] != '1') {
|
||||
$where_clause = '`adminid` = :uid';
|
||||
$dom_data['uid'] = $userinfo['userid'];
|
||||
}
|
||||
} else {
|
||||
$where_clause = '`customerid` = :uid';
|
||||
$dom_data['uid'] = $userinfo['userid'];
|
||||
}
|
||||
|
||||
$dom_stmt = Database::prepare("
|
||||
SELECT domain, isbinddomain
|
||||
FROM `" . TABLE_PANEL_DOMAINS . "`
|
||||
WHERE " . $where_clause . " AND id = :did
|
||||
");
|
||||
$domain = Database::pexecute_first($dom_stmt, $dom_data);
|
||||
|
||||
if ($domain) {
|
||||
if ($domain['isbinddomain'] != '1') {
|
||||
standard_error('dns_domain_nodns');
|
||||
}
|
||||
return $idna_convert->decode($domain['domain']);
|
||||
}
|
||||
standard_error('dns_notfoundorallowed');
|
||||
}
|
||||
@@ -2009,3 +2009,4 @@ $lng['success']['dns_record_added'] = 'Record added successfully';
|
||||
$lng['success']['dns_record_deleted'] = 'Record deleted successfully';
|
||||
$lng['dnseditor']['edit'] = 'edit DNS';
|
||||
$lng['dnseditor']['records'] = 'records';
|
||||
$lng['error']['dns_notfoundorallowed'] = 'Domain not found or no permission';
|
||||
|
||||
@@ -1662,3 +1662,4 @@ $lng['success']['dns_record_added'] = 'Eintrag erfolgreich hinzugefügt';
|
||||
$lng['success']['dns_record_deleted'] = 'Eintrag erfolgreich entfernt';
|
||||
$lng['dnseditor']['edit'] = 'DNS editieren';
|
||||
$lng['dnseditor']['records'] = 'Einträge';
|
||||
$lng['error']['dns_notfoundorallowed'] = 'Domain nicht gefunden oder keine Berechtigung';
|
||||
|
||||
Reference in New Issue
Block a user