# runmdn

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

- Overview
- Setup
- Usage
- Limitations

## 概要

## Overview

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

runmdn is a command that enables a Unix client with the bind4 or bind8 based resolver libraries to support multilingual domain names without recompiling. Specifically, the name-resolving API (for example, gethostbyname) accepts host names denoted in the local encoding (EUC-JP, etc.) of the application, and also returns multilingual host names in local encoding.

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

Using runmdn to enable clients to support multilingual domain names is the easiest and least time-consuming of the methods provided by the mDNkit. However, it cannot be used with some systems and does not work with certain commands. See the Section Limitations for details.

## 設定

## Setup

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

To use runmdn, the encoding and normalization schemes must be specified in the shared mDNkit client file. Refer to mDNkit Resolver Configuration for information on how to configure this file.

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

runmdn automatically senses the local encoding used by an application, but this may sometimes fail. In such an event, refer to Local Encoding for procedures to deal with the situation.

## 使用法

## Usage

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

runmdn is very easy to use. All that has to be done is to append `runmdn`, the command name, to the beginning of the application startup command.

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

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

For example, to use the `telnet` command to connect to the host "私の会社.jp", do as follows.

>     % runmdn telnet 私の会社.jp

## 制限事項

## Limitations

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

runmdn is the easiest method for enabling clients to support multilingual domain names of all the methods that the mDNkit provides. However, this method may not be applicable for some clients.

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

runmdn uses the dynamic link (a library pre-load function) of system-owned shared libraries to replace some of the functions of the resolver libraries linked to an application with versions with functions that can handle multilingual domain names to enable handling of multilingual domain names. The functions that are replaced are functions used in bind4- and bind8-based resolvers.

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

As a result, runmdn operation has the following limitations:

1. 共有ライブラリの動的リンク機構を用いているので、共有ライブラリが使用できるシステムでなければなりません
2. As shared library links are used, the system must be able to use shared libraries.
3. 環境変数 LD_PRELOAD または類似の機構によるライブラリのプリロード機能を持つシステムでなければなりません
4. The system must have a preload function that operates with the use of LD_PRELOAD, an environment variable, or similar mechanism.
5. runmdn の対象となるコマンドはリゾルバライブラリをスタティックリンクしていてはなりません
6. runmdn can only be used for commands that link resolver libraries statically.
7. システムのライブラリが iconv() 関数を提供していない場合、外部のライブラリを用いることになりますが、そのライブラリも共有ライブラリでなければなりません。
8. If the system library does not provide the iconv() function, an external library that does can be used, but it must be a shared library.
9. システムのリゾルバライブラリは bind4 あるいは bind8 ベースのものでなければなりません。
10. System resolver libraries must be based on bind4 or bind8.
11. セキュリティ上の理由から一般に setuid されたコマンドはプリロード機能が使えないようになっているので、setuid されたコマンドであってはなりません。
12. As setuid commands cannot use the preload function for security reasons, do not use such commands.

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

When these limitations make use of runmdn impossible, other methods provided by the mDNkit (for example, dnsproxy or bind9 patches) can be used.