スポンサーリンク

RESOLVER(3) FreeBSD ライブラリ関数マニュアル RESOLVER(3)

名称

res_query, res_search, res_mkquery, res_send, res_init, dn_comp, dn_expand − リゾルバルーチン

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>

int

       res_query(const char *dname, int class, int type, u_char *answer,int anslen);
int

res_search(const char *dname, int class, int type, u_char *answer, int anslen);

int
res_mkquery
(int op, const char *dname, int class, int type, const u_char *data, int datalen, const u_char *newrr_in, u_char *buf, int buflen);

int
res_send
(const u_char *msg, int msglen, u_char *answer, int anslen);

int
res_init
();

dn_comp(const char *exp_dn, u_char *comp_dn, int length, u_char **dnptrs, u_char **lastdnptr);

int
dn_expand
(const u_char *msg, const u_char *eomorig, const u_char *comp_dn, char *exp_dn, int length);

解説

これらのルーチンは、インターネットドメインネームサーバを使用し、問い合わ せと応答メッセージの作成、送信、解釈を行います。

リゾルバルーチンが使用するグローバルな設定と状態の情報は、構造体 _res に 保存されます。ほとんどの値は、適切なデフォルト値になっているので無視でき ます。 _res.options に保存されるオプションは、 resolv.h で以下のように定 義されています。オプションは、有効なオプションのビット論理和をとった、単 純なビットマスクとして保存されています。

       RES_INIT

初期ネームサーバアドレスとデフォルトドメイン名が初期化され ている場合は真です ( res_init() が呼び出された場合など)。

RES_DEBUG
デバッグメッセージを出力します。

RES_AAONLY
信頼できる応答のみを受け入れます。このオプションを使用した 場合、信頼できる応答かエラーが見つかるまで res_send() を続 ける必要があります。現在のところ、これは実装されていませ ん。

RES_USEVC
UDP データグラムの代わりに TCP 接続を問い合わせに使用しま す。

RES_STAYOPEN
RES_USEVC とともに使用し、問い合わせと問い合わせの間も TCP 接続を開いたままに保ちます。多くの問い合わせを定期的に行う プログラムのみで便利です。通常の使用には UDP を使うべきで す。

RES_IGNTC
現在は使用されません (トランケーションエラーを無視します、 すなわち、 TCP で再試行しません)。

RES_RECURSE
問い合わせの反復要求ビットを設定します。これがデフォルトで す ( res_send() は反復問い合わせを行なわず、ネームサーバが 反復を処理することを期待します)。

RES_DEFNAMES
設定すると、 res_search() がシングルコンポーネント名 (ドッ トを含まない名前) にデフォルトのドメイン名を追加するように なります。このオプションはデフォルトで有効になっています。

RES_DNSRCH
このオプションを設定すると、 res_search() が、現在のドメイ ンと親ドメインでホスト名を検索するようになります。 hostname(7) を参照してください。これは、標準ホスト検索ルー チン gethostbyname(3) によって使用されます。このオプション はデフォルトで有効になっています。

NOALIASES
このオプションは、 ‘‘HOSTALIASES’’ 環境変数によって制御さ れるユーザレベルのエイリアシング機能を無効にします。ネット ワークデーモンでは、このオプションを設定する必要がありま す。

RES_USE_INET6
IPv6 のみのアプリケーションのサポートを有効にします。 IPv4 アドレスは IPv4 射影アドレスとして返されるようになります。 たとえば、 10.1.1.1 は ::ffff:10.1.1.1 のように返されま す。このオプションは、特定のカーネルコンフィギュレーション の場合にだけ意味があります。

RES_USE_EDNS0
EDNS0 拡張の OPT pseudo-RR のサポートを有効にします。この オプションにより、リゾルバコードは DNS 問い合わせに OPT pseudo-RR を加えて、こちらの受け取りバッファの大きさを通知 します。このオプションにより、DNS サーバはデフォルトでない 大きさの受け取りバッファを利用できるので、より大きな応答を 送ることができるようになります。 EDNS0 拡張されたDNS 問い 合わせパケットは非 EDNS0 DNS サーバとは互換性がありませ ん。

