This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]