mDNkitの設定
mDNkit が提供するツール、コマンドのうち、 mdnconv, mDN Wrapper, runmdn および mdnsproxy は 共通の設定ファイルを参照します。
このファイルには mDNkit を利用したクライアントが必要とするいく つかの情報を設定する必要があります。 例えば正規化の方式や DNS プロトコル上で用いられるドメイン名のエンコーディング 方法などをこのファイルで指定します。 ここでは、これらの情報の設定方法と意味を説明します。
また、アプリケーションの使用するローカルエンコーディングは アプリケーションの動作するロケール情報から取得します。これについても 合わせて説明します。
設定ファイル
mDNkit の設定ファイルは通常のテキストファイルで、ファイルの 各行 (# で始まるコメント行と、空行を除いて) は、次のような単純な フォーマットで構成されます。
キーワード 値...
idn-encoding
リソルバや DNS サーバによって使用される、多言語ドメイン名の エンコーディングを指定します。
[構文]
idn-encoding<encoding>
<encoding>として、次の名称が指定できます。
AltDUDEAMC-ACE-MAMC-ACE-OAMC-ACE-RBRACEDUDELACERACEUTF-6UTF-8- あなたのシステムの
iconv_open()が認識するエンコーディング名。- 別名定義ファイルで定義された、上記のエンコーディング名の別名 (
encoding-alias-fileを参照のこと)
[設定例]
idn-encoding RACE
なお、アプリケーション側のローカルエンコーディングはロケールや環境変数 によって決まるので、client-encoding というエントリはありません。 ローカルエンコーディングに関しては後述します。
nameprep
多言語ドメイン名の正規化方法を定めたものとして NAMEPREP があります。 このエントリでは、どのバージョンの NAMEPREP を使用するのかを指定し ます。
[構文]
nameprep<version>
<version>には以下のものが指定できます。
nameprep-02- インターネットドラフト
draft-ietf-idn-nameprep-02.txtに対応した正規化方式。nameprep-03- インターネットドラフト
draft-ietf-idn-nameprep-03.txtに対応した正規化方式。
[設定例]
nameprep nameprep-03
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-03
nameprep-normalize
このエントリでは NAMEPREP における正規化方式を指定します。
[構文]
nameprep-normalize<scheme> ...
<scheme> で正規化の方式の名称を指定します。 2 つ以上の方式が指定された場合、順番通り (左から右に) 適用します。 <scheme>には、以下のものが指定できます。
- <version>
- NAMEPREP の特定のバージョンにしたがった正規化。 指定可能なバージョン番号については、
nameprepの項を参照してください。ascii-lowercase- ASCII の大文字を小文字に正規化
ascii-uppercase- ASCII の小文字を大文字に正規化
unicode-lowercase- Unicode の大文字を小文字に正規化
unicode-uppercase- Unicode の小文字を大文字に正規化
unicode-foldcase- ``Unicode Technical Report #21: Case Mappings'' にしたがった 正規化。
unicode-form-c- Unicode normalization form C
unicode-form-kc- Unicode normalization form KC
[設定例]
nameprep-normalize unicode-lowercase unicode-form-kc
nameprep-prohibit
このエントリでは、NAMEPREP における禁止文字の検査方式を指定します。
[構文]
nameprep-prohibit<set> ...
<set> で禁止文字集合の名称を指定します。 2 つ以上の文字集合が指定された場合、順番通り (左から右に) 適用します。 <set>には、以下のものが指定できます。
- <version>
- NAMEPREP の特定のバージョンで記述されている禁止文字セット。 指定可能なバージョン番号については、
nameprepの項を参照してください。fileset:<pathname>- 禁止文字の定義を <pathname>ファイルから読み込みます。 ファイルの記述方法については、 セットファイルの形式の項を参照してください。
[設定例]
nameprep-prohibit nameprep-03
nameprep-unassigned
このエントリでは、NAMEPREP における未使用コードポイント (文字が割り 振られていないコードポイント) の検査方式を指定します。 2 つ以上の方式が指定された場合、順番通り (左から右に) 適用します。
[構文]
nameprep-unassigned<set> ...
<set> で未使用コードポイント集合の名称を指定します。 2 つ以上の文字集合が指定された場合、順番通り (左から右に) 適用します。 <set>には、以下のものが指定できます。
- <version>
- NAMEPREP の特定のバージョンで記述されている禁止文字セット。 指定可能なバージョン番号については、
nameprepの項を参照してください。fileset:<pathname>>- 未使用コードポイントの定義を <pathname>ファイルから 読み込みます。ファイルの記述方法については、 セットファイルの形式の項を参照してください。
[設定例]
nameprep-prohibit nameprep-03
alternate-encoding
このエントリでは代替エンコーディングの形式を指定します。 代替エンコーディングとは、DNS プロトコル上のエンコーディングから アプリケーション側のローカルエンコーディングへの変換に失敗した時に、 ローカルエンコーディングの代わりに使用されるエンコーディングです。 例えば日本語を扱うアプリケーションに DNS サーバから韓国のハングル文字を 含むドメイン名が返された場合には、日本語のローカルエンコーディングに 変換できないので、代わりにこの代替エンコーディングに変換された 結果が渡されます。
[構文]
alternate-encoding<encoding>
<encoding> に代替エンコーディングの名称を指定します。 代替エンコーディングは ASCII 互換エンコーディングでなくてはなりません。
[設定例]
alternate-encoding RACE
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

