2

我有测试代码,我想让几个主机名在测试时解析为环回。部署时,此代码将酌情使用正常的系统名称解析。测试和部署主机是最近的 linux 发行版(例如 SLES11SP1)。

我想覆盖单个进程的主机名解析,而不是超级用户。有没有办法以如此狭隘的方式操纵nsswitch/hosts行为?

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


编辑:

glibcHOSTALIASES功能听起来正是我想要的——但它的可用性/有效性在我调查的主机之间似乎不一致。在某些时候,它被添加到不安全的环境变量列表中。但这是否意味着它被全局忽略或仅在 suid 二进制文件中?它仍然适用于执行getnameinfo() 的程序吗?


更多编辑:IMO,HOSTALIAS赢了。禁用nscd是不尊重它的平台的一种解决方法——比如我的(SuSE)。也许他们会发布一个修复程序。

4

3 回答 3

1

LD_LIBRARY_PATH 为胜利!

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

另外: LD_PRELOAD 技巧是什么?

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

于 2011-10-28T19:57:07.350 回答
1

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

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

如果你不能,你可能想要插入gethostbyname. 此处记录了一个示例插入器。

于 2011-10-29T00:12:05.140 回答
1

Brian,另一种选择是使用 chroot。您可以为每个目录 usr、lib、home 等创建一个带有一堆 mount --rbind 的目录 - 足以模拟一个工作根目录。然后使用 mount -t aufs 将现有的 etc 与可写的空层一起“分层”安装。本质上,毕竟,无论您在 etc 中进行什么更改,最终都只会在该 chroot 环境中更改。您可以通过这种方式覆盖和模拟各种环境。如果这有任何兴趣并需要我进一步详细说明,请告诉我。

于 2011-11-15T21:09:29.817 回答