This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] nscd does not account for 'multi on' in /etc/host.conf whenai-resolving hosts
- From: Petr Baudis <pasky at ucw dot cz>
- To: libc-alpha at sourceware dot org
- Date: Fri, 13 Apr 2012 18:46:54 +0200
- Subject: [PATCH] nscd does not account for 'multi on' in /etc/host.conf whenai-resolving hosts
http://sourceware.org/bugzilla/show_bug.cgi?id=11928
(Waiting for review for almost two years now.)
When nscd is handling getaddrinfo() resolution requests, it fails
to properly initialize its resolver options state and ignores
/etc/host.conf.
This patch makes sure _res_hconf is initialized before resolving is
being done. However, this would not be enough since nscd has its own
_res_hconf due to nscd/res_hconf.c; _res_hconf_init() would work on
different _res_hconf instance than the NSS routines. We just need to
make sure nscd and glibc share the same _res_hconf instance - this
should not be a problem since users should run matching versions of
glibc and nscd anyway.
Ok to commit?
2010-08-19 Petr Baudis <pasky@suse.cz>
* nscd/aicache.c (addhstaiX): Make sure _res_hconf has been
initialized.
* resolv/res_hconf.c (_res_hconf): Do not redefine outside
of libc.
diff --git a/nscd/aicache.c b/nscd/aicache.c
index 3cb2208..2e92929 100644
--- a/nscd/aicache.c
+++ b/nscd/aicache.c
@@ -26,6 +26,7 @@
#include <time.h>
#include <unistd.h>
#include <sys/mman.h>
+#include <resolv/res_hconf.h>
#include "dbg_log.h"
#include "nscd.h"
@@ -103,6 +104,8 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req,
if (__res_maybe_init (&_res, 0) == -1)
no_more = 1;
+ if (!_res_hconf.initialized)
+ _res_hconf_init ();
/* If we are looking for both IPv4 and IPv6 address we don't want
the lookup functions to automatically promote IPv4 addresses to
diff --git a/resolv/res_hconf.c b/resolv/res_hconf.c
index ed55bec..c79b85a 100644
--- a/resolv/res_hconf.c
+++ b/resolv/res_hconf.c
@@ -84,7 +84,9 @@ static const struct cmd
};
/* Structure containing the state. */
+#ifndef NOT_IN_libc
struct hconf _res_hconf;
+#endif
/* Skip white space. */
static const char *
--
Petr "Pasky" Baudis
Smart data structures and dumb code works a lot better
than the other way around. -- Eric S. Raymond