メインコンテンツへジャンプする

JPNICはインターネットの円滑な運営を支えるための組織です

ロゴ:JPNIC

WHOIS 検索 サイト内検索 WHOISとは? JPNIC WHOIS Gateway
WHOIS検索 サイト内検索

mdnconv

概要

mdnconvはネームサーバの設定ファイルnamed.confやゾーンマスタファイルのためのコードセット (エンコーディング) 変換ツールです。

mdnconvは引数で指定されたファイル、 あるいは標準入力からテキストを入力し、 mDNkitの設定ファイル (mdn.conf) やオプションで指定されたエンコーディング変換および正規化を実行し、 結果を標準出力に書き出します。

具体的な使い方に関しては利用者ガイドのnamed.conf、ゾーンマスタファイルの作成の項をご覧ください。

起動

mdnconvを起動する際の、コマンド行の形式は次の通りです。

% mdnconv [オプション...] [ファイル名...]

オプション

mdnconvのオプションには、 mDNkitの設定ファイル(mdn.conf)のエントリと同じ設定機能を持っているものが多数あります。

設定ファイル内のエントリとオプションの両方を指定している場合、 その設定項目が複数回定義できるもの(例えばnameprep-mapエントリとそれに相当する -map オプション)であれば、 指定は両方とも有効になります。 正確には、設定ファイルの定義内容がまず設定され、 オプションで指定した内容が追加されます。

また、設定項目が一つしか定義できないもの(例えばidn-encodingとそれに相当する -out オプション)については、 両方指定するとオプションの方が優先されます。

mdnconvが認識するオプションは、次の通りです。 よく使われると思われるオプションに関しては、 短縮形として1文字のオプションを用意してあります。

