Skip to content

Commit 131cfa2

Browse files
committed
Added test file and explanation
1 parent e0cce85 commit 131cfa2

File tree

3 files changed

+57
-45
lines changed

3 files changed

+57
-45
lines changed

readme.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Please feel free to test, use, add or modify.
1010

1111
To use this suite:
1212
- Clone this repository
13-
- php test.php <domainname>
13+
- php test.php domainname
1414

1515
At this time it will only test .nl, .eu and .com domains because the nameservers are known for these extensions. Nameservers can be added for other extensions.
1616
See DNS/dnsProtocol.php function registrynameservers()

test.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22
include_once('validate.php');
33

44

5-
if ($argc<1) {
5+
if ($argc<2) {
66
die("Usage: test.php <domainname>\n\n");
77
}
88
$domainname = $argv[1];
99

1010
try {
1111
validateDomain($domainname);
12+
echo "$domainname validation succesful\n";
1213
} catch (DnsException $e) {
1314
echo "ERROR: ".$e->getMessage()."\n";
1415
}

validate.php

+54-43
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
function validateDomain($domainname)
66
{
7+
$parentkeys = null;
78
$domainname = strtolower($domainname);
89
$dns = new dnsProtocol(false);
910
$tld = substr($domainname,strpos($domainname,'.')+1);
@@ -21,6 +22,7 @@ function validateDomain($domainname)
2122
$ns = $result->getNameserverResults();
2223
foreach ($ns as $n)
2324
{
25+
/* @var $n dnsNSresult */
2426
$nameservers[]=$n->getNameserver();
2527
}
2628
$result = $dns->Query($domainname,'DS');
@@ -29,13 +31,14 @@ function validateDomain($domainname)
2931
#
3032
# No DS record found at parent: domain is not secured
3133
#
32-
return false;
34+
throw new DnsException("No DS record found at parent: Domainname is not secured");
3335
}
3436
else
3537
{
3638
$ds = $result->getResourceResults();
3739
foreach ($ds as $d)
3840
{
41+
/* @var $d dnsDSresult */
3942
$pk['key']=$d->getKey();
4043
$pk['keytag']=$d->getKeytag();
4144
$pk['algorithm']=$d->getAlgorithm();
@@ -50,52 +53,57 @@ function validateDomain($domainname)
5053
#
5154
# Retrieve all necessary records
5255
#
53-
54-
foreach ($nameservers as $ns)
55-
{
56-
$dns->setServer($ns);
57-
$result = $dns->Query($domainname,'RRSIG');
58-
if ($result->getResourceResultCount()==0)
59-
{
60-
throw new DnsException("No RRSIG records found on ".$ns." for domain name ".$domainname);
61-
}
62-
else
56+
if (isset($nameservers) && is_array($nameservers)) {
57+
foreach ($nameservers as $ns)
6358
{
64-
$rrsigs = $result->getResourceResults();
65-
foreach ($rrsigs as $rrsig)
59+
$dns->setServer($ns);
60+
$result = $dns->Query($domainname,'RRSIG');
61+
if ($result->getResourceResultCount()==0)
6662
{
67-
if ($rrsig->getTypeCovered()=='SOA')
68-
{
69-
$rr[$ns]=$rrsig;
63+
throw new DnsException("No RRSIG records found on ".$ns." for domain name ".$domainname);
64+
}
65+
else
66+
{
67+
$rrsigs = $result->getResourceResults();
68+
if (is_array($rrsigs)) {
69+
foreach ($rrsigs as $rrsig)
70+
{
71+
/* @var $rrsig dnsRRSIGresult */
72+
if ($rrsig->getTypeCovered()=='SOA')
73+
{
74+
$rr[$ns]=$rrsig;
75+
}
76+
}
7077
}
7178
}
72-
}
73-
$result2 = $dns->Query($domainname,'DNSKEY');
74-
if ($result2->getResourceResultCount()==0)
75-
{
76-
throw new DnsException("No DNSKEY records found on ".$ns." for domain name ".$domainname);
77-
}
78-
else
79-
{
80-
$ds = $result2->getResourceResults();
81-
foreach ($ds as $childkey)
79+
$result2 = $dns->Query($domainname,'DNSKEY');
80+
if ($result2->getResourceResultCount()==0)
8281
{
83-
if ($childkey->getSep())
82+
throw new DnsException("No DNSKEY records found on ".$ns." for domain name ".$domainname);
83+
}
84+
else
85+
{
86+
$ds = $result2->getResourceResults();
87+
foreach ($ds as $childkey)
8488
{
85-
$dnskey[$ns]=$childkey;
89+
/* @var $childkey dnsDNSKEYresult */
90+
if ($childkey->getSep())
91+
{
92+
$dnskey[$ns]=$childkey;
93+
}
8694
}
8795
}
96+
if ((!isset($rr)) || (!$rr[$ns]))
97+
{
98+
throw new DnsException("No matching resource record type SOA found on ".$ns." for ".$domainname);
99+
}
100+
if ((!isset($dnskey)) || (!$dnskey[$ns]))
101+
{
102+
throw new DnsException("No matching DNSKEY record found with SEP flag enabled on ".$ns." for $domainname");
103+
}
104+
validateRRSIG($domainname, $rr[$ns], $ds);
105+
validateDNSKEY($domainname, $dnskey[$ns], $parentkeys);
88106
}
89-
if (!$rr[$ns])
90-
{
91-
throw new DnsException("No matching resource record type SOA found on ".$ns." for ".$domainname);
92-
}
93-
if (!$dnskey[$ns])
94-
{
95-
throw new DnsException("No matching DNSKEY record found with SEP flag enabled on ".$ns." for $domainname");
96-
}
97-
validateRRSIG($domainname, $rr[$ns], $ds);
98-
validateDNSKEY($domainname, $dnskey[$ns], $parentkeys);
99107
}
100108
return true;
101109
}
@@ -120,7 +128,7 @@ function validateDNSKEY($domainname, dnsDNSKEYresult $dnskey, $parentkeys)
120128
}
121129
else
122130
{
123-
$algo = $dns->algorithm($dnskey->getAlgorithm());
131+
//$algo = $dnskey->algorithm($dnskey->getAlgorithm());
124132
}
125133

126134
}
@@ -166,11 +174,14 @@ function validateRRSIG($domainname, dnsRRSIGresult $rrsig, $ds)
166174
# Keytag for signing must exist in the DNSKEY records
167175
#
168176
$keyfound = false;
169-
foreach ($ds as $childkey)
170-
{
171-
if ($childkey->getKeytag()==$rrsig->getKeytag())
177+
if (is_array($ds)) {
178+
foreach ($ds as $childkey)
172179
{
173-
$keyfound = true;
180+
/* @var $childkey dnsRRSIGresult */
181+
if ($childkey->getKeytag()==$rrsig->getKeytag())
182+
{
183+
$keyfound = true;
184+
}
174185
}
175186
}
176187
if (!$keyfound)

0 commit comments

Comments
 (0)