Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ res_mkquery(3) — NEWS-os 4.2.1R

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

gethostbyname(3N)

named(8)

resolver(5)

hostname(7)

RESOLVER(3)  —  NEWS-OS Programmer’s Manual

名称

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

形式

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

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

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

res_mkquery(op, dname, class, type, data, datalen, newrr, buf, buflen)
int op;
char ∗dname;
int class, type;
char ∗data;
int datalen;
struct rrec ∗newrr;
char ∗buf;
int buflen;

res_send(msg, msglen, answer, anslen)
char ∗msg;
int msglen;
char ∗answer;
int anslen;

res_init()

dn_comp(exp_dn, comp_dn, length, dnptrs, lastdnptr)
char ∗exp_dn, ∗comp_dn;
int length;
char ∗∗dnptrs, ∗∗lastdnptr;

dn_expand(msg, eomorig, comp_dn, exp_dn, length)
char ∗msg, ∗eomorig, ∗comp_dn, exp_dn;
int length;

解説

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

リゾルバ解析ルーチンで使用するグローバルな設定や情報は、構造体 _res に保存されます。 この値のほとんどは適切なデフォルト値であり、考慮する必要はありません。 オプションは resolv.h で定義される _res.options で以下のように格納されています。 また、これらのオプションは、単一のビットとして格納されており、 そのために論理和をとって指定することができます。

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
再帰 bit をセットして問い合わせを行います。 これは、デフォルトです。 (res_send は、ネームサーバが再帰を扱うのを除いて、 問い合わせを繰り返しません)。

RES_DEFNAMES
res_search は 単一ラベル (ドットを含まないもの) の問い合わせに対して、 デフォルトドメイン名を付け加えます。 これは、デフォルトです。

RES_DNSRCH
res_search は はホスト名を現在のドメインと、上位ドメインから検索します (hostname(7) 参照)。 これは、デフォルトです。

res_init は、 初期設定ファイル (resolver(5) 参照) を読み込み、デフォルトのドメイン名と、検索リスト、 使用するネームサーバのインタネットアドレスを得ます。 もし、サーバが記述されていない場合はリゾルバ自身を実行している ホストのネームサーバが試されます。 また、現在のドメイン名は記述のない場合、ホスト名から生成されますが、 これは環境変数 LOCALDOMAIN によって変更することが可能です。 初期化は通常、以下のルーチンの一つが最初に呼ばれた時に行われます。

res_query はサーバへの問い合わせ機構のインターフェースを提供します。 まず問い合わせを作成した後、サーバに送り返答を待ち、返答の予備的な検査 を行います。 問い合わせは、完全なドメイン名 dname に関して指定された type と class に対する情報を要求します。 返答は answer バッファに格納され、 anslen にバッファの長さが納められます。

res_search は、 res_query と同様に問い合わせを行い返答を得ますが、 RES_DEFNAMES と RES_DNSRCH オプションによって定められる検索ルールに従っ て、情報が得られるまで検索を行います。

残りの関数は、 res_query によって使用される下位レベルの関数です。 res_mkquery は、標準の問い合わせメッセージを作成し、 buf に格納します。 また、 res_mkquery は、問い合わせのサイズを返しますが、そのサイズが buflen より大きい場合は、−1 を返します。 通常、 op は QUERY ですが、 <arpa/nameser.h> で定義される問い合わせのタイプのどれかにすることができます。 dname は、問い合わせに使用されるドメイン名です。 newrr は現在使用されていませんが、 更新メッセージの作成を予定しています。

res_send は、問い合わせをネームサーバへ送信し、返答を返します。 RES_INIT がセットされていない場合、 このルーチンは res_init を呼び出し、 問い合わせをネームサーバへ送信し、タイムアウトとリトライを処理します。 このルーチンは、 メッセージの長さを返しますが、 エラーが発生した場合は、−1 を返します。

dn_comp は、 ドメイン名 exp_dn を圧縮し、それを comp_dn に格納します。 このルーチンは、圧縮された名前のサイズを返しますが、 エラーが発生した場合は、−1 を返します。 length は、 comp_dn で示される配列のサイズです。 圧縮の際には、そのメッセージの中で以前に圧縮された名前を示すポインタの リストとして dnptrs を使用します。 最初のポインタはメッセージの先頭を指し、 リストの最後は NULL で終了します。 リストの大きさは、最後を示すポインタ lastdnptr によって示されます。 副次的効果として、 dn_comp によって名前が圧縮され、 メッセージ中に挿入されたラベルを 指すポインタのリストを、 更新します。 dnptr が NULL の場合、 名前の圧縮は行われません。 また、 lastdnptr が NULL の場合、 リストの更新は行われません。

dn_expand は、圧縮されたドメイン名 comp_dn を、完全なドメイン名に展開します。 msg は、圧縮された名前が含まれている、問い合わせまたは返答のメッセージの先 頭を指すポインタです。 展開された結果は exp_dn で示されるバッファに格納され、そのサイズは length で示されます。 この関数は、 短縮された名前のサイズを返しますが、 エラーが発生した場合は、−1 を返します。

関連ファイル

/etc/resolv.conf

関連事項

gethostbyname(3N), named(8), resolver(5), hostname(7),
RFC1032, RFC1033, RFC1034, RFC1035, RFC974,
SMM:11 Name Server Operations Guide for BIND

NEWS-OSRelease 4.2.1R

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026