Bug 13375

Summary: nscd inhibits HOSTALIASES envvar
Product: glibc Reporter: Michael Matz <matz>
Component: nscdAssignee: Not yet assigned to anyone <unassigned>
Status: NEW ---    
Severity: normal CC: brian.cain, fweimer
Priority: P2 Flags: fweimer: security-
Version: 2.14   
Target Milestone: ---   
Host: Target:
Build: Last reconfirmed:

Description Michael Matz 2011-11-02 15:36:03 UTC
Make sure nscd is running and indeed caching hosts database lookups (not the
case with debian for instance), then:

% HOSTALIASES=./fooalias strace getent hosts bla 2>&1 | grep fooalias

shows that the file isn't accessed.  It is accessed if nscd isn't running
(and in that case is correctly interpreted).  getent is just a convenient
shorthand for a testcase, the gethostbyname interface behaves the same,
i.e. doesn't lookup HOSTALIASES files when nscd is running.  But according
to the manpage it should.  I think it's an extension, not POSIX behaviour,
but one side needs to be fixed, either docu or code.

FWIW, the environment variable isn't respected because res_hostalias
isn't called, because __libc_res_nquery isn't called, because the
nscd-accessing routines are called first.
Comment 1 Michael Matz 2011-11-02 15:38:17 UTC
Oh, for reference, this came in as
  https://bugzilla.novell.com/show_bug.cgi?id=727360 .
Comment 2 brian.cain 2011-11-15 19:16:29 UTC
I can confirm that disabling nscd does indeed workaround the problem.  If this is the expected behavior, is there another environment-variable style override to bypass nscd lookup, similar to HOSTALIASES?