runmdn


概要

runmdnは標準的なリゾルバ関数を用いて名前解決を行う UNIX クライアントを、 再コンパイルなしに多言語ドメイン名を扱えるようにするためのコマンドです。 具体的には、名前解決用の API (例えば gethostbyname) が アプリケーションのローカルエンコーディング (EUC-JP 等) で表現された ホスト名を受け付けるようになります。またこれらの API が多言語ホスト名を ローカルエンコーディングで返すようになります。

mDNkit ではクライアントを多言語ドメイン名に対応させるための手段として、 複数の方法を提供していますが、その中で最も手間がかからず簡単なのが このrunmdnを用いる方法です。 ただし、システムによっては使用できなかったり、コマンドによっては効果が なかったりします。これらの制限に関しては制限事項 の項をご覧ください。

なお、runmdn は 環境変数 MDN_DISABLE の設定を明示的に無視するため、 MDN_DISABLE が設定されているかどうかにかかわらず、ドメイン名の変換処理を 行います。


設定

runmdn を使用するには、mDNkit のクライアント共通設定ファイル で使用するエンコーディングや正規化の方法を設定しておく必要があります。 このファイルの設定方法については mDNkit の設定をご覧ください。

また、オプションで明示しない限り、runmdn はアプリケーションの ローカルエンコーディングを自動的に推測しますが、推測に失敗する場合も あります。そのような場合の対処方法は ローカルエンコーディングについてをご覧ください。


使用法

runmdn の使い方は極めて簡単で、アプリケーションの起動コマンドの 先頭にコマンド名 runmdn をつけるだけです。

% runmdn [オプション...] コマンド [引数...]

例えば telnet コマンドを使用してホスト「私の会社.jp」に 接続するには次のようにします。

% runmdn telnet 私の会社.jp

オプション

runmdn は次のオプションを認識します。

-e ローカルエンコーディング
アプリケーションのローカルエンコーディングを指定します。 このオプションを指定しなかった場合、ロケールや環境変数から ローカルエンコーディングの自動判定を行います。 判定方法について詳しくは mDNkit の設定 の ローカルエンコーディングについて の項をご覧ください。

制限事項

runmdn は、mDNkit が提供している方法の中で最も手軽にクライアントが 多言語ドメインを扱えるようにするものですが、どのようなクライアントにも 適用できるわけではありません。

runmdn はシステムの持つ共有ライブラリの動的リンク機構 (ライブラリのプリロード機能) を利用し、 クライアントアプリケーションの実行時に、アプリケーションにリンクされている 名前解決用関数を多言語ドメイン名を扱う機能を持たせたバージョンのものと 置き換えることによって多言語ドメイン名の処理を実現します。 runmdn が置き換えるのは、以下の関数です。

したがって runmdn が動作するには次のようないくつかの制限があります。

  1. 共有ライブラリの動的リンク機構を用いているので、 共有ライブラリが使用できるシステムでなければなりません
  2. 環境変数 LD_PRELOAD または類似の機構による ライブラリのプリロード機能を持つシステムでなければなりません
  3. runmdn の対象となるコマンドはリゾルバライブラリを動的リンク していなくてはなりません
  4. システムのライブラリが iconv() 関数を提供していない場合、外部の ライブラリを用いることになりますが、そのライブラリも共有ライブラリで なければなりません。
  5. アプリケーションは名前解決に上記の関数を使用していなければなりません
  6. セキュリティ上の理由から一般に setuid されたコマンドはプリロード機能が 使えないようになっているので、setuid されたコマンドであってはなりません

これらの制限により runmdn が使用できない場合は、mDNkit が提供する他の 方法 (mdnsproxy など) をご利用ください。