クライアント設定ファイルは、多言語ドメイン名のための各種の設定が 記述されているファイルで、mDNkit を使用して多言語化 (国際化) したクライアント側のリゾルバが読み込むファイルです。 このファイルは MDN ライブラリの resconf モジュール によって読み込まれ、 多言語ドメインに関する以下のような設定ができます。
このファイルは通常のテキストファイルで、ファイルの各行 (# で始まるコメント行と、空行を除いて) は、 次のような単純なフォーマットで構成されます。
キーワード 値...
クライアント設定ファイルは、mDNkit をデフォルトの設定でコンパイルした 場合には以下に配置されます。
/usr/local/etc/mdnres.conf
以降、各キーワードごとに設定内容を記述します。
DNS プロトコル上の多言語ドメイン名のエンコーディングとして使用する エンコーディング (コードセット名) を指定します。
encoding には、使用するエンコーディング名を記述し、 次のものが指定できます。
このエントリは必須エントリであり、必ず記述しなければなりません。
DNS プロトコル上で使用される多言語ドメイン名のエンコーディング (server-encoding エントリで指定されたもの) の中には、多言語ドメイン名と従来の ASCII ドメイン名とを区別するために ZLD (zero-level domain) というドメインを必要とするものがあります。 ZLD は通常のトップレベルドメインのさらに上位ドメインに相当します。 ただしこれは DNS のシステム内部でのみ使われるドメインであり、 一般ユーザやアプリケーションからは見えないようになっています。
mDNkit のデフォルトの設定では、ZLD は使用できないようになっており、 設定ファイル中にこのエントリがあると警告メッセージが表示されます。 このエントリの指定を有効にするには、mDNkit の configure 実行時に --enable-zld オプションによって ZLD サポートを有効にしておく 必要があります。
正規化エントリでは、DNS サーバに送る前にドメイン名に適用すべき 正規化の方式を指定します。
scheme には、正規化形式を記述します。 以下のものが記述できます。
正規化形式には複数の形式が指定可能です。複数の形式が指定された場合、 順序通りに (左から右に) 適用されます。
mDNkit で多言語化されたリゾルバライブラリは、 アプリケーションが使用しているローカルコードセットを自動的に決定し、 DNS の応答メッセージ中のドメイン名を、そのコードセットに変換しようとします。 しかし、ドメイン名に使用されているある文字がローカルコードセットに マップされていないために、変換に失敗することもあり得ます。 例えば日本語コードセットを使用している日本語のアプリケーションが、 日本語の文字セットに含まれていない中国語の文字を含んだ DNS 応答を受信したような時にこのようなことが起こります。
代替エンコーディングエントリは、上記のような問題が生じた時に ローカルコードセットの代わりに使用するコードセットを指定します。
encoding はコードセット名で、RACE のような ASCII 互換エンコーディング を使用しなければなりません。
エンコーディングエイリアスエントリでは、コードセット名のエイリアスを 記述したファイルのパス名を記述します。
pathname には、エイリアスファイルへのパス名を指定します。 このエイリアスファイルは通常のテキストファイルで、 以下のような形式の行から構成されます。
alias-name name
alias-name は定義されるエイリアス名で、name は 実際のコードセット名か、定義済のエイリアス名です。
クライアント設定ファイルにはローカルコードセットを指定するエントリは 存在しません。 ローカルコードセットはアプリケーションがそのときに使用している ロケールの情報から決定されるからです。 ですから、それぞれのアプリケーションがそれぞれ異なるローカルコードセットを 使用することができますし、同一アプリケーションが複数のローカルコードセットを 切り替えながら使用することも可能です。
mDNkit はロケール情報からアプリケーションの使用しているローカルコードセットを 推測しようとしますが、時には失敗することもあります。 例えば、C ロケールで動作しているにも関わらず 非 ASCII コードセットを使用しているアプリケーションではロケール情報から ローカルコードセットを判定することは不可能ですし、mDNkit が知らない ロケールで動作するアプリケーションの場合にも推測に失敗するでしょう。
このような場合のために、環境変数 MDN_LOCAL_CODESET によって アプリケーションのローカルコードセットを強制指定することができるように なっています。 この変数にコードセット名 (もしくはそのエイリアス名) を指定すると、mDNkit はロケールの設定に関わらず、指定したコードセットを ローカルコードセットとして動作します。
以下に、コンフィギュレーションファイルの記述例を示します。
# # a sample configuration. # # DNS プロトコル上のエンコーディングとして RACE を使用する server-encoding RACE # 正規化の手順として、小文字に変換した後、KC 正規化法を使用する normalize unicode-lowercase unicode-form-kc # 代替エンコーディングとして RACE を使用する alternate-encoding RACE