mDNkitの設定
mDNkit が提供するツール、コマンドのうち、 mdnconv, mDN Wrapper, runmdn および mdnsproxy は 共通の設定ファイルを参照します。
このファイルには mDNkit を利用したクライアントが必要とするいく つかの情報を設定する必要があります。 例えば正規化の方式や DNS プロトコル上で用いられるドメイン名のエンコーディング 方法などをこのファイルで指定します。 ここでは、これらの情報の設定方法と意味を説明します。
また、アプリケーションの使用するローカルエンコーディングは アプリケーションの動作するロケール情報から取得します。これについても 合わせて説明します。
設定ファイル
mDNkit の設定ファイルは通常のテキストファイルで、ファイルの 各行 (# で始まるコメント行と、空行を除いて) は、次のような単純な フォーマットで構成されます。
キーワード 値...
idn-encoding
リソルバや DNS サーバによって使用される、多言語ドメイン名の エンコーディングを指定します。
[構文]
idn-encoding
<encoding>
<encoding>として、次の名称が指定できます。
AltDUDE
AMC-ACE-M
AMC-ACE-O
AMC-ACE-R
BRACE
DUDE
LACE
RACE
UTF-6
UTF-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