- Henrik Stoerner fix: got a report that Tru64 Unix (the unix from Digital
authorDaniel Stenberg <daniel@haxx.se>
Tue, 28 Sep 2004 22:19:39 +0000 (22:19 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 28 Sep 2004 22:19:39 +0000 (22:19 +0000)
  when they made Alpha's) uses /etc/svc.conf for the purpose fixed below for
  other OSes. He made c-ares check for and understand it if present.

- Now c-ares will use local host name lookup _before_ DNS resolving by default
  if nothing else is told.

ares/CHANGES
ares/ares_init.c

index f331b70..0548935 100644 (file)
@@ -1,11 +1,20 @@
   Changelog for the c-ares project
 
+* September 29
+
+- Henrik Stoerner fix: got a report that Tru64 Unix (the unix from Digital
+  when they made Alpha's) uses /etc/svc.conf for the purpose fixed below for
+  other OSes. He made c-ares check for and understand it if present.
+
+- Now c-ares will use local host name lookup _before_ DNS resolving by default
+  if nothing else is told.
+
 * September 26
 
-- Henrik Stoerner: found out that C-ARES does not look at the /etc/host.conf
+- Henrik Stoerner: found out that c-ares does not look at the /etc/host.conf
   file to determine the sequence in which to search /etc/hosts and DNS.  So on
   systems where this order is defined by /etc/host.conf instead of a "lookup"
-  entry in /etc/resolv.conf, C-ARES will always default to looking in DNS
+  entry in /etc/resolv.conf, c-ares will always default to looking in DNS
   first, and /etc/hosts second.
 
   c-ares now looks at
index 78d865c..227067e 100644 (file)
@@ -567,6 +567,7 @@ DhcpNameServer
     fclose(fp);
 
     if (!channel->lookups) {
+      /* Many systems (Solaris, Linux, BSD's) use nsswitch.conf */
       fp = fopen("/etc/nsswitch.conf", "r");
       if (fp) {
         while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
@@ -577,7 +578,9 @@ DhcpNameServer
         fclose(fp);
       }
     }
+
     if (!channel->lookups) {
+      /* Linux / GNU libc 2.x and possibly others have host.conf */
       fp = fopen("/etc/host.conf", "r");
       if (fp) {
         while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
@@ -589,6 +592,19 @@ DhcpNameServer
       }
     }
 
+    if (!channel->lookups) {
+      /* Tru64 uses /etc/svc.conf */
+      fp = fopen("/etc/svc.conf", "r");
+      if (fp) {
+        while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
+        {
+          if ((p = try_config(line, "hosts=")) && !channel->lookups)
+            status = config_lookup(channel, p, "bind", "local");
+        }
+        fclose(fp);
+      }
+    }
+
     if(line)
       free(line);
   }
@@ -684,7 +700,7 @@ static int init_by_defaults(ares_channel channel)
 
   if (!channel->lookups)
     {
-      channel->lookups = strdup("bf");
+      channel->lookups = strdup("fb");
       if (!channel->lookups)
        return ARES_ENOMEM;
     }