]> granicus.if.org Git - curl/commitdiff
- Nico Stappenbelt reported that when processing domain and search lines in
authorDaniel Stenberg <daniel@haxx.se>
Tue, 11 May 2004 21:12:10 +0000 (21:12 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 11 May 2004 21:12:10 +0000 (21:12 +0000)
  the resolv.conf file, the first entry encountered is processed and used as
  the search list. According to the manual pages for both Linux, Solaris and
  Tru64, the last entry of either a domain or a search field is used.

ares/CHANGES
ares/ares_init.c

index d4a21ada2d9711cf5650913aa28be9dc0a3e38d4..9558c84b909bd195737817804ec08e693e170b57 100644 (file)
@@ -1,5 +1,13 @@
   Changelog for the c-ares project
 
+* May 11
+- Nico Stappenbelt reported that when processing domain and search lines in
+  the resolv.conf file, the first entry encountered is processed and used as
+  the search list. According to the manual pages for both Linux, Solaris and
+  Tru64, the last entry of either a domain or a search field is used.
+
+  This is now adjusted in the code
+
 Version 1.2.0 (April 13, 2004)
 
 * April 2, 2004
index 41598e6ed5787a6e360cf7f81eaec7a91d8aad78..09062ac80ed5de94970ec8257c31f850c7b29936 100644 (file)
@@ -437,11 +437,11 @@ DhcpNameServer
       return (errno == ENOENT) ? ARES_SUCCESS : ARES_EFILE;
     while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
     {
-      if ((p = try_config(line, "domain")) && channel->ndomains == -1)
+      if ((p = try_config(line, "domain")))
         status = config_domain(channel, p);
       else if ((p = try_config(line, "lookup")) && !channel->lookups)
         status = config_lookup(channel, p);
-      else if ((p = try_config(line, "search")) && channel->ndomains == -1)
+      else if ((p = try_config(line, "search")))
         status = set_search(channel, p);
       else if ((p = try_config(line, "nameserver")) && channel->nservers == -1)
         status = config_nameserver(&servers, &nservers, p);
@@ -702,6 +702,14 @@ static int set_search(ares_channel channel, const char *str)
   int n;
   const char *p, *q;
 
+  if(channel->ndomains != -1) {
+    /* if we already have some domains present, free them first */
+    for(n=0; n < channel->ndomains; n++)
+      free(channel->domains[n]);
+    free(channel->domains);
+    channel->ndomains = -1;
+  }
+
   /* Count the domains given. */
   n = 0;
   p = str;