-in <in-code>
-i <in-code>
入力テキストのエンコーディングを指定します。 mDNkitのローカルエンコーディングに相当します。
-out <out-code>
-o <out-code>
出力テキストのコードセット名<out-code>を指定します。 mDNkitの設定ファイルのidn-encodingエントリに相当します。
-conf <path>
-c <path>
mDNkitの設定ファイル(mdn.conf)のパス名を指定します。 オプション -conf-noconfのいずれも指定しなかった場合は、 デフォルトの設定ファイルを読み込みます。
-noconf
-C
mDNkitの設定ファイル(mdn.conf)を読み込まないようにします。
-reverse
-r
逆変換を行います。 このオプションを指定しなかった場合は、通常の変換を行います。
-nameprep <version>
-n <version>
NAMEPREPのバージョンを指定します。 mDNkitの設定ファイルのnameprepエントリに相当します。 このオプションは、 -reverseオプションが指定されたときは無視されます。
-nonameprep
-N
NAMEPREP処理を行いません。 このオプションは、 -reverseオプションが指定されたときは無視されます。
-map <scheme>
NAMEPREPのマッピング方式を指定します。 mDNkitの設定ファイルのnameprep-mapエントリに相当します。 このオプションは複数回指定することが可能ですが、 -reverseオプションが指定されたときは無視されます。
-normalize <scheme>
NAMEPREPのマッピング方式を指定します。 mDNkitの設定ファイルのnameprep-normalizeエントリに相当します。 このオプションは複数回指定することが可能ですが、 -reverseオプションが指定されたときは無視されます。
-prohibit <set>
NAMEPREPの禁止文字検査における禁止文字を指定します。 mDNkitの設定ファイルのnameprep-prohibitエントリに相当します。 このオプションは複数回指定することが可能ですが、 -reverseオプションが指定されたときは無視されます。
-unassigned <set>
NAMEPREPの未割り当て文字検査における未割り当て文字を指定します。 mDNkitの設定ファイルのnameprep-unassignedエントリに相当します。 このオプションは複数回指定することが可能ですが、 -reverseオプションが指定されたとき、 あるいは-unassigncheckが指定されなかったときは無視されます。
-unassigncheck
-u
NAMEPREPの未割り当て文字検査を行います。 このオプションを指定しなかった場合、検査は行いません。 -reverseオプションが指定されたときは、 無視されます。
-delimiter <codepoint>
ピリオド(`.')以外にドメイン名の区切りと見なしたい文字を指定します。 mDNkitの設定ファイルのdelimiter-mapエントリに相当します。 このオプションは複数回指定することが可能ですが、 -reverseオプションが指定されたとき、 あるいは-delimitermap が指定されなかったときは無視されます。
-localmap <map>
NAMEPREPとは別に行う、ローカルなマッピングの方式を指定します。 mDNkitの設定ファイルのlocal-mapエントリで、 トップレベルドメイン`.'に対するマッピングを指定することに相当します。 このオプションは複数回指定することが可能ですが、 -reverseオプションが指定されたとき、 あるいは-nolocalmap が指定されたときは無視されます。
-nolocalmap
-L
ローカルなマッピングを行いません。
-delimitermap
-d
ピリオド (`.') 以外の文字を、 ピリオドにマッピングします。 このオプションを指定しなければ、 通常このマッピングは行いません。 -reverseオプションが指定されたときは、 無視されます。
-whole
-w
正規化とターゲットコードセットへの変換を入力されたテキスト全体に対して行います。 このオプションを指定しなければ非ASCII文字を含むドメイン名だと判断された部分のみが変換対象となります。 詳細は変換処理の詳細をご覧ください。
-alias path
-a path
エンコーディング名の別名を定義します。 mDNkitの設定ファイルのencoding-alias-fileエントリに相当します。
-flush
行ごとに出力をフラッシュします。 mdnconvはファイルやパイプへの出力の場合、 通常は複数行のデータをまとめて書き出しますが、 このオプションを指定すると1行ごとに変換結果を書き出します。 通常はこのオプションを指定する必要はありませんが、 mdnconvをフィルタプログラムとして他のプログラムから利用する場合などに便利なことがあります。
-version
-v
バージョン情報を表示して実行を終了します。 mdnconvのバージョンと、 ライブラリ(libmdn)のバージョンを表示します。 両者は通常同一のはずですが、 共有ライブラリを使っている場合には違っていることがあるかもしれません。

変換処理の詳細

mdnconvが行う変換処理をステップごとに記述します。

  1. ファイルあるいは標準入力からテキストを1行読み込みます。
  2. 行末の改行コードを取り除きます。 これは -wholeオプションをつけてmdnconvを実行し、 かつ出力エンコーディングがUTF-5やRACEなどASCII互換エンコーディングの場合に、 改行コードもUTF-5やRACEでエンコードされてしまい、 改行がなくなってしまうのを避けるためです。
  3. 行をUTF-8エンコーディングに変換します。 通常は行全体を入力エンコーディングからUTF-8に変換しますが、 入力コードセットが"RACE"などのASCII互換エンコーディング(ACE)の場合、 この方法では入力行中にスペース等ACEには含まれない文字が入っていると変換できずにエラーになってしまうため、 次のような特別な処理を行います。
    1. 行の中から正しいASCIIドメイン名と解釈できる部分文字列(つまり英数字とハイフン、 ピリオドだけから構成される部分、ただし先頭は英数字のみ、 末尾はハイフン以外の文字)を取り出す。
    2. それぞれを入力ACEエンコーディングからUTF-8に変換してみる。
    3. 変換に成功すればその部分文字列を変換結果で置き換え、 変換に失敗すれば(例えば変換対象文字列がそのACE特有のプリフィックスやサフィックスを持たない場合)その部分は置き換えず、 元の文字列のままとする。
    このような処理を行うことにより、 行の途中にACEでエンコードされた文字列が混ざっている場合にも、 かなり高い確率で正しくUTF-8への変換を行うことができます。
  4. 変換結果がUTF-8として正しいエンコーディングであるかをチェックします。 本来この処理は不要なはずですが、 コード変換の実装にバグがあった場合に早い段階で検出できるよう、 ここでチェックをするようにしてあります。
  5. -wholeオプションが指定されていれば次の処理対象の取り出しを飛ばし、 行全体を処理対象として 7. に飛びます。
  6. UTF-8に変換された行の中から多言語ドメイン名の部分を取り出します。 取り出されるのは次のような部分文字列です。
    • 1文字以上の非ASCII文字を含むこと。
    • 従来のドメイン名に許される文字(アルファベット、数字、ハイフン)、非ASCII文字、ピリオドだけから構成されていること
    取り出された部分のみを以降の正規化等の処理対象とします。
  7. -delimitermapが指定されている場合は、 設定されている区切り文字をピリオド (`.') に変換します。
  8. ローカルなマッピングを行います。 ただし、-nolocalmapが指定されている場合、 この処理は飛ばします。
  9. NAMEPREPによる正規化(マッピング、正規化、 禁止文字の検査) を行います。 ただし、-nameprepが指定されている場合、 この処理は飛ばします。
  10. -unassignedが指定されている場合は、 NAMEPREPによる未割り当てコードポイントの検査を行います。
  11. 再度変換結果がUTF-8として正しいエンコーディングであるかをチェックします。 本来この処理は不要なはずですが、 正規化の実装にバグがあった場合を考えてチェックを入れてあります。
  12. UTF-8 エンコーディングから -outで指定された出力エンコーディングに変換します。
  13. -wholeオプションが指定されていた場合には、 変換された文字列をそのまま標準出力に出力します。 指定されていなかった場合には、 変換された文字列と6.で処理対象とならなかった部分とをマージしてからやはり標準出力に出力します。 どちらの場合も最後に改行コードを出力します。
  14. すべての入力行を処理し終われば終了します。 そうでなければ1.に戻ります。

このページを評価してください

このWebページは役に立ちましたか?
よろしければ回答の理由をご記入ください

それ以外にも、ページの改良点等がございましたら自由にご記入ください。

回答が必要な場合は、お問い合わせ先をご利用ください。

ロゴ:JPNIC

Copyright© 1996-2024 Japan Network Information Center. All Rights Reserved.