Browse Source

* fixed #9402 and removed limitation of 4 dns servers

git-svn-id: trunk@8258 -
Jonas Maebe 18 years ago
parent
commit
5bcda6d18a
1 changed files with 13 additions and 14 deletions
  1. 13 14
      packages/base/netdb/netdb.pp

+ 13 - 14
packages/base/netdb/netdb.pp

@@ -38,7 +38,6 @@ Type
 
 Const
   DNSPort        = 53;
-  MaxServers     = 4;
   MaxResolveAddr = 10;
   SResolveFile   = '/etc/resolv.conf';
   SServicesFile  = '/etc/services'; 
@@ -50,7 +49,7 @@ Const
   MaxIP4Mapped = 10;
   
 Type
-  TDNSServerArray = Array[1..MaxServers] of THostAddr;
+  TDNSServerArray = Array of THostAddr;
   TServiceEntry = record
     Name     : String;
     Protocol : String;
@@ -96,7 +95,6 @@ Type
 
 Var  
   DNSServers            : TDNSServerArray;
-  DNSServerCount        : Integer;
   DefaultDomainList     : String;
   CheckResolveFileAge   : Boolean; 
   CheckHostsFileAge     : Boolean; 
@@ -482,13 +480,15 @@ begin
           H:=HostToNet(StrToHostAddr(L));
           If (H.s_bytes[1]<>0) then
             begin
-            Inc(Result);
+            setlength(DNSServers,Result+1);
             DNSServers[Result]:=H;
+            Inc(Result);
             end
           else if FindHostEntryInHostsFile(L,H,E) then
             begin
-            Inc(Result);
+            setlength(DNSServers,Result+1);
             DNSServers[Result]:=E.Addr;
+            Inc(Result);
             end;
           end
         else if CheckDirective('domain') then
@@ -499,7 +499,6 @@ begin
   Finally
     Close(R);
   end;    
-  DNSServerCount:=Result;
 end;
 
 Procedure CheckResolveFile;
@@ -834,9 +833,9 @@ Var
 
 begin
   CheckResolveFile;
-  I:=1;
+  I:=0;
   Result:=0;
-  While (Result<=0) and (I<=DNSServerCount) do
+  While (Result<=0) and (I<=high(DNSServers)) do
     begin
     Result:=ResolveNameAt(I,HostName,Addresses,0);
     Inc(I);
@@ -916,9 +915,9 @@ var
   i: Integer;
 begin
   CheckResolveFile;
-  i := 1;
+  i := 0;
   Result := 0;
-  while (Result <= 0) and (I<= DNSServerCount) do begin
+  while (Result <= 0) and (I<= high(DNSServers)) do begin
     Result := ResolveNameAt6(I, Hostname, Addresses, 0);
     Inc(i);
   end;
@@ -969,11 +968,11 @@ Var
   
 begin
   CheckResolveFile;
-  I:=1;
+  I:=0;
   Result:=0;
   nt:=hosttonet(hostaddr);
   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<=DNSServerCount) do
+  While (Result=0) and (I<=high(DNSServers)) do
     begin
     Result:=ResolveAddressAt(I,S,Addresses);
     Inc(I);
@@ -999,8 +998,8 @@ begin
     S[1+(7-i)*8] := hexdig[1+(HostAddr.u6_addr16[i] and $0F00) shr 08];
     S[3+(7-i)*8] := hexdig[1+(HostAddr.u6_addr16[i] and $F000) shr 12];
   end;
-  I := 1;
-  While (Result=0) and (I<=DNSServerCount) do
+  I := 0;
+  While (Result=0) and (I<=high(DNSServers)) do
     begin
     Result:=ResolveAddressAt(I,S,Addresses);
     Inc(I);