From 4bb60f201b868bdf455eab7bf97d4bc34c6e11c4 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Tue, 4 Jul 2023 23:12:23 +0200 Subject: [PATCH] Use DMARC form to edit DMARC records, #6387 --- interface/web/dns/dns_dmarc_edit.php | 22 +++++++++++++++------- interface/web/dns/dns_txt_edit.php | 3 +++ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/interface/web/dns/dns_dmarc_edit.php b/interface/web/dns/dns_dmarc_edit.php index e194aeb835..46c33c2b40 100644 --- a/interface/web/dns/dns_dmarc_edit.php +++ b/interface/web/dns/dns_dmarc_edit.php @@ -73,10 +73,6 @@ class page_action extends tform_actions { global $app, $conf; $zone = $app->functions->intval($_GET['zone']); - // get domain-name - $sql = "SELECT * FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'); - $rec = $app->db->queryOneRecord($sql, $zone); - $domain_name = rtrim($rec['origin'], '.'); // set defaults $dmarc_policy = 'none'; @@ -86,15 +82,17 @@ class page_action extends tform_actions { $dmarc_pct = 100; $dmarc_ri = 86400; $dmarc_sp = 'same'; + $id = $app->functions->intval($_GET['id']); //* check for an existing dmarc-record - $sql = "SELECT data, active FROM dns_rr WHERE data LIKE 'v=DMARC1%' AND zone = ? AND name LIKE ? AND " . $app->tform->getAuthSQL('r') . " ORDER BY (name = ?) DESC"; - $rec = $app->db->queryOneRecord($sql, $zone, '_dmarc%', '_dmarc.'.$domain_name.'.'); + $sql = "SELECT zone, data, active FROM dns_rr WHERE data LIKE 'v=DMARC1%' AND ((zone = ? AND name LIKE ?) OR id = ?) AND " . $app->tform->getAuthSQL('r') . " ORDER BY (name = ?) DESC"; + $rec = $app->db->queryOneRecord($sql, $zone, '_dmarc%', $id, '_dmarc.'.$domain_name.'.'); if (isset($rec) && !empty($rec) ) { $this->id = 1; $old_data = strtolower($rec['data']); $app->tpl->setVar("data", $old_data, true); - //if ($rec['active'] == 'Y') $app->tpl->setVar("active", "CHECKED"); else $app->tpl->setVar("active", "UNCHECKED"); + if ($rec['active'] == 'Y') $app->tpl->setVar("active", ''); + $zone = $rec['zone']; $dmarc_rua = ''; $dmarc_ruf = ''; $dmac_rf = ''; @@ -121,6 +119,16 @@ class page_action extends tform_actions { if (preg_match("/^ri=/", $part)) $dmarc_ri = str_replace('ri=', '', $part); } } + else { + // Default to active. + $app->tpl->setVar("active", ''); + } + + // get domain-name + $sql = "SELECT * FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'); + $rec = $app->db->queryOneRecord($sql, $zone); + $domain_name = rtrim($rec['origin'], '.'); + //set html-values $app->tpl->setVar('domain', $domain_name, true); diff --git a/interface/web/dns/dns_txt_edit.php b/interface/web/dns/dns_txt_edit.php index 7caa27d040..d9e77d122f 100644 --- a/interface/web/dns/dns_txt_edit.php +++ b/interface/web/dns/dns_txt_edit.php @@ -57,6 +57,9 @@ class page_action extends dns_page_action { if ('v=spf1' === mb_substr($this->dataRecord['data'], 0, 6)) { header(sprintf('Location: dns_spf_edit.php?id=%d', $this->dataRecord['id'])); exit; + } elseif ("v=DMARC1" === mb_substr($this->dataRecord["data"], 0, 8)) { + header(sprintf("Location: dns_dmarc_edit.php?id=%d", $this->dataRecord["id"])); + exit; } } } -- GitLab