res_init() ルーチンは、設定ファイルを読み込み (設定ファイルが存在する場 合。 resolver(5) 参照)、デフォルトドメイン名、検索リスト、ローカルネーム サーバのインターネットアドレスを入手します。サーバが設定されていない場合 は、リゾルバを実行しているホストが試されます。現在のドメイン名は、設定 ファイルで指定されていない場合、ホスト名で定義されますが、環境変数 LOCALDOMAIN で上書きすることもできます。検索リストをプロセスごとに上書き する場合は、ブランクで区切られた複数のトークンをこの環境変数に含めます。 これは、設定ファイルの search コマンドに似ています。別の環境変数 ‘‘RES_OPTIONS’’ を設定すれば、特定の内部リゾルバオプションを上書きできま す。内部リゾルバオプションは、上書きされなければ、 _res 構造体のフィール ドを変更することで設定されるか、設定ファイルの options コマンドから継承さ れます。 ‘‘RES_OPTIONS’’ 環境変数のシンタックスについては、 resolver(5) を参照してください。通常の場合、初期化は以下のルーチンを初めて呼び出した ときに実行されます。

res_query() 関数は、サーバ問い合わせメカニズムのインタフェースを提供する もので、問い合わせの作成、作成された問い合わせのローカルサーバへの送信、 応答の待機、応答の予備チェックを行います。問い合わせは、完全な形でのドメ イン名 dname に対する、指定された typeclass の情報を要求します。応答 メッセージは answer バッファに残され、呼び出し側が指定する anslen の長さ になっています。

res_search() ルーチンは、 res_query() と同じように問い合わせの作成と応答 の待機を行いますが、それに加えて RES_DEFNAMES と RES_DNSRCH オプションに よって制御されるデフォルトと検索規則も実装しています。このルーチンは最初 に成功した応答を返します。

残りのルーチンは、 res_query() が使用する低レベルルーチンです。 res_mkquery() 関数は、標準問い合わせメッセージを作成して buf に配置し、問 い合わせのサイズを返します。問い合わせが buflen より長い場合は -1 を返し ます。問い合わせタイプ op は、通常の場合 QUERY ですが、 ⟨arpa/nameser.h⟩ で定義されているどの問い合わせタイプにもできます。問い合わせのドメイン名 は dname で指定します。 newrr は現在使用されていませんが、更新メッセージ を作成するためのものです。

res_send() ルーチンは、事前フォーマット済み問い合わせを送信し、応答を返し ます。 RES_INIT が設定されていない場合は res_init() を呼び出します。ロー カルネームサーバへの問い合わせの送信、およびタイムアウトと再試行の処理も 行います。応答メッセージの長さを返しますが、エラーがあった場合は -1 を返 します。

dn_comp() 関数は、ドメイン名 exp_dn を圧縮し、 comp_dn に保存します。圧縮 された名前のサイズを返しますが、エラーがあった場合は -1 を返します。 comp_dn が指す配列のサイズは length で指定します。圧縮の際、現在のメッ セージでそれまでに圧縮された名前を指すポインタ dnptrs の配列を使用しま す。最初のポインタはメッセージの最初を指し、リストは NULL で終わります。 配列の制限は lastdnptr で指定します。 dn_comp() の副作用は、名前が圧縮さ れたときにメッセージに挿入されるラベルのポインタのリストが更新されること です。 dnptr が NULL である場合、名前は圧縮されません。 lastdnptr が NULL である場合、ラベルのリストは更新されません。

dn_expand() エントリは、圧縮されたドメイン名 comp_dn を完全なドメイン名に 展開します。圧縮された名前は、問い合わせもしくは応答メッセージに含まれま す。 msg は、メッセージの最初を指すポインタです。展開された名前は、 exp_dn が示すサイズ length のバッファに配置されます。圧縮された名前のサイ ズが返されますが、エラーがあった場合は -1 が返されます。

関連ファイル

       /etc/resolv.conf

設定ファイル。 resolver(5) を参照のこと。

関連項目

gethostbyname(3), resolver(5), hostname(7), named(8)

RFC1032, RFC1033, RFC1034, RFC1035, RFC974

       Name Server Operations Guide for BIND.

歴史

res_query() 関数は 4.3BSD で登場しました。

FreeBSD 10.0 June 4, 1993 FreeBSD 10.0

スポンサーリンク