resolver(3) Library Functions Manual resolver(3) NOM 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 - Routines de resolution de noms BIBLIOTHEQUE Bibliotheque resolver (libresolv, -lresolv) SYNOPSIS #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 *nom_dom, int classe, int type, unsigned char reponse[.long_reponse], int long_reponse); int res_nsearch(res_state statep, const char *nom_dom, int classe, int type, unsigned char reponse[.long_reponse], int long_reponse); int res_nquerydomain(res_state statep, const char *nom, const char *domaine, int classe, int type, unsigned char reponse[.long_reponse], int long_reponse); int res_nmkquery(res_state statep, int op, const char *nom_dom, int classe, int type, const unsigned char donnees[.|long_donnees], intlong_donnees, const unsigned char *newrr, unsigned char tampon[.long_tampon], int long_tampon, int res_nsend(res_state statep, const unsigned char msg[.long_msg], int long_msg, unsigned char reponse[.long_reponse], int long_reponse); int dn_comp(const char *dom_exp, unsigned char dom_comp[.taille], int taille, unsigned char **dnptrs, unsigned char **lastdnptr); int dn_expand(const unsigned char *msg, const unsigned char *eomorig, const unsigned char *dom_comp, char dom_exp[.taille], int taille); [[obsolete]] extern struct __res_state _res; [[obsolete]] int res_init(void); [[obsolete]] int res_query(const char *nom_dom, int classe, int type, unsigned char reponse[.long_reponse], int long_reponse); [[obsolete]] int res_search(const char *nom_dom, int classe, int type, unsigned char reponse[.long_reponse], int long_reponse); [[obsolete]] int res_querydomain(const char *nom, const char *domaine, int classe, int type, unsigned char reponse[.long_reponse], int long_reponse); [[obsolete]] int res_mkquery(int op, const char *nom_dom, int classe, int type, const unsigned char donnees[.long_donnees], int long_donnees, const unsigned char *newrr, unsigned char tampon[.long_tampon], int long_tampon); [[obsolete]] int res_send(const unsigned char msg[.long_msg], int long_msg, unsigned char reponse[.long_msg], int long_reponse); DESCRIPTION Note : Cette page est incomplete (diverses fonctions resolver fournies par la glibc n'y sont pas decrites) et probablement plus d'actualite. Les fonctions ci-dessous interrogent et interpretent les reponses de serveurs de noms Internet. L'API consiste en un jeu de fonctions reentrantes plus moderne et d'un ancien jeu de fonctions non reentrantes qui ont ete supplantees. Les interfaces traditionnelles de resolver telles que res_init() et res_query utilisent des etats statiques (globaux) stockes dans la structure _res, rendant ces fonctions << non-thread-safe >>. BIND 8.2 introduit un ensemble de nouvelles interfaces res_ninit(), res_nquery, et ainsi de suite, qui prennent un res_state comme premier argument, afin de pouvoir utiliser un etat de resolution par thread. Les fonctions res_init() et res_init lisent les fichiers de configuration (consultez resolv.conf(5)) pour obtenir le nom de domaine par defaut et l'adresse du ou des serveurs de noms. Si aucun serveur n'est donne, l'hote local est essaye. Si aucun domaine n'est donne, celui associe a l'hote local est utilise. Cela peut etre surcharge par la variable d'environnement LOCALDOMAIN. res_init() ou res_ninit est normalement executee lors du premier appel a l'une des autres fonctions. Tout appel a res_ninit() necessite un appel correspondant a res_nclose pour liberer la memoire allouee a res_ninit() et les appels suivants a res_nquery(). Les fonctions res_nquery() et res_query() interrogent le serveur de noms pour le nom de domaine pleinement qualifie nom du type indique, et de la classe donnee. La reponse est placee dans le tampon reponse de longueur long_reponse qui doit etre fourni par l'appelant. Les fonctions res_nsearch() et res_search() interrogent un serveur et attendent la reponse, comme res_nquery() et res_query(), mais implementent en plus les regles de recherche et de valeurs par defaut controlees par RES_DEFNAMES et RES_DNSRCH (voir les options de _res plus bas). La fonction res_querydomain() ou res_nquerydomain interroge le serveur en appelant res_nquery() ou res_query() avec la concatenation de nom et domaine. Les fonctions suivantes sont des routines bas niveau utilisees par res_nquery() et res_query(). Les fonctions res_mkquery() et res_nmkquery construisent une requete dans tampon de longueur long_tampon concernant le nom de domaine nom_dom. Le type op de requete est l'un des suivants (generalement QUERY) : QUERY Requete standard. IQUERY Requete inverse. Cette option a ete supprimee dans la glibc 2.26, car elle n'est plus prise en charge par les serveurs DNS depuis tres longtemps. NS_NOTIFY_OP Notifier au serveur secondaire le changement de SOA (Start of Authority). newrr est actuellement inutilise. Les fonctions res_nsend() et res_send() envoient une requete preformatee, situee dans msg de longueur long_msg et renvoient la reponse dans reponse qui est de longueur long_reponse. Elles appellent res_ninit() ou res_init(), si ca n'a pas encore ete fait. La fonction dn_comp() compresse le nom de domaine dom_exp et le stocke dans le tampon dom_comp de longueur taille. La compression utilise une table de pointeurs dnptrs vers les noms precedemment compresses du message en cours. Le premier pointeur vise le debut du message, et la table se termine par NULL. La limite de la table est indiquee par lastdnptr. Si dnptr est NULL, les noms de domaines ne sont pas compresses. Si lastdnptr est NULL, la liste d'etiquettes n'est pas mise a jour. La fonction dn_expand() developpe le nom de domaine compresse dom_comp en un nom de domaine complet qui est ensuite place dans le tampon dom_exp de taille taille. Le nom compresse est contenu dans une requete ou dans un message de reponse, et msg pointe sur le debut du message. Les routines de resolution de noms utilisent une configuration globale et des informations d'etat contenues dans la structure _res_state (soit transmis en tant qu'argument statep, soit dans la variable globale _res, dans le cas des anciennes fonctions non reentrantes). Le seul champ de cette structure habituellement manipule par l'utilisateur est le champ options. Il contient un OU binaire entre les options suivantes : RES_INIT Vrai si res_init() ou res_ninit() a ete appelee. RES_DEBUG Afficher les messages de debogage. Cette option n'est disponible que si le debogage a ete active lors de la construction de la glibc, ce qui n'est pas le cas par defaut. RES_AAONLY (non implemente ; obsolete depuis la glibc 2.25) N'accepter que les reponses des serveurs faisant autorite. res_send() continue jusqu'a trouver un serveur faisant autorite ou renvoie une erreur. Cette option etait presente, mais non implementee, dans la glibc jusqu'a la version 2.24 ; elle est obsolete depuis la glibc 2.25 et provoque un avertissement si elle est utilisee. RES_USEVC Utiliser des connexions TCP pour les interrogations plutot que des datagrammes UDP. RES_PRIMARY (non implemente ; obsolete depuis la glibc 2.25) Interroger uniquement le serveur primaire de noms de domaine. Cette option etait presente, mais non implementee, dans la glibc jusqu'a la version 2.24 ;mais elle est obsolete depuis la glibc 2.25 et son usage provoque un avertissement. RES_IGNTC Ignorer les erreurs de troncature. Ne pas reessayer avec TCP. RES_RECURSE Definir le bit de recursion dans les requetes. La recursion est prise en charge par le serveur de noms du domaine et non par res_send() [active par defaut]. RES_DEFNAMES S'il est defini, res_search() ajoutera le nom de domaine par defaut aux noms simples, c'est-a-dire ceux ne contenant pas de point [active par defaut]. RES_STAYOPEN Utilisee avec RES_USEVC pour garder ouverte une connexion TCP entre des interrogations successives. RES_DNSRCH res_search() recherchera les noms d'hotes dans le domaine courant et dans les domaines parents. Cette option est utilisee par gethostbyname(3) [active par defaut]. RES_INSECURE1 Accepter une reponse d'un mauvais serveur. Cela peut etre utilise pour detecter de potentiels risques de securite, mais vous devez compiler la glibc avec le debogage active et utiliser l'option RES_DEBUG (aux fins de debogage uniquement). RES_INSECURE2 Accepter les reponses contenant une mauvaise requete. Cela peut-etre utilise pour detecter des failles de securite, mais vous devez compiler glibc avec le debogage active et utiliser l'option RES_DEBUG (aux fins de debogage uniquement). RES_NOALIASES Desactiver l'utilisation de la variable d'environnement HOSTALIASES. RES_USE_INET6 Essayer une requete AAAA avant une requete A dans la fonction gethostbyname(3) et mapper les reponses IPv4 dans la << forme tunnellisee >> de IPv6 si aucun enregistrement AAAA n'est trouve alors qu'un enregistrement A existe. Cette option est obsolete depuis la glibc 2.25 et son utilisation provoque un avertissement ; les applications doivent utiliser getaddrinfo(3) a la place de gesthostbyname(3). RES_ROTATE Provoquer une selection en tourniquet (<< round-robin >>) des serveurs de noms parmi ceux qui sont listes. Cela a pour effet de diffuser la requete vers tous les serveurs listes et d'eviter ainsi que les clients essaient chaque fois le premier serveur liste. RES_NOCHECKNAME (non implemente ; obsolete depuis la glibc 2.25) Desactiver la verification BIND moderne des noms d'hotes et de courriers entrants pour les caracteres incorrects comme le caractere souligne << _ >>, les caracteres non ASCII ou les caracteres de controle. Cette option etait presente jusqu'a la glibc 2.24, mais est obsolete depuis la glibc 2.25 et son usage provoque un avertissement. RES_KEEPTSIG (non implemente ; obsolete dans la glibc 2.25) Ne pas depouiller les enregistrements TSIG. Cette option etait presente, mais non implementee jusqu'a la glibc 2.24 ; depuis glibc 2.25 cette option est obsolete et son utilisation provoque un avertissement. RES_BLAST (non implemente ; obsolete depuis la glibc 2.25) Envoyer chaque requete simultanement et recursivement a tous les serveurs. Cette option etait presente, mais non implementee dans la glibc jusqu'a sa version 2.24 ; depuis la glibc 2.25 cette option est obsolete et son utilisation provoque un avertissement. RES_USEBSTRING (de la glibc 2.3.4 a la glibc 2.24) Effectuer des recherches inversees sur IPv6 en utilisant le format bit-label decrit dans la RFC 2673 ; si cette option n'est pas presente (ce qui est le cas par defaut), alors le format nibble est utilise. Cette option a ete supprimee dans la glibc 2.25, car elle faisait appel a une extension DNS non retrocompatible qui n'etait jamais employee sur Internet. RES_NOIP6DOTINT (glibc 2.24 et precedentes) Utiliser la zone ip6.arpa dans une recherche inversee IPv6 au lieu de ip6.int qui est obsolete depuis la glibc 2.3.4. Cette option est presente dans la glibc jusqu'a la glibc 2.24 incluse, ou elle est activee par defaut. Cette option a ete supprimee dans la glibc 2.25. RES_USE_EDNS0 (depuis la glibc 2.6) Activer la prise en charge des extensions DNS (EDNS0) decrites dans la RFC 2671. RES_SNGLKUP (depuis la glibc 2.10) Par defaut, la glibc realise des resolutions IPv4 et IPv6 en parallele depuis la glibc 2.9. Certains serveurs d'application DNS ne peuvent pas traiter correctement ces demandes et font expirer les requetes. Cette option desactive ce comportement et force la glibc a realiser les requetes IPv4 et IPv6 de facon sequentielle (au prix d'un certain ralentissement du processus de resolution). RES_SNGLKUPREOP Ouvrir un nouveau socket a chaque requete quand l'option RES_SNGLKUP est activee. RES_USE_DNSSEC Utiliser DNSSEC avec un bit OK dans l'enregistrement OPT. Cette option implique RES_USE_ENDS0. RES_NOTLDQUERY Ne pas rechercher un nom non qualifie comme domaine de premier niveau (top-level domain (TLD)). RES_DEFAULT Option par defaut qui implique : RES_RECURSE, RES_DEFNAMES, RES_DNSRCH et RES_NOIP6DOTINT. VALEUR RENVOYEE Les fonctions res_ninit() et res_init() renvoient 0 si elles reussissent ou -1 si une erreur se produit. Les fonctions res_nquery(), res_query(), res_nsearch(), res_search(), res_nquerydomain(), res_querydomain(), res_nmkquery(), res_mkquery(), res_nsend() et res_send() renvoient la longueur de la reponse ou -1 si une erreur se produit. Les fonctions dn_comp() et dn_expand() renvoient la longueur du nom compresse ou -1 si une erreur se produit. Dans le cas d'une erreur renvoyee par res_nquery(), res_query(), res_nsearch(), res_search(), res_nquerydomain() ou res_querydomain(), la variable globale h_erno (voir gethostbyname(3)) peut etre consultee pour determiner la cause de l'erreur. FICHIERS /etc/resolv.conf fichier de configuration de resolver (resolution de noms) /etc/host.conf fichier de configuration de resolver (resolution de noms) ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +--------------------------+--------------------------+----------------+ |Interface | Attribut | Valeur | +--------------------------+--------------------------+----------------+ |res_ninit(), | Securite des threads | MT-Safe locale | |res_nclose(), | | | |res_nquery(), | | | |res_nsearch(), | | | |res_nquerydomain(), | | | |res_nsend() | | | +--------------------------+--------------------------+----------------+ |res_nmkquery(), | Securite des threads | MT-Safe | |dn_comp(), dn_expand() | | | +--------------------------+--------------------------+----------------+ STANDARDS None. HISTORIQUE 4.3BSD. VOIR AUSSI gethostbyname(3), resolv.conf(5), resolver(5), hostname(7), named(8) Le fichier source resolv/README de la bibliotheque GNU C. TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et bubu Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 resolver(3)