过程本地覆盖的名称parsing?

我有testing代码,我想有几个主机名parsing到回送testing时。 部署时,此代码将使用正常的系统名称parsing。 testing和部署主机是最近的Linux发行版(例如SLES11SP1)。

我想重写一个进程的主机名parsing,而不是超级用户。 有没有办法以这种狭隘的方式操纵nsswitch / hosts行为?

是的,当然我可以自己覆盖主机名,但是我不想(除非这个function真的不可用)。


编辑:

glibcHOSTALIASESfunction听起来就像我想要的 – 但它的可用性/有效性似乎在我所调查的主机之间不一致。 在某个时候,它被添加到不安全的环境variables列表中。 但这是否意味着全球忽视或仅在suid二进制文件中? 它仍然适用于getnameinfo ()的程序吗?


更多编辑:国际海事组织, HOSTALIAS胜手。 禁用nscd是不尊重它的平台的解决方法 – 就像我的(SuSE)一样。 也许他们会发布一个修复程序。

LD_LIBRARY_PATH为胜利!

http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

另外: 什么是LD_PRELOAD技巧?

另外: http : //www.linuxjournal.com/article/7795

使用LD_PRELOAD建议,这是一个库来做到这一点: https : //github.com/hadess/resolvconf-override

假设你想截取例如gethostbyname() ,并让它返回127.0.0.1某些主机名…

如果你的代码是C ++,最简单的答案可能是使用gMock 。

如果你不能,你可能需要设置gethostbyname 。 这里记录一个样本插入器。

布赖恩,另一种选择是使用chroot。 你可以为每个目录usr,lib,home等创建一个包含一堆mount –rbind的目录 – 足以模拟一个工作的根目录。 然后使用mount -t aufs将现有的“etc”挂载到一个可写的空层上。 实质上,毕竟,无论你改变什么,最终只会改变chroot环境。 你可以覆盖和模拟各种环境。 如果这有什么好处,需要我进一步阐述,请告诉我。