res_init(3) res_send,

ÜBERSICHT

#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>
extern struct __res_state _res;


int res_init(void);

int res_query(const char *dname, int class, int type,

unsigned char *answer, int anslen);

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

int res_querydomain(const char *name, const char *domain,
int class, int type, unsigned char *answer, int anslen);

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

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

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

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

Linken Sie mit der Option -lresolv.

BESCHREIBUNG

Diese Funktionen stellen Anfragen an Internet Domain Nameserver und interpretieren die Rückmeldungen.

Die Funktion res_init() liest die Konfigurationsdateien (siehe resolv.conf(5)), um den vorgegebenen Domainnamen, die Suchreihenfolge und Nameserveradresse(n) zu erhalten. Wenn kein Server angegeben ist, wird der lokale Host verwendet. Wenn keine Domain angegeben ist, wird diejenige benutzt, die dem lokalen Host zugeordnet ist. Dies kann mit der Umgebungsvariablen LOCALDOMAIN überschrieben werden. res_init() wird normalerweise durch den ersten Aufruf von einer der anderen Funktionen ausgeführt.

Die Funktion res_query() fragt den Nameserver nach dem vollständigen Domain-Namen name des spezifizierten Typs type und der Klasse class. Die Antwort verbleibt im Puffer answer der Länge anslen, der vom Aufrufenden bereitgestellt wurde.

Die Funktion res_search() stellt eine Anfrage und wartet wie res_query() auf die Antwort, implementiert jedoch zusätzlich die Vorgabe- und Such-Regeln, die durch RES_DEFNAMES und RES_DNSRCH gesteuert werden (siehe im Folgenden die Beschreibung der _res-Optionen).

Die Funktion res_querydomain() macht mittels res_query() eine Anfrage auf die Verkettung von name und domain.

Die folgenden Funktionen sind Routinen tieferer Ebene, die von res_query() benutzt werden.

Die Funktion res_mkquery() konstruiert eine Anfragenachricht für den Domain-Namen dname in buf der Länge buflen. Der Anfragetyp op ist gewöhnlich QUERY, kann aber jeder der in <arpa/nameser.h> definierten Typen sein. newrr wird momentan nicht benutzt.

Die Funktion res_send() sendet eine vorformatierte Anfrage, die in msg gegeben ist und die Länge msglen hat und gibt die Antwort in answer zurück, die die Länge anslen hat. Sie ruft res_init() auf, falls sie noch nicht aufgerufen wurde.

Die Funktion dn_comp() komprimiert den Domain-Namen exp_dn und speichert ihn in dem Puffer comp_dn der Länge length. Die Komprimierung benutzt ein Feld von Zeigern dnptrs auf bereits komprimierte Namen in der aktuellen Nachricht. Der erste Zeiger zeigt auf den Anfang der Nachricht und die Liste endet mit NULL. Die Grenze des Feldes ist angegeben durch lastdnptr. Wenn dnptr NULL ist, dann sind Domain-Namen nicht komprimiert. Wenn lastdnptr NULL ist, dann wird die Liste der Namen nicht aktualisiert.

Die Funktion dn_expand() expandiert den komprimierten Domain-Namen comp_dn zu einem vollen Domain-Namen, welcher in dem Puffer exp_dn der Größe length platziert ist. Der komprimierte Name ist in einer Anfrage- oder Antwortnachricht enthalten und msg zeigt auf den Anfang der Nachricht.

Die Resolver-Routinen benutzen globale Konfigurations- und Statusinformationen, die in der Struktur _res enthalten sind, welche in <resolv.h> definiert ist. Das einzige Feld, das normalerweise vom Benutzer manipuliert wird, ist _res.options. Dieses Feld kann bitweise Oder-Verknüpfungen der folgenden Optionen enthalten:

RES_INIT
Wahr, falls res_init() aufgerufen wurde.
RES_DEBUG
Gibt Debugging-Meldungen aus. Diese Option ist nur dann verfügbar, wenn glibc mit Debugging-Unterstützung kompiliert wurde, was allerdings nicht die Vorgabe ist.
RES_AAONLY
Akzeptiere nur autoritative Antworten. res_send() fährt fort, bis es eine autoritative Antwort findet oder gibt einen Fehler zurück. [Noch nicht implementiert.]
RES_USEVC
TCP-Verbindungen statt UDP-Datagramme für Anfragen benutzen.
RES_PRIMARY
Nur primäre Domainnameserver abfragen.
RES_IGNTC
Ignoriere Fehler bei verstümmelten Antworten. Versuche es nicht erneut mit TCP. [Noch nicht implementiert.]
RES_RECURSE
Setze das Rekursionswunsch-Bit in Anfragen. Rekursion wird von dem Domainnameserver ausgeführt, nicht von res_send(). [Standardmäßig eingeschaltet]
RES_DEFNAMES
Falls gesetzt fügt res_search() den Vorgabedomainnamen an Einzelkomponentennamen an, d.h. an solchen, die keinen Punkt enthalten. [Standardmäßig eingeschaltet]
RES_STAYOPEN
Benutzt mit RES_USEVC um die TCP-Verbindung zwischen Anfragen geöffnet zu halten.
RES_DNSRCH
Falls gesetzt, sucht res_search() nach Hostnamen in der aktuellen und in übergeordneten Domains. Diese Option wird von gethostbyname(3) benutzt. [Eingeschaltet durch Vorgabe.]

Diese Liste ist unvollständig. Sie finden die Beschreibung einiger weiterer Schalter in resolv.conf(5).

RÜCKGABEWERT

Die Funktion res_init() gibt 0 bei Erfolg zurück oder -1, falls ein Fehler auftritt.

Die Funktionen res_query(), res_search(), res_querydomain(), res_mkquery() und res_send() geben die Länge der Antwort zurück oder -1, falls ein Fehler auftritt.

Die Funktionen dn_comp() und dn_expand() geben die Länge des komprimierten Namens zurück oder -1, falls ein Fehler auftritt.

DATEIEN

/etc/resolv.conf          Resolver-Konfigurationsdatei
/etc/host.conf            Resolver-Konfigurationsdatei

KONFORM ZU

4.3BSD.

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 3.74 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer <[email protected]> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <[email protected]rg>.