# runmdn

- 概要
- 設定
- 使用法
- 制限事項

## 概要

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

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

## 設定

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

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

## 使用法

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

>     % runmdn コマンド [引数...]

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

>     % runmdn telnet 私の会社.jp

## 制限事項

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

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

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

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

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