resolver(3) Library Functions Manual resolver(3) BEZEICHNUNG res_ninit, res_nquery, res_nsearch, res_nquerydomain, res_nmkquery, res_nsend, res_nclose, res_init, res_query, res_search, res_querydomain, res_mkquery, res_send, dn_comp, dn_expand - Resolver-Routinen BIBLIOTHEK Resolver-Bibliothek (libresolv, -lresolv) UBERSICHT #include #include #include struct __res_state; typedef struct __res_state *res_state; int res_ninit(res_state statep); void res_nclose(res_state statep); int res_nquery(res_state statep, const char *dname, int class, int type, unsigned char answer[.anslen], int anslen); int res_nsearch(res_state statep, const char *dname, int class, int type, unsigned char answer[.anslen], int anslen); int res_nquerydomain(res_state statep, const char *name, const char *domain, int class, int type, unsigned char answer[.anslen], int anslen); int res_nmkquery(res_state statep, int op, const char *dname, int class, int type, const unsigned char data[.datalen], int datalen, const unsigned char *newrr, unsigned char buf[.buflen], int buflen); int res_nsend(res_state statep, const unsigned char msg[.msglen], int msglen, unsigned char answer[.anslen], int anslen); int dn_comp(const char *exp_dn, unsigned char comp_dn[.length], 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[.length], int length); [[veraltet]] extern struct __res_state _res; [[veraltet]] int res_init(void); [[veraltet]] int res_query(const char *dname, int class, int type, unsigned char answer[.anslen], int anslen); [[veraltet]] int res_search(const char *dname, int class, int type, unsigned char answer[.anslen], int anslen); [[veraltet]] int res_querydomain(const char *name, const char *domain, int class, int type, unsigned char answer[.anslen], int anslen); [[veraltet]] int res_mkquery(int op, const char *dname, int class, int type, const unsigned char data[.datalen], int datalen, const unsigned char *newrr, unsigned char buf[.buflen], int buflen); [[veraltet]] int res_send(const unsigned char msg[.msglen], int msglen, unsigned char answer[.anslen], int anslen); BESCHREIBUNG Hinweis: Diese Seite ist unvollstandig (verschiedene durch Glibc bereitgestellte Resolver-Funktionen sind nicht beschrieben) und ist wahrscheinlich veraltet. Diese unten beschriebenen Funktionen stellen Anfragen an Internet Domain Nameserver und interpretieren die Ruckmeldungen. Das API besteht aus einer Gruppe von moderneren, wiedereintrittsfahigen Funktionen und einer alteren Gruppe von uberholten, nicht wiedereintrittsfahigen Funktionen. Die traditionellen Resolver-Schnittstellen wie res_init() und res_query() verwenden einigen statischen (globalen) Zustand, der in der Struktur _res gespeichert ist, womit die Funktionen nicht Thread-sicher werden. BIND 8.2 fuhrte eine Gruppe von neuen Schnittstellen res_ninit(), res_nquery() und so weiter ein, die res_state als erstes Argument ubernehmen, so dass Sie pro Thread einen Resolver-Zustand verwenden konnen. Die Funktionen res_ninit() und res_init() lesen die Konfigurationsdateien (siehe resolv.conf(5)), um den vorgegebenen Domainnamen 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 uberschrieben werden. res_ninit() oder res_init() werden normalerweise durch den ersten Aufruf von einer der anderen Funktionen ausgefuhrt. Jeder Aufruf an res_ninit() benotigt einen entsprechenden Aufruf an res_nclose(), um den durch res_ninit() und nachfolgende Aufrufe von res_nquery() reservierten Speicher freizugeben. Die Funktionen res_nquery() und res_query() fragen den Nameserver nach dem vollstandigen Domain-Namen name des spezifizierten Typs type und der Klasse class. Die Antwort verbleibt im Puffer answer der Lange anslen, der vom Aufrufenden bereitgestellt wurde. Die Funktionen res_nsearch() und res_search() stellen eine Anfrage und wartet wie res_nquery() und res_query() auf die Antwort, implementieren jedoch zusatzlich die Vorgabe- und Such-Regeln, die durch RES_DEFNAMES und RES_DNSRCH gesteuert werden (siehe im Folgenden die Beschreibung der _res-Optionen). Die Funktionen res_nquerydomain() und res_querydomain() stellen mittels res_nquery()/res_query() eine Anfrage auf die Verkettung von name und domain. Die folgenden Funktionen sind Routinen tieferer Ebene, die von res_nquery()/res_query() benutzt werden. Die Funktionen res_nmkquery() und res_mkquery() konstruieren eine Anfragenachricht fur den Domain-Namen dname in buf der Lange buflen. Der Anfragetyp op ist einer der folgenden (typischerweise QUERY): QUERY Standardanfrage IQUERY Inverse Anfrage. Diese Option wurde in Glibc 2.26 entfernt, da sie schon seit sehr langer Zeit nicht mehr von DNS-Servern unterstutzt wurde. NS_NOTIFY_OP Sekundare uber Anderungen an der SOA (Start der Authoritat) benachrichtigen. newrr wird derzeit nicht verwandt. Die Funktionen res_nsend() und res_send() senden eine vorformatierte Anfrage, die in msg gegeben ist und die Lange msglen hat und gibt die Antwort in answer zuruck, die die Lange anslen hat. Sie rufen res_ninit()/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 Lange 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 Grosse 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 in einer Struktur __res_state (entweder als Argument statep ubergeben oder im Falle der alteren, nicht wiedereintrittsfahigen Funktion als globale Variable _res) enthaltende Konfigurations- und Zustandsinformationen. Das einzige Feld in dieser Struktur, das normalerweise vom Benutzer manipuliert wird, ist das Feld options. Dieses Feld kann bitweise Oder-Verknupfungen der folgenden Optionen enthalten: RES_INIT Wahr, falls res_ninit() oder res_init() aufgerufen wurde. RES_DEBUG Gibt Debugging-Meldungen aus. Diese Option ist nur dann verfugbar, wenn glibc mit Debugging-Unterstutzung kompiliert wurde, was allerdings nicht die Vorgabe ist. RES_AAONLY (nicht implementiert; in Glibc 2.25 veraltet) Akzeptiere nur autoritative Antworten. res_send() fahrt fort, bis es eine autoritative Antwort findet oder gibt einen Fehler zuruck. Diese Option war bis Glibc 2.24 vorhanden, aber nicht implementiert; seit Glibc 2.25 ist sie veraltet und ihre Verwendung fuhrt zu einer Fehlermeldung. RES_USEVC TCP-Verbindungen statt UDP-Datagramme fur Anfragen benutzen. RES_PRIMARY (nicht implementiert; in Glibc 2.25 veraltet) Nur primare Domain-Name-Server abfragen. Diese Option war bis Glibc 2.24 vorhanden, aber nicht implementiert; seit Glibc 2.25 ist sie veraltet und ihre Verwendung fuhrt zu einer Fehlermeldung. RES_IGNTC Ignoriere Fehler bei verstummelten Antworten. Versuche es nicht erneut mit TCP. RES_RECURSE Setze das Rekursionswunsch-Bit in Anfragen. Rekursion wird von dem Domainnameserver ausgefuhrt, nicht von res_send(). [Standardmassig eingeschaltet] RES_DEFNAMES Falls gesetzt, fugt res_search() den Vorgabedomainnamen an Einzelkomponentennamen an, d.h. an solchen, die keinen Punkt enthalten. [Standardmassig eingeschaltet] RES_STAYOPEN Benutzt mit RES_USEVC, um die TCP-Verbindung zwischen Anfragen geoffnet zu halten. RES_DNSRCH Falls gesetzt, sucht res_search() nach Hostnamen in der aktuellen und in ubergeordneten Domains. Diese Option wird von gethostbyname(3) benutzt. [Eingeschaltet durch Vorgabe.] RES_INSECURE1 Akzeptiert eine Antwort von einem falschen Server. Dies kann zur Erkennung moglicher Sicherheitsrisiken verwandt werden. Sie mussen dafur aber Glibc mit aktivierter Fehlersuche ubersetzen und die (nur zur Fehlersuche gedachte) Option RES_DEBUG verwenden. RES_INSECURE2 Akzeptiert eine Antwort, die eine falsche Anfrage enthalt. Dies kann zur Erkennung moglicher Sicherheitsrisiken verwandt werden. Sie mussen dafur aber Glibc mit aktivierter Fehlersuche ubersetzen und die (nur zur Fehlersuche gedachte) Option RES_DEBUG verwenden. RES_NOALIASES Deaktiviert die Verwendung der Umgebungsvariablen HOSTALIASES. RES_USE_INET6 Versucht innerhalb der Funktion gethostbyname(3) zuerst eine AAAA-Anfrage vor einer A-Anfrage und bildet IPv4-Antworten in eine IPv6 >>getunnelte Form<< ab, falls keine AAAA-Datensatze aber eine A-Datensatzgruppe existiert. Seit Glibc 2.25 ist diese Option veraltet und ihre Verwendung fuhrt zu einer Warnung. Anwendungen sollten getaddrinfo(3) statt gethostbyname(3) verwenden. RES_ROTATE Fuhrt zur Ringauswahl der Name-Server aus den aufgefuhrten. Damit wird die Abfragelast unter allen Servern verteilt, statt dass alle Clients immer zuerst den zuerst aufgefuhrten Server ausprobieren. RES_NOCHECKNAME (nicht implementiert; in Glibc 2.25 veraltet) Deaktiviert die moderne Prufung von BIND der eingehenden Rechner- und Mailnamen auf ungultige Zeichen wie Unterstrich (_), Zeichen ausserhalb von ASCII oder Steuerzeichen. Diese Option war bis Glibc 2.24 vorhanden, aber nicht implementiert; seit Glibc 2.25 ist sie veraltet und ihre Verwendung fuhrt zu einer Fehlermeldung. RES_KEEPTSIG (nicht implementiert; in Glibc 2.25 veraltet) TSIG-Datensatze nicht entfernen. Diese Option war bis Glibc 2.24 vorhanden, aber nicht implementiert; seit Glibc 2.25 ist sie veraltet und ihre Verwendung fuhrt zu einer Fehlermeldung. RES_BLAST (nicht implementiert; in Glibc 2.25 veraltet) Sendet jede Anfrage simultan und rekursiv an alle Server. Diese Option war bis Glibc 2.24 vorhanden, aber nicht implementiert; seit Glibc 2.25 ist sie veraltet und ihre Verwendung fuhrt zu einer Fehlermeldung. RES_USEBSTRING (Glibc 2.3.4 bis 2.24) Erzeugt IPv6-Ruckwartssuchen mit dem in RFC 2673 beschriebenen Bitlabel-Format. Falls diese Option nicht gesetzt ist (was die Vorgabe ist), wird das Nibble-Format verwendet. Diese Option wurde in Glibc 2.25 entfernt, da sie eine nicht abwartskompatible DNS-Erweiterung benotigt, die im Internet niemals zur Verfugung stand. RES_NOIP6DOTINT (Glibc 2.24 und altere) Verwendet die Zone ip6.arpa statt ip6.int in inversen IPv6-Ermittlungen. Dies wird seit Glibc 2.3.4 missbilligt. Diese Option ist bis einschliesslich Glibc 2.24, in denen sie standardmassig aktiviert ist, enthalten. In Glibc 2.25 wurde diese Option entfernt. RES_USE_EDNS0 (seit Glibc 2.6) Aktiviert die Unterstutzung fur in RFC 2671 beschriebene DNS-Erweiterungen (EDNS0). RES_SNGLKUP (seit Glibc 2.10) Standardmassig fuhrt Glibc IPv4- und IPv6-Ermittlungen seit Glibc 2.9 parallel durch. Einige DNS-Servergerate konnen diese Anfragen nicht korrekt handhaben und fuhren zu Zeituberschreitungen bei den Anfragen. Diese Option deaktiviert das Verhalten und lasst Glibc die IPv6- und IPv4-Anfragen sequenziell durchfuhren (allerdings verlangsamt sich der Auflosungsprozess dadurch etwas). RES_SNGLKUPREOP Wenn die Option RES_SNGLKUP aktiviert ist, wird fur jede Anfrage ein neuer Socket geoffnet. RES_USE_DNSSEC DNSSEC mit Bit OK im OPT-Datensatz verwenden. Diese Option impliziert RES_USE_EDNS0. RES_NOTLDQUERY Nicht qualifizierte Namen nicht als Domain oberster Ebene (TLD) nachschlagen. RES_DEFAULT Standardoption, impliziert: RES_RECURSE, RES_DEFNAMES, RES_DNSRCH und RES_NOIP6DOTINT. RUCKGABEWERT Die Funktionen res_ninit() und res_init() geben 0 bei Erfolg zuruck oder -1, falls ein Fehler auftritt. Die Funktionen res_nquery(), res_query(), res_nsearch(), res_search(), res_nquerydomain(), res_querydomain(), res_nmkquery(), res_mkquery(), res_nsend() und res_send() geben die Lange der Antwort zuruck oder -1, falls ein Fehler auftritt. Die Funktionen dn_comp() und dn_expand() geben die Lange des komprimierten Namens zuruck oder -1, falls ein Fehler auftritt. Falls mit einem Fehler von res_nquery(), res_query(), res_nsearch(), res_search(), res_nquerydomain() oder res_querydomain() zuruckgekehrt wird, kann die globale Variable h_errno (siehe gethostbyname(3)) zur Bestimmung der Fehlerursache herangezogen werden. DATEIEN /etc/resolv.conf Konfigurationsdatei des Resolvers (Namensaufloser) /etc/host.conf Konfigurationsdatei des Resolvers (Namensaufloser) ATTRIBUTE Siehe attributes(7) fur eine Erlauterung der in diesem Abschnitt verwandten Ausdrucke. +-------------------------+-------------------------+------------------+ |Schnittstelle | Attribut | Wert | +-------------------------+-------------------------+------------------+ |res_ninit(), | Multithread-Fahigkeit | MT-Sicher locale | |res_nclose(), | | | |res_nquery(), | | | |res_nsearch(), | | | |res_nquerydomain(), | | | |res_nsend() | | | +-------------------------+-------------------------+------------------+ |res_nmkquery(), | Multithread-Fahigkeit | MT-Sicher | |dn_comp(), dn_expand() | | | +-------------------------+-------------------------+------------------+ STANDARDS Keine. GESCHICHTE 4.3BSD. SIEHE AUCH gethostbyname(3), resolv.conf(5), resolver(5), hostname(7), named(8) Die Quelldatei der GNU-C-Bibliothek resolv/README. UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer , Dr. Tobias Quathamer , Helge Kreutzmann und Mario Blattermann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 resolver(3)