runidn
概要
runidnは標準的なリゾルバ関数を用いて名前解決を行う UNIX クライアントを、 再コンパイルなしに国際化ドメイン名を扱えるようにするためのコマンドです。 具体的には、名前解決用の関数 (例えば gethostbyname) が アプリケーションのローカルエンコーディング (EUC-JP 等) で表現された ホスト名を受け付けるようになります。またこれらの API が国際化ホスト名を ローカルエンコーディングで返すようになります。
ただし、システムによっては使用できなかったり、コマンドによっては効果が なかったりします。これらの制限に関しては制限事項 の項をご覧ください。
設定
idnkit の標準的なインストールでは、runidn はインストールされません。
runidn を使用したい場合は、configure
スクリプト実行時に
--enable-runidn
を指定してください。詳しくは、
idnkit installation guide の
configure
実行
をご覧ください。
また、runidn を使用するうえで、 idnkit の設定ファイルを利用して、 使用するエンコーディングや NAMEPREP を設定することができます。 このファイルの設定方法については idnkit の設定をご覧ください。
また、オプションで明示しない限り、runidn はアプリケーションの ローカルエンコーディングを自動的に推測しますが、推測に失敗する場合も あります。そのような場合の対処方法は ローカルエンコーディングについて をご覧ください。
使用方法
runidn の使い方は極めて簡単で、アプリケーションの起動コマンドの
先頭にコマンド名 runidn
をつけるだけです。
% runidn [オプション...] コマンド [引数...]
例えば telnet
コマンドを使用してホスト「私の会社.jp」に
接続するには次のようにします。
% runidn telnet 私の会社.jp
なお、runidn は 環境変数 IDN_DISABLE の設定を明示的に無視するため、 IDN_DISABLE が設定されているかどうかにかかわらず、ドメイン名の変換処理を 行います。
オプション
runidn は次のオプションを認識します。
-
-e
ローカルエンコーディング - アプリケーションのローカルエンコーディングを指定します。 このオプションを指定しなかった場合、ロケールや環境変数から ローカルエンコーディングの自動判定を行います。 判定方法について詳しくは idnkit の設定 の ローカルエンコーディングについて の項をご覧ください。
制限事項
runidn は、idnkit が提供している方法の中で最も手軽にクライアントが 国際化ドメインを扱えるようにするものですが、どのようなクライアントにも 適用できるわけではありません。
runidn はシステムの持つ共有ライブラリの動的リンク機構 (ライブラリのプリロード機能) を利用し、 クライアントアプリケーションの実行時に、アプリケーションにリンクされている 名前解決用の関数を国際化ドメイン名を扱う機能を持たせたバージョンのものと 置き換えることによって国際化ドメイン名の処理を実現します。 runidn が置き換えるのは、以下の関数です。
- gethostbyname
- gethostbyname_r
- gethostbyname2
- gethostbyname2_r
- gethostbyaddr
- gethostbyaddr_r
- getipnodebyname
- getipnodebyaddr
- getaddrinfo
- getnameinfo
したがって runidn が動作するには次のようないくつかの制限があります。
- 共有ライブラリの動的リンク機構を用いているので、 共有ライブラリが使用できるシステムでなければなりません
- 環境変数
LD_PRELOAD
または類似の機構による ライブラリのプリロード機能を持つシステムでなければなりません - runidn の対象となるコマンドはリゾルバライブラリを動的リンク していなくてはなりません
- システムのライブラリが iconv() 関数を提供していない場合、外部の ライブラリを用いることになりますが、そのライブラリも共有ライブラリで なければなりません。
- アプリケーションは名前解決に上記の関数を使用していなければなりません
- セキュリティ上の理由から一般に setuid されたコマンドはプリロード機能が 使えないようになっているので、setuid されたコマンドであってはなりません