From 81b7f708335372f9ac4e35b5443ad34d15723ce3 Mon Sep 17 00:00:00 2001
From: Florian Schaal <florian@schaal-24.de>
Date: Wed, 09 Mar 2016 10:15:17 -0500
Subject: [PATCH] fixed dns-import for dmarc and dkim (Fixes #3792)
---
interface/web/dns/dns_import.php | 154 ++++++++-------------------------------------------
1 files changed, 25 insertions(+), 129 deletions(-)
diff --git a/interface/web/dns/dns_import.php b/interface/web/dns/dns_import.php
index 7e96a42..2e4d58e 100644
--- a/interface/web/dns/dns_import.php
+++ b/interface/web/dns/dns_import.php
@@ -215,9 +215,22 @@
foreach($lines as $line){
$line = trim($line);
if ($line != '' && substr($line, 0, 1) != ';'){
- if(strpos($line, ";") !== FALSE) $line = substr($line, 0, strpos($line, ";"));
- if(strpos($line, "(") !== FALSE) $line = substr($line, 0, strpos($line, "("));
- if(strpos($line, ")") !== FALSE) $line = substr($line, 0, strpos($line, ")"));
+ if(strpos($line, ";") !== FALSE) {
+ if (!preg_match("/v=DKIM|v=DMARC/",$line)) {
+ $line = substr($line, 0, strpos($line, ";"));
+ }
+ }
+ if(strpos($line, "(") !== FALSE ) {
+ if (!preg_match("/v=DKIM/",$line)) {
+ $line = substr($line, 0, strpos($line, "("));
+ }
+ }
+ if(strpos($line, ")") !== FALSE ) {
+ if (!preg_match("/v=DKIM/",$line)) {
+ $line = substr($line, 0, strpos($line, ")"));
+ }
+ }
+
$line = trim($line);
if ($line != ''){
$sPattern = '/\s+/m';
@@ -253,10 +266,17 @@
$parts = explode(' ', $line);
- // make all elements lowercase
+ // make elements lowercase
+ $dkim=@($parts[3]=='"v=DKIM1;')?true:false;
+ $dmarc=@($parts[3]=='"v=DMARC1;')?true:false;
+
$new_parts = array();
foreach($parts as $part){
- $new_parts[] = strtolower($part);
+ if(!$dkim && !$dmarc) {
+ $new_parts[] = strtolower($part);
+ } else {
+ $new_parts[] = $part;
+ }
}
unset($parts);
$parts = $new_parts;
@@ -556,130 +576,6 @@
}
$i++;
}
-
- /*
- $i = 0;
- $r = 0;
- $s = 0;
- $dns_rr = array();
- foreach ($lines as $line)
- {
- $line = trim($line);
- if ($line != '' && substr($line,0,1) != ';' && substr($line,0,1) != '$')
- {
- $line = str_replace("\n",NULL,$line);
- $i++;
-
- // TODO - Find a better way to parse the SOA record. Lazy checking.
- if ($i <= 7)
- {
- if ($i > 1)
- {
- $s++;
- $line = str_replace("\t",NULL,$line);
- if (!empty($line))
- {
- print(strpos(";",$line));
- $line = substr($line,0,strpos($line,";"));
- if ($s == 1)
- $soa['serial'] = $line;
- else if ($s == 2)
- $soa['refresh'] = $line;
- else if ($s == 3)
- $soa['retry'] = $line;
- else if ($s == 4)
- $soa['expire'] = $line;
- else if ($s == 5)
- $soa['minimum'] = $line;
-
- }
- }
- else
- {
- $line = str_replace("\t",",",$line);
- $line = str_replace(" ",",",$line);
- $recs = explode(",",$line);
-
- foreach ($recs as $key => $rec)
- {
- $rec = trim($rec);
- if($rec == '') continue;
- //name type data aux ttl active
- if ($key == 0)
- {
- if ($rec == '@')
- {
- $rec = $name;
- }
-
- $soa['name'] = $rec;
- }
-
- if ($key != 0 && strtolower($rec) == 'soa')
- {
- $typekeys[$s] = $key;
- }
- else if ($key > $typekey[$r])
- {
- if ($rec != "" && $rec != "(")
- {
- $rec = explode(" ",$rec);
-
- $soa['ns'] = $servers[0]['server_name'];
- $soa['mbox'] = $rec[1];
- }
- }
- }
- }
- }
- else
- {
- $line = str_replace("\n","",trim($line));
-
- if (!empty($line))
- {
-
- preg_match_all('/(.*?)\s*IN\s*(A|CNAME|MX|TXT|NS|AAAA)\s*(.*)/',$line, $recs);
-
- if ($recs[1][0] == '@' || trim($recs[1][0]) == "")
- {
- $recs[1][0] = $name;
- }
- $dns_rr[$r]['name'] = $recs[1][0];
- $dns_rr[$r]['type'] = $recs[2][0];
- if (strtolower($dns_rr[$r]['type'])=='mx')
- {
- $recs[3][0] = str_replace(" ","\t",$recs[3][0]);
- $mx[$r] = explode("\t",$recs[3][0]);
- for ($m=1;$m<count($mx[$r]);$m++)
- {
- if (!empty($mx[$r][$m]))
- $dns_rr[$r]['data'] = $mx[$r][$m];
- }
-
- $dns_rr[$r]['aux'] = $mx[$r][0];
- }
- else if (strtolower($dns_rr[$r]['type'])=='txt')
- {
- $dns_rr[$r]['data'] = substr($recs[3][0],1,(strlen($recs[3][0])-2));
- }
- else
- {
- $dns_rr[$r]['data'] = $recs[3][0];
- }
-
- if (strtolower($dns_rr[$r]['type'])=='ns' && strtolower($dns_rr[$r]['name'])==$name)
- {
- unset($dns_rr[$r]);
- }
-
- $r++;
- }
- }
-
- }
- }
- */
foreach ($servers as $server){
$dns_rr[$r]['name'] = $soa['name'];
--
Gitblit v1.9.1