Files
bind9/contrib/idn/mdnkit/doc/ja/spec/runmdn.html
2001-03-05 12:58:09 +00:00

128 lines
4.1 KiB
HTML

<!doctype html public "-//IETF//DTD HTML 2.0//EN">
<!-- $Id: runmdn.html,v 1.1 2001/03/05 12:58:07 tale Exp $ -->
<html>
<head>
<title>runmdn specification</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body>
<h1>runmdn</h1>
<p>&nbsp;<p>
<h2><a name="overview">概要</a></h2>
<p><b>runmdn</b> は BIND-4 あるいは BIND-8 をベースとした
リゾルバライブラリを持つクライアントを、
再コンパイルなしに多言語ドメイン名を扱えるようにするためのコマンドです。
<p>
<h2><a name="invoke">起動</a></h2>
<blockquote>
<pre>
% runmdn <i>コマンド</i> [<i>引数...</i>]
</pre>
</blockquote>
<p>例えば <tt>telnet</tt> コマンドで多言語ドメイン名を扱うためには
次のようにします。
<blockquote>
<pre>
% runmdn telnet ログイン.どこかの会社.jp
</pre>
</blockquote>
<h2><a name="invoke">実装</a></h2>
<p><b>runmdn</b> は共有ライブラリのプリロード機構を用いて、標準の
リゾルバライブラリに含まれる関数の一部を、多言語ドメイン名の処理機能を持つ
別のバージョンに動的に置換えることで、クライアントでの多言語ドメイン名の
処理を実現します。
<p>多くのシステムでは共有ライブラリのプリロードは環境変数
<em>LD_PRELOAD</em> を用いて実現されています。この環境変数にプリロードしたい
共有ライブラリファイルのパス名を指定すると、クライアントの実行時に、
アプリケーションに標準の共有ライブラリがリンクされる前に
指定したライブラリがリンクされます。これによって標準のライブラリ関数を
置換えることができます。
<p>したがって、<b>runmdn</b> の実体は、この環境変数を設定し、引数で
指定されたコマンドを起動するだけのシェルスクリプトであり、実際に
多言語ドメイン名の処理を行うのはアプリケーションにリンクされる
共有ライブラリ <b>libmdnresolv</b> です。
<p><b>libmdnresolv</b> をリンクすることにより、BIND4 あるいは BIND8 ベースの
リゾルバライブラリで用いられている次の関数が置き換わります。
<blockquote>
<pre>
dn_comp
dn_expand
res_hnok
res_ownok
res_mailok
res_dnok
</pre>
</blockquote>
<p>それぞれの変更点を簡単に記述します。
<dl>
<dt>dn_comp<dd>
指定されたドメイン名を DNS プロトコルで用いられるドメインデータに変換する前に、
ローカルコードセットから DNS プロトコル上で用いられるエンコーディングへの
変換および正規化、(必要ならば) ZLDの付加を行います。
<dt>dn_expand<dd>
DNS プロトコルで用いられるドメインデータをドメイン名文字列に変換した後、
(必要なら) ZLD を削除し、ローカルコードセットへの変換を行います。
また通常この関数はドメイン名に含まれる ASCII 以外の文字を
バックスラッシュエスケープする処理をしますが、これを抑制します。
<dt>res_hnok<dd>
どんな文字でも正当な文字であると判断するようにします。
<dt>res_ownok<dd>
どんな文字でも正当な文字であると判断するようにします。
<dt>res_mailok<dd>
どんな文字でも正当な文字であると判断するようにします。
<dt>res_dnok<dd>
どんな文字でも正当な文字であると判断するようにします。
</dl>
<p>エンコーディング変換や正規化、ZLD の処理等はすべて
<a href="library.html">MDN ライブラリ</a> (libmdn) の
<a href="library.html#res">res モジュール</a>を使用しています。
<blockquote>
現在の実装では <b>libmdnresolv</b> は MDN ライブラリ (libmdn) を
呼び出すのではなく、libmdn 自体を内部に抱え込むような形態になっていますが、
これは単なる実装上の都合からそうなっているだけで、論理的には MDN
ライブラリの機能を呼び出しているといってよいでしょう。
</blockquote>
<p>また使用するエンコーディングや正規化の設定は
<a href="clientconfig.html">クライアント設定ファイル</a>の設定を
利用します。
<h2><a name="invoke">制限</a></h2>
<p><b>runmdn</b> にはいくつかの制限があり、どんなシステムでも使えるわけでは
ありません。
<ul>
<li>runmdn は共有ライブラリの動的リンク機構を用いているので、
共有ライブラリが使用できるシステムでなければなりません。
<li>また環境変数 <em>LD_PRELOAD</em> または類似の機構による
ライブラリのプリロード機能を持つシステムでなければなりません。
<li>runmdn の対象となるコマンドはリゾルバライブラリをスタティックリンク
していてはなりません。
<li>システムのライブラリが iconv() 関数を提供していない場合、外部の
ライブラリを用いることになりますが、そのライブラリも共有ライブラリで
なければなりません。
<li>システムのリゾルバライブラリは BIND4 あるいは BIND8 ベースのものでなければ
なりません。
<li>セキュリティ上の理由から一般に setuid されたコマンドはプリロード機能が
使えないようになっているので、setuid されたコマンドであってはなりません。
</ul>
</body>
</html>