mDNkitの設定
mDNkit が提供するツール、コマンドのうち、 mdnconv, mDN Wrapper, runmdn および mdnsproxy は 共通の設定ファイルを参照します。
このファイルには mDNkit を利用したクライアントが必要とするいく つかの情報を設定する必要があります。 例えば正規化の方式や DNS プロトコル上で用いられるドメイン名のエンコーディング 方法などをこのファイルで指定します。 ここでは、これらの情報の設定方法と意味を説明します。
また、アプリケーションの使用するローカルエンコーディングは アプリケーションの動作するロケール情報から取得します。これについても 合わせて説明します。
設定ファイル
mDNkit の設定ファイルは通常のテキストファイルで、ファイルの 各行 (# で始まるコメント行と、空行を除いて) は、次のような単純な フォーマットで構成されます。
キーワード 値 ...
idn-encoding
リソルバや DNS サーバによって使用される、多言語ドメイン名の エンコーディングを指定します。
[構文]
idn-encoding
<encoding>
<encoding>として、次の名称が指定できます。
- Punycode
AMC-ACE-Z
(Punycode の旧称)RACE
DUDE
- あなたのシステムの
iconv_open()
が認識するエンコーディング名。- 別名定義ファイルで定義された、上記のエンコーディング名の別名 (
encoding-alias-file
を参照のこと)
[設定例]
idn-encoding Punycode
なお、アプリケーション側のローカルエンコーディングはロケールや環境変数 によって決まるので、client-encoding というエントリはありません。 ローカルエンコーディングに関しては後述します。
nameprep
多言語ドメイン名の正規化方法を定めたものとして NAMEPREP があります。 このエントリでは、どのバージョンの NAMEPREP を使用するのかを指定し ます。
[構文]
nameprep
<version>
<version>には以下のものが指定できます。
nameprep-03
- インターネットドラフト draft-ietf-idn-nameprep-03.txt に対応した正規化方式。
nameprep-05
- インターネットドラフト draft-ietf-idn-nameprep-05.txt に対応した正規化方式。
nameprep-06
- インターネットドラフト draft-ietf-idn-nameprep-06.txt に対応した正規化方式。
nameprep-07
- インターネットドラフト draft-ietf-idn-nameprep-07.txt に対応した正規化方式。
[設定例]
nameprep nameprep-07
NAMEPREP の処理手順は、次の 3 つの工程で構成されます。
- マッピング (mapping)
- 正規化 (normalization)
- 使用禁止文字、未割当文字の検出 (prohibited check, unassigned check)
nameprep
エントリ以外にも、これらの工程毎にバージョン
を細かく指定するためのエントリが用意されています。
nameprep-map
<version>nameprep-normalize
<version>nameprep-prohibit
<version>nameprep-unassigned
<version>
これら 4 つのエントリを合わせると、次のように指定したのと同じ働きを します。
nameprep
<version>
nameprep
と、細かく指定するエントリを両方指定したときは、
細かく指定するエントリのほうが優先されます。
nameprep-map
このエントリでは NAMEPREP におけるマッピング方式を指定します。
[構文]
nameprep-map
<scheme> ...
<scheme> でマッピング方式の名称を指定します。 2 つ以上の方式が指定された場合は、順番通りに (左から右に) 適用します。 <scheme>には、以下のものが指定できます。
- <version>
- NAMEPREP の特定のバージョンにしたがったマッピング。 指定可能なバージョン番号については、
nameprep
の項を参照してください。filemap:
<pathname>- マッピングの定義を <pathname>ファイルから読み込みます。 ファイルの記述方法については、 マップファイルの形式の項を参照してください。
[設定例]
nameprep-map nameprep-07
nameprep-normalize
このエントリでは NAMEPREP における正規化方式を指定します。
[構文]
nameprep-normalize
<scheme> ...
<scheme> で正規化の方式の名称を指定します。 2 つ以上の方式が指定された場合は、順番通りに (左から右に) 適用します。 <scheme>には、以下のものが指定できます。
- <version>
- NAMEPREP の特定のバージョンにしたがった正規化。 指定可能なバージョン番号については、
nameprep
の項を参照してください。unicode-form-kc
- Unicode のバージョンの中で、mDNkit が対応している最も新しい バージョンによる Unicode normalization form KC
unicode-form-kc/3.0.1
- Unicode バージョン 3.0.1 による Unicode normalization form KC
unicode-form-kc/3.1.0
- Unicode バージョン 3.1.0 による Unicode normalization form KC
[設定例]
nameprep-normalize unicode-form-kc
nameprep-prohibit
このエントリでは、NAMEPREP における禁止文字の検査方式を指定します。
[構文]
nameprep-prohibit
<set> ...
<set> で禁止文字集合の名称を指定します。 2 つ以上の文字集合が指定された場合は、順番通りに (左から右に) 適用します。 <set>には、以下のものが指定できます。
- <version>
- NAMEPREP の特定のバージョンで記述されている禁止文字セット。 指定可能なバージョン番号については、
nameprep
の項を参照してください。fileset:
<pathname>- 禁止文字の定義を <pathname>ファイルから読み込みます。 ファイルの記述方法については、 セットファイルの形式の項を参照してください。
[設定例]
nameprep-prohibit nameprep-07
nameprep-unassigned
このエントリでは、NAMEPREP における未割り当てコードポイント (文字が割り 振られていないコードポイント) の検査方式を指定します。 2 つ以上の方式が指定された場合は、順番通りに (左から右に) 適用します。
[構文]
nameprep-unassigned
<set> ...
<set> で未割り当てコードポイント集合の名称を指定します。 2 つ以上の文字集合が指定された場合は、順番通りに (左から右に) 適用します。 <set>には、以下のものが指定できます。
- <version>
- NAMEPREP の特定のバージョンで記述されている禁止文字セット。 指定可能なバージョン番号については、
nameprep
の項を参照してください。fileset:
<pathname>>- 未割り当てコードポイントの定義を <pathname>ファイルから 読み込みます。ファイルの記述方法については、 セットファイルの形式の項を参照してください。
[設定例]
nameprep-unassigned nameprep-07
encoding-alias-file
エンコーディングのコードセット名を、別名として追加することができます。 ここでは、追加する別名の定義ファイルへのパス名を指定します。
[構文]
encoding-alias-file
<path>
<path> に定義ファイルのパス名を指定します。
[設定例]
encoding-alias-file /some/where/mdnalias.txt
別名の定義ファイルは通常のテキストファイルであり、1行に1つずつ 別名を定義します。各行の形式は次の通りです。
<別名> <元の名前>
エンコーディング名 <元の名前>の代わりに <別名>が使えるようになります。
local-map
このエントリは、NAMEPREP を適用する前のドメイン名に対して行う、 ローカルなマッピングを指定します。 このマッピングは、ドメイン名のトップレベルドメイン (TLD) 毎に異なる ものを指定することができます。
[構文]
local-map
<TLD> <scheme> ...
<TLD> には、マッピングを適用する TLD を、
<scheme> にはマッピングの方式の名称をそれぞれ指定
します。
2 つ以上の方式が指定された場合は、順番通りに (左から右に) 適用します。
<scheme> として指定できるものは、
nameprep-map
と同一です。
[設定例]
local-map .jp filemap:/some/where/jp.map local-map - filemap:/some/where/notld.map local-map . filemap:/some/where/default.map
TLD としてハイフン (`-
') を指定すると、TLDがないドメイン
名、言い換えるとピリオド(`.
')を含んでいないドメイン名に
対して適用するマッピングを指定したことになります。
同様に、TLD としてピリオドを指定すると、他のlocal-map
エントリの TLD のいずれとも一致しないドメイン名に対するマッピングを指
定したことになります。
TLD がピリオド(`.
')の場合を除き、TLD の先頭のピリオドは
省略可能です。
delimiter-map
このエントリは、ピリオドにマッピングしたい文字を指定します。
通常、ドメイン名のラベル同士の区切り (delimiter) にはピリオド
(`.
')を用いますが、このエントリで指定した文字は、ピリオドの
代わりに区切りとして使用できるようになります。
[構文]
delimiter-map
<code point> ...
<code point> には、Unicode のコードポイントを16進数 で記述します。
[設定例]
delimiter-map 3002
ローカルエンコーディングについて
ローカルエンコーディングについては、ロケールや環境変数から自動判定するため、 設定ファイルでは、ローカルエンコーディングを設定するエントリはありません。
ただし、以下のようなケースのときには自動判定ができません。
-
setlocate()
関数を使用していないアプリケーションを実行したとき - C ロケールのままアプリケーションを実行したとき
- ロケールとエンコーディングの対応がわからないとき
このような場合には環境変数 MDN_LOCAL_CODESET
を設定することで、
ローカルエンコーディングの設定を行うことができます。
例えばローカルエンコーディングを EUC-JP に設定する場合には、
あらかじめ次のような設定をしておきます。
[設定例]
sh 系のシェルの場合:
$ MDN_LOCAL_CODESET=EUC-JP $ export MDN_LOCAL_CODESETcsh 系のシェルの場合:
% setenv MDN_LOCAL_CODESET EUC-JP
指定する値はローカルエンコーディング名で、これはシステムの
iconv()
関数 (より正確には iconv_open()
) が
受け付ける名前で指定します。この名前は iconv
の実装によって
それぞれ異なりますので、具体的な値については iconv
の
ドキュメントを参照してください。
もしあなたが単一のローカルエンコーディングしか使用していないのであれば、
このような設定を .profile
や .cshrc
等に
入れておくことをお勧めします。
マップファイルの形式について
マップファイルは、
nameprep-map
および
local-map
エントリ向けに、
文字のマッピング規則を定義したファイルです。
マップ元として文字 1 個、マップ先として 0 文字以上の文字の並びを指定
できます。
前後の文字でマッピング規則を変えるような、文脈に依存したマッピングは
できません。
マップファイルは単純なテキストファイルで、一行に一つのマッピング
規則を書くようになっています。マッピング規則は、次の書式で記述します。
`#'
で始まる行および空行は、無視されます。
<マップ元のコードポイント>; <マップ先のコードポイント列>;
<マップ元のコードポイント>には、マップ元の文字の Unicodeコードポイントを16進数で記述します。 <マップ先のコードポイント列>には、マップ先の文字列 の各文字のUnicodeコードポイント値を16進数で記述します。 先頭の文字から順番に空白で区切って並べていきます。 マップ先が空の文字列の場合、<マップ先のコードポイント列> は空白になります。
[設定例]
# "A" を "a" にマップ 0041; 0061; # "#" は何にもマップしない 0023; ; # "@" を "at" にマップ 0040; 0061 0074;
セットファイルの形式について
セットファイルは、
nameprep-prohibit
および
nameprep-unassigned
エントリ向けに、ドメイン名として使用を許可しないUnicodeコードポイント
の集合を定義したファイルです。
セットファイルは単純なテキストファイルで、一行に一つのコードポイント、 もしくはコードポイントの範囲を記述します。書式は次の通りです。
<コードポイント>
<開始コードポイント>-<終了コードポイント>
それぞれ、コードポイントには Unicodeコードポイントを16進数で記述します。
`#'
で始まる行および空行は、無視されます。
[設定例]
# チルド記号を禁止 007E # 制御文字の禁止 0000-001F 007F-000F # Unicodeの基本多言語面 (BMP) 以外の文字を禁止 10000-10FFFF
環境変数について
mDNkit に関連する環境変数には、以下のものがあります。
MDN_LOCAL_CODESET
ローカルエンコーディングを明示的に設定するために使用します。 詳しくは ローカルエンコーディングについて をごらんください。
LC_ALL
LC_CTYPE
LANG
mDNkit 固有の環境変数ではありませんが、これらが定義されていると、 ローカルエンコーディングの判定に影響を与えます。 詳しくは ローカルエンコーディングについて をごらんください。
この変数が定義されている時には、MDN ライブラリの提供するドメイン名 の多言語対応機能が働かなくなります。 MDN ライブラリを使用しているアプリケーションは、この環境変数の影響 を受けます。
ただし、アプリケーションによっては、明示的にこの環境変数を無視する
ように設定しているかも知れません。
mDNkit 付属の
mdnsproxy
,
mdnconv
,
runmdn
コマンドは MDN ライブラリを使用していますが、いずれもこの環境変数
を無視して常に多言語対応機能が働くようになっています。
(多言語対応が無効になると、これらのコマンドは無意味だからです。)
MDN_LOG_LEVEL
ログ出力のレベルを設定します。設定できる値は 0 から 5 までの数値で、 大きな数字を設定すると、それ以下の数字の設定時に出力されるログも同時に出力されます。
- 0 - 致命的なエラーの場合のみログの表示を行います。(デフォルト)
- 1 - 一般的なエラーが起こった場合にログの表示を行います。
- 2 - 警告ログを表示します。
- 3 - 情報ログを表示します。
- 4 - トレースログを表示します。
- 5 - ダンプログを表示します。