Fix for DNS query's using the domain's dnsdomain

This commit is contained in:
Deon George 2023-09-06 12:50:18 +12:00
parent 485d67b366
commit ed43aaa878
1 changed files with 10 additions and 4 deletions

View File

@ -182,8 +182,11 @@ final class DNS extends BaseProtocol
if (is_null($z=$this->parse('z',$labels->shift())))
return $this->nameerr();
if (is_null($d=$labels->shift()))
return $this->nameerr();
// If the query doesnt end with .ftn, then the remainder of the query is the domain name
if (($labels->search(self::TLD) !== FALSE))
$d = $labels->shift();
else
$d = '';
// Make sure we have a root/base domain
if (! $labels->count())
@ -191,15 +194,18 @@ final class DNS extends BaseProtocol
$rootdn = $labels->join('.');
if (! $d && ($rootdn !== self::TLD))
$d = Domain::where('dnsdomain',$rootdn)->single()?->name;
$ao = Address::findFTN(sprintf('%d:%d/%d.%d@%s',$z,$n,$f,$p,$d));
// Check we have the right record
if ((! $ao) || (! $ao->system->address) || (($rootdn !== self::TLD) && ((! $ao->zone->domain->dnsdomain) || ($ao->zone->domain->dnsdomain !== $d.'.'.$rootdn)))) {
if ((! $ao) || (! $ao->system->address) || (($rootdn !== self::TLD) && ((! $ao->zone->domain->dnsdomain) || ($ao->zone->domain->dnsdomain !== $rootdn)))) {
Log::alert(sprintf('%s:= No DNS record for [%d:%d/%d.%d@%s]',self::LOGKEY,$z,$n,$f,$p,$d));
return $this->nameerr();
}
Log::debug(sprintf('%s:= Returning [%s] for DNS query [%s]',self::LOGKEY,$ao->system->address,$ao->ftn));
Log::info(sprintf('%s:= Returning [%s] for DNS query [%s]',self::LOGKEY,$ao->system->address,$ao->ftn));
return $this->reply(
self::DNS_NOERROR,