|
@@ -1033,7 +1033,7 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-Function ResolveAddressAt(Resolver : Integer; Address : String; Var Names : Array of String) : Integer;
|
|
|
|
|
|
+Function ResolveAddressAt(Resolver : Integer; Address : String; Var Names : Array of String; Recurse: Integer) : Integer;
|
|
|
|
|
|
|
|
|
|
Var
|
|
Var
|
|
@@ -1056,13 +1056,29 @@ begin
|
|
I:=0;
|
|
I:=0;
|
|
While (I<=MaxAnswer) and NextRR(Ans.Payload,AnsStart,AnsLen,RR) do
|
|
While (I<=MaxAnswer) and NextRR(Ans.Payload,AnsStart,AnsLen,RR) do
|
|
begin
|
|
begin
|
|
- if (Ntohs(RR.AType)=DNSQRY_PTR) and (1=NtoHS(RR.AClass)) then
|
|
|
|
- begin
|
|
|
|
- Names[i]:=BuildName(Ans.Payload,AnsStart,AnsLen);
|
|
|
|
- inc(Result);
|
|
|
|
- RR.RDLength := ntohs(RR.RDLength);
|
|
|
|
- Inc(AnsStart,RR.RDLength);
|
|
|
|
- end;
|
|
|
|
|
|
+ Case Ntohs(RR.AType) of
|
|
|
|
+ DNSQRY_PTR:
|
|
|
|
+ if (1=NtoHS(RR.AClass)) then
|
|
|
|
+ begin
|
|
|
|
+ Names[i]:=BuildName(Ans.Payload,AnsStart,AnsLen);
|
|
|
|
+ inc(Result);
|
|
|
|
+ RR.RDLength := ntohs(RR.RDLength);
|
|
|
|
+ Inc(AnsStart,RR.RDLength);
|
|
|
|
+ end;
|
|
|
|
+ DNSQRY_CNAME:
|
|
|
|
+ begin
|
|
|
|
+ if Recurse >= MaxRecursion then
|
|
|
|
+ begin
|
|
|
|
+ Result := -1;
|
|
|
|
+ exit;
|
|
|
|
+ end;
|
|
|
|
+ rr.rdlength := ntohs(rr.rdlength);
|
|
|
|
+ setlength(Address, rr.rdlength);
|
|
|
|
+ address := stringfromlabel(ans.payload, ansstart);
|
|
|
|
+ Result := ResolveAddressAt(Resolver, Address, Names, Recurse+1);
|
|
|
|
+ exit;
|
|
|
|
+ end;
|
|
|
|
+ end;
|
|
Inc(I);
|
|
Inc(I);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
@@ -1084,7 +1100,7 @@ begin
|
|
S:=Format('%d.%d.%d.%d.in-addr.arpa',[nt.s_bytes[4],nt.s_bytes[3],nt.s_bytes[2],nt.s_bytes[1]]);
|
|
S:=Format('%d.%d.%d.%d.in-addr.arpa',[nt.s_bytes[4],nt.s_bytes[3],nt.s_bytes[2],nt.s_bytes[1]]);
|
|
While (Result=0) and (I<=high(DNSServers)) do
|
|
While (Result=0) and (I<=high(DNSServers)) do
|
|
begin
|
|
begin
|
|
- Result:=ResolveAddressAt(I,S,Addresses);
|
|
|
|
|
|
+ Result:=ResolveAddressAt(I,S,Addresses,1);
|
|
Inc(I);
|
|
Inc(I);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
@@ -1111,7 +1127,7 @@ begin
|
|
I := 0;
|
|
I := 0;
|
|
While (Result=0) and (I<=high(DNSServers)) do
|
|
While (Result=0) and (I<=high(DNSServers)) do
|
|
begin
|
|
begin
|
|
- Result:=ResolveAddressAt(I,S,Addresses);
|
|
|
|
|
|
+ Result:=ResolveAddressAt(I,S,Addresses,1);
|
|
Inc(I);
|
|
Inc(I);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|