2

テスト中にいくつかのホスト名をループバックに解決したいテストコードがあります。デプロイされると、このコードは、必要に応じて通常のシステム名解決を使用します。テストおよび展開ホストは、最近の Linux ディストリビューション (SLES11SP1 など) です。

スーパーユーザーにならずに、単一プロセスのホスト名解決をオーバーライドしたいと思います。そのような狭い方法でnsswitch/動作を操作する方法はありますか?hosts

はい、もちろん、ホスト名自体をオーバーライドすることもできますが、(この機能が実際に利用できない場合を除いて) したくないと思います。


編集:

glibcHOSTALIASES機能はまさに私が望んでいるように思えますが、その利用可能性/有効性は私が調査したホスト間で一貫していないようです. ある時点で、安全でない環境変数のリストに追加されました。しかし、それはグローバルに無視されるのか、それとも suid バイナリでのみ無視されるのか? getnameinfo()を行うプログラムでも機能しますか?


詳細編集:IMO、HOSTALIAS勝ちます。無効nscdにすることは、それを尊重しないプラットフォームの回避策です-私の(SuSE)のように。そして多分彼らは修正をリリースするでしょう。

4

3 に答える 3

1

たとえば を傍受したいと仮定し、特定のホスト名に対してgethostbyname()返されるようにします...127.0.0.1

コードが C++ の場合、最も簡単な答えはgMockを使用することです。

できない場合は、介入することをお勧めしますgethostbyname。サンプルのインターポーザーは、ここに記載されています。

于 2011-10-29T00:12:05.140 に答える
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 に答える