runmdn
概要
runmdnは標準的なリゾルバ関数を用いて名前解決を行う UNIX クライアントを、 再コンパイルなしに多言語ドメイン名を扱えるようにするためのコマンドです。 具体的には、名前解決用の API (例えば gethostbyname) が アプリケーションのローカルエンコーディング (EUC-JP 等) で表現された ホスト名を受け付けるようになります。またこれらの API が多言語ホスト名を ローカルエンコーディングで返すようになります。
mDNkit ではクライアントを多言語ドメイン名に対応させるための手段として、 複数の方法を提供していますが、その中で最も手間がかからず簡単なのが このrunmdnを用いる方法です。 ただし、システムによっては使用できなかったり、コマンドによっては効果が なかったりします。これらの制限に関しては制限事項 の項をご覧ください。
設定
runmdn を使用するには、mDNkit のクライアント共通設定ファイル で使用するエンコーディングや正規化の方法を設定しておく必要があります。 このファイルの設定方法については mDNkit の設定をご覧ください。
また、runmdn はアプリケーションのローカルエンコーディングを自動的に 推測しますが、推測に失敗する場合もあります。そのような場合の対処方法は ローカルエンコーディングについてをご覧ください。
使用法
runmdn の使い方は極めて簡単で、アプリケーションの起動コマンドの
先頭にコマンド名 runmdn
をつけるだけです。
% runmdn コマンド [引数...]
例えば telnet
コマンドを使用してホスト「私の会社.jp」に
接続するには次のようにします。
% runmdn telnet 私の会社.jp
制限事項
runmdn は、mDNkit が提供している方法の中で最も手軽にクライアントが 多言語ドメインを扱えるようにするものですが、どのようなクライアントにも 適用できるわけではありません。
runmdn はシステムの持つ共有ライブラリの動的リンク機構 (ライブラリのプリロード機能) を利用し、 クライアントアプリケーションの実行時に、アプリケーションにリンクされている 名前解決用関数を多言語ドメイン名を扱う機能を持たせたバージョンのものと 置き換えることによって多言語ドメイン名の処理を実現します。 runmdn が置き換えるのは、以下の関数です。
- gethostbyname
- gethostbyname_r
- gethostbyname2
- gethostbyname2_r
- gethostbyaddr
- gethostbyaddr_r
- getipnodebyname
- getipnodebyaddr
- getaddrinfo
- getnameinfo
したがって runmdn が動作するには次のようないくつかの制限があります。
- 共有ライブラリの動的リンク機構を用いているので、 共有ライブラリが使用できるシステムでなければなりません
- 環境変数
LD_PRELOAD
または類似の機構による ライブラリのプリロード機能を持つシステムでなければなりません - runmdn の対象となるコマンドはリゾルバライブラリを動的リンク していなくてはなりません
- システムのライブラリが iconv() 関数を提供していない場合、外部の ライブラリを用いることになりますが、そのライブラリも共有ライブラリで なければなりません。
- アプリケーションは名前解決に上記の関数を使用していなければなりません
- セキュリティ上の理由から一般に setuid されたコマンドはプリロード機能が 使えないようになっているので、setuid されたコマンドであってはなりません
これらの制限により runmdn が使用できない場合は、mDNkit が提供する他の 方法 (mdnsproxy など) をご利用ください。