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

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

ロゴ:JPNIC

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

runmdn

概要

runmdn は gethostbyname などの 標準的なリゾルバ関数を用いて名前解決を行う UNIX クライアントを、 再コンパイルなしに多言語ドメイン名を扱えるようにするためのコマンドです。

runmdn は 環境変数 MDN_DISABLE の設定を明示的に無視するため、 MDN_DISABLE が設定されているかどうかにかかわらず、ドメイン名の変換処理を 行います。


起動

% runmdn [オプション...] コマンド [引数...]

例えばtelnetコマンドで多言語ドメイン名を扱うためには、 次のようにします。

% runmdn telnet ログイン.どこかの会社.jp

オプション

runmdn は次のオプションを認識します。

-e ローカルエンコーディング
アプリケーションのローカルエンコーディングを指定します。 このオプションを指定しなかった場合、ロケールや環境変数から ローカルエンコーディングの自動判定を行います。 判定方法について詳しくは mDNkit 設定ファイルローカルエンコーディングについて の項をご覧ください。

実装

runmdn は共有ライブラリのプリロード機構を用いて、標準的な名前解決用の 関数を、多言語ドメイン名の処理機能を持つ別のバージョンのものに動的に 置き換えることで、クライアントでの多言語ドメイン名の処理を実現します。

多くのシステムでは、共有ライブラリのプリロードは 環境変数LD_PRELOADを用いて実現されています。 この環境変数にプリロードしたい共有ライブラリファイルのパス名を指定すると、 アプリケーションの実行時にアプリケーションに標準の共有ライブラリがリンク される前に指定したライブラリがリンクされます。 これによって標準のライブラリ関数を置換えることができます。

runmdnの実体はこの環境変数LD_PRELOADを設定して引数で 指定されたコマンドを起動するだけのシェルスクリプトであり、実際に 多言語ドメイン名の処理を行うのはアプリケーションにリンクされる 共有ライブラリ libmdnresolv です。

libmdnresolv をリンクすることにより、多くのシステムで標準的に 用意されている次の名前解決関数が置き換わります。

gethostbyname
gethostbyname_r
gethostbyname2
gethostbyname2_r
gethostbyaddr
gethostbyaddr_r
getipnodebyname
getipnodebyaddr
getaddrinfo
getnameinfo

またメモリ管理等の都合により、これらの名前解決関数の置換えにしたがって、 次の関数も置き換わります。

freehostent
freeaddrinfo

これらの関数にはオリジナルと比較して次のような機能が追加されています。

  1. 引数で指定されたドメイン名をローカルコードセットから国際化 DNS で用いられる エンコーディングに変換するとともに NAMEPREP 等の正規化を行います。
  2. DNS から返ってきたドメイン名のエンコーディングをローカルコードセットに 変換します。

エンコーディング変換や正規化等の処理はすべて MDN ライブラリ (libmdn) の res モジュールを使用しています。

現在の実装では libmdnresolv は MDN ライブラリ (libmdn) を 呼び出すのではなく、libmdn 自体を内部に抱え込むような形態になっていますが、 これは単なる実装上の都合からそうなっているだけで、論理的には MDNライブラリ の機能を呼び出しているといってよいでしょう。

また使用するエンコーディングや正規化の設定は mDNkit設定ファイルの設定を利用します。


制限

runmdnにはいくつかの制限があり、どんなシステムでも使えるわけでは ありません。

  • runmdn は共有ライブラリの動的リンク機構を用いているので、 共有ライブラリが使用できるシステムでなければなりません。
  • また環境変数 LD_PRELOAD または類似の機構による ライブラリのプリロード機能を持つシステムでなければなりません。
  • runmdn の対象となるコマンドはリゾルバライブラリを動的リンク していなくてはなりません
  • システムのライブラリが iconv() 関数を提供していない場合、外部の ライブラリを用いることになりますが、そのライブラリも共有ライブラリで なければなりません。
  • アプリケーションは名前解決に上記の関数を使用していなければなりません。
  • セキュリティ上の理由から一般に setuid されたコマンドはプリロード機能が 使えないようになっているので、setuid されたコマンドであってはなりません。

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

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

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

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

ロゴ:JPNIC

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