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.
Oh, for reference, this came in as
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?