diff options
-rw-r--r-- | ares/CHANGES | 13 | ||||
-rw-r--r-- | ares/ares_init.c | 18 |
2 files changed, 28 insertions, 3 deletions
diff --git a/ares/CHANGES b/ares/CHANGES index f331b7094..0548935cc 100644 --- a/ares/CHANGES +++ b/ares/CHANGES @@ -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 diff --git a/ares/ares_init.c b/ares/ares_init.c index 78d865cb0..227067ea2 100644 --- a/ares/ares_init.c +++ b/ares/ares_init.c @@ -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; } |