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 https://bugzilla.novell.com/show_bug.cgi?id=727360 .
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?