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 résolution de noms

BIBLIOTHÈQUE

Bibliothèque resolver ( libresolv, -lresolv)

SYNOPSIS

#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>
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 réponse[.long_réponse], int long_réponse);
int res_nsearch(res_state statep,
           const char *nom_dom, int classe, int type,
           unsigned char réponse[.long_réponse], int long_réponse);
int res_nquerydomain(res_state statep,
           const char *nom, const char *domaine,
           int classe, int type, unsigned char réponse[.long_réponse],
           int long_réponse);
int res_nmkquery(res_state statep,
           int op, const char *nom_dom, int classe,
           int type, const unsigned char données[.|long_données], intlong_données,
           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 réponse[.long_réponse], int long_réponse);
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);
[[obsolète]] extern struct __res_state _res;
[[obsolète]] int res_init(void);
[[obsolète]]
int res_query(const char *nom_dom, int classe, int type,
           unsigned char réponse[.long_réponse], int long_réponse);
[[obsolète]]
int res_search(const char *nom_dom, int classe, int type,
           unsigned char réponse[.long_réponse], int long_réponse);
[[obsolète]]
int res_querydomain(const char *nom, const char *domaine,
           int classe, int type, unsigned char réponse[.long_réponse],
           int long_réponse);
[[obsolète]]
int res_mkquery(int op, const char *nom_dom, int classe,
           int type, const unsigned char données[.long_données], int long_données,
           const unsigned char *newrr,
           unsigned char tampon[.long_tampon], int long_tampon);
[[obsolète]]
int res_send(const unsigned char msg[.long_msg], int long_msg,
           unsigned char réponse[.long_msg], int long_réponse);

DESCRIPTION

Note : Cette page est incomplète (diverses fonctions resolver fournies par la glibc n'y sont pas décrites) et probablement plus d'actualité.
Les fonctions ci-dessous interrogent et interprètent les réponses de serveurs de noms Internet.
L'API consiste en un jeu de fonctions réentrantes plus moderne et d'un ancien jeu de fonctions non réentrantes qui ont été supplantées. Les interfaces traditionnelles de resolver telles que res_init() et res_query utilisent des états statiques (globaux) stockés 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 état de résolution 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 défaut et l'adresse du ou des serveurs de noms. Si aucun serveur n'est donné, l'hôte local est essayé. Si aucun domaine n'est donné, celui associé à l'hôte local est utilisé. Cela peut être surchargé par la variable d'environnement LOCALDOMAIN. res_init() ou res_ninit est normalement exécutée lors du premier appel à l'une des autres fonctions. Tout appel à res_ninit() nécessite un appel correspondant à res_nclose pour libérer la mémoire allouée à res_ninit() et les appels suivants à res_nquery().
Les fonctions res_nquery() et res_query() interrogent le serveur de noms pour le nom de domaine pleinement qualifié nom du type indiqué, et de la classe donnée. La réponse est placée dans le tampon réponse de longueur long_réponse qui doit être fourni par l'appelant.
Les fonctions res_nsearch() et res_search() interrogent un serveur et attendent la réponse, comme res_nquery() et res_query(), mais implémentent en plus les règles de recherche et de valeurs par défaut contrôlées 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 concaténation de nom et domaine.
Les fonctions suivantes sont des routines bas niveau utilisées par res_nquery() et res_query().
Les fonctions res_mkquery() et res_nmkquery construisent une requête dans tampon de longueur long_tampon concernant le nom de domaine nom_dom. Le type op de requête est l'un des suivants (généralement QUERY) :
QUERY
Requête standard.
IQUERY
Requête inverse. Cette option a été supprimée dans la glibc 2.26, car elle n'est plus prise en charge par les serveurs DNS depuis très longtemps.
NS_NOTIFY_OP
Notifier au serveur secondaire le changement de SOA (Start of Authority).
newrr est actuellement inutilisé.
Les fonctions res_nsend() et res_send() envoient une requête préformatée, située dans msg de longueur long_msg et renvoient la réponse dans réponse qui est de longueur long_réponse. Elles appellent res_ninit() ou res_init(), si ça n'a pas encore été 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 précédemment compressés du message en cours. Le premier pointeur vise le début du message, et la table se termine par NULL. La limite de la table est indiquée par lastdnptr. Si dnptr est NULL, les noms de domaines ne sont pas compressés. Si lastdnptr est NULL, la liste d'étiquettes n'est pas mise à jour.
La fonction dn_expand() développe le nom de domaine compressé dom_comp en un nom de domaine complet qui est ensuite placé dans le tampon dom_exp de taille taille. Le nom compressé est contenu dans une requête ou dans un message de réponse, et msg pointe sur le début du message.
Les routines de résolution de noms utilisent une configuration globale et des informations d'état 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 réentrantes). Le seul champ de cette structure habituellement manipulé 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 été appelée.
RES_DEBUG
Afficher les messages de débogage. Cette option n'est disponible que si le débogage a été activé lors de la construction de la glibc, ce qui n'est pas le cas par défaut.
RES_AAONLY (non implémenté ; obsolète depuis la glibc 2.25)
N'accepter que les réponses des serveurs faisant autorité. res_send() continue jusqu'à trouver un serveur faisant autorité ou renvoie une erreur. Cette option était présente, mais non implémentée, dans la glibc jusqu'à la version 2.24 ; elle est obsolète depuis la glibc 2.25 et provoque un avertissement si elle est utilisée.
RES_USEVC
Utiliser des connexions TCP pour les interrogations plutôt que des datagrammes UDP.
RES_PRIMARY (non implémenté ; obsolète depuis la glibc 2.25)
Interroger uniquement le serveur primaire de noms de domaine. Cette option était présente, mais non implémentée, dans la glibc jusqu'à la version 2.24 ;mais elle est obsolète depuis la glibc 2.25 et son usage provoque un avertissement.
RES_IGNTC
Ignorer les erreurs de troncature. Ne pas réessayer avec TCP.
RES_RECURSE
Définir le bit de récursion dans les requêtes. La récursion est prise en charge par le serveur de noms du domaine et non par res_send() [activé par défaut].
RES_DEFNAMES
S'il est défini, res_search() ajoutera le nom de domaine par défaut aux noms simples, c'est-à-dire ceux ne contenant pas de point [activé par défaut].
RES_STAYOPEN
Utilisée avec RES_USEVC pour garder ouverte une connexion TCP entre des interrogations successives.
RES_DNSRCH
res_search() recherchera les noms d'hôtes dans le domaine courant et dans les domaines parents. Cette option est utilisée par gethostbyname(3) [activé par défaut].
RES_INSECURE1
Accepter une réponse d'un mauvais serveur. Cela peut être utilisé pour détecter de potentiels risques de sécurité, mais vous devez compiler la glibc avec le débogage activé et utiliser l'option RES_DEBUG (aux fins de débogage uniquement).
RES_INSECURE2
Accepter les réponses contenant une mauvaise requête. Cela peut-être utilisé pour détecter des failles de sécurité, mais vous devez compiler glibc avec le débogage activé et utiliser l'option RES_DEBUG (aux fins de débogage uniquement).
RES_NOALIASES
Désactiver l'utilisation de la variable d'environnement HOSTALIASES.
RES_USE_INET6
Essayer une requête AAAA avant une requête A dans la fonction gethostbyname(3) et mapper les réponses IPv4 dans la « forme tunnellisée » de IPv6 si aucun enregistrement AAAA n'est trouvé alors qu'un enregistrement A existe. Cette option est obsolète depuis la glibc 2.25 et son utilisation provoque un avertissement ; les applications doivent utiliser getaddrinfo(3) à la place de gesthostbyname(3).
RES_ROTATE
Provoquer une sélection en tourniquet (« round-robin ») des serveurs de noms parmi ceux qui sont listés. Cela a pour effet de diffuser la requête vers tous les serveurs listés et d'éviter ainsi que les clients essaient chaque fois le premier serveur listé.
RES_NOCHECKNAME (non implémenté ; obsolète depuis la glibc 2.25)
Désactiver la vérification BIND moderne des noms d'hôtes et de courriers entrants pour les caractères incorrects comme le caractère souligné « _ », les caractères non ASCII ou les caractères de contrôle. Cette option était présente jusqu'à la glibc 2.24, mais est obsolète depuis la glibc 2.25 et son usage provoque un avertissement.
RES_KEEPTSIG (non implémenté ; obsolète dans la glibc 2.25)
Ne pas dépouiller les enregistrements TSIG. Cette option était présente, mais non implémentée jusqu'à la glibc 2.24 ; depuis glibc 2.25 cette option est obsolète et son utilisation provoque un avertissement.
RES_BLAST (non implémenté ; obsolète depuis la glibc 2.25)
Envoyer chaque requête simultanément et récursivement à tous les serveurs. Cette option était présente, mais non implémentée dans la glibc jusqu'à sa version 2.24 ; depuis la glibc 2.25 cette option est obsolète et son utilisation provoque un avertissement.
RES_USEBSTRING (de la glibc 2.3.4 à la glibc 2.24)
Effectuer des recherches inversées sur IPv6 en utilisant le format bit-label décrit dans la RFC 2673 ; si cette option n'est pas présente (ce qui est le cas par défaut), alors le format nibble est utilisé. Cette option a été supprimée dans la glibc 2.25, car elle faisait appel à une extension DNS non rétrocompatible qui n'était jamais employée sur Internet.
RES_NOIP6DOTINT (glibc 2.24 et précédentes)
Utiliser la zone ip6.arpa dans une recherche inversée IPv6 au lieu de ip6.int qui est obsolète depuis la glibc 2.3.4. Cette option est présente dans la glibc jusqu'à la glibc 2.24 incluse, où elle est activée par défaut. Cette option a été supprimée dans la glibc 2.25.
RES_USE_EDNS0 (depuis la glibc 2.6)
Activer la prise en charge des extensions DNS (EDNS0) décrites dans la RFC 2671.
RES_SNGLKUP (depuis la glibc 2.10)
Par défaut, la glibc réalise des résolutions IPv4 et IPv6 en parallèle depuis la glibc 2.9. Certains serveurs d'application DNS ne peuvent pas traiter correctement ces demandes et font expirer les requêtes. Cette option désactive ce comportement et force la glibc à réaliser les requêtes IPv4 et IPv6 de façon séquentielle (au prix d'un certain ralentissement du processus de résolution).
RES_SNGLKUPREOP
Ouvrir un nouveau socket à chaque requête quand l'option RES_SNGLKUP est activée.
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 qualifié comme domaine de premier niveau (top-level domain (TLD)).
RES_DEFAULT
Option par défaut qui implique : RES_RECURSE, RES_DEFNAMES, RES_DNSRCH et RES_NOIP6DOTINT.

VALEUR RENVOYÉE

Les fonctions res_ninit() et res_init() renvoient 0 si elles réussissent 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 réponse ou -1 si une erreur se produit.
Les fonctions dn_comp() et dn_expand() renvoient la longueur du nom compressé ou -1 si une erreur se produit.
Dans le cas d'une erreur renvoyée par res_nquery(), res_query(), res_nsearch(), res_search(), res_nquerydomain() ou res_querydomain(), la variable globale h_erno (voir gethostbyname(3)) peut être consultée pour déterminer la cause de l'erreur.

FICHIERS

/etc/resolv.conf
fichier de configuration de resolver (résolution de noms)
/etc/host.conf
fichier de configuration de resolver (résolution de noms)

ATTRIBUTS

Pour une explication des termes utilisés dans cette section, consulter attributes(7).
Interface Attribut Valeur
res_ninit(), res_nclose(), res_nquery(), res_nsearch(), res_nquerydomain(), res_nsend() Sécurité des threads MT-Safe locale
res_nmkquery(), dn_comp(), dn_expand() Sécurité des threads MT-Safe
 

STANDARDS

4.3BSD.

VOIR AUSSI

gethostbyname(3), resolv.conf(5), resolver(5), hostname(7), named(8)
Le fichier source resolv/README de la bibliothèque GNU C.

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <[email protected]>, Thierry Vignaud <[email protected]>, François Micaux, Alain Portal <[email protected]>, Jean-Philippe Guérard <[email protected]>, Jean-Luc Coulon (f5ibh) <[email protected]>, Julien Cristau <[email protected]>, Thomas Huriaux <[email protected]>, Nicolas François <[email protected]>, Florentin Duneau <[email protected]>, Simon Paillard <[email protected]>, Denis Barbier <[email protected]>, David Prévot <[email protected]> et bubu <[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à [email protected]

Recommended readings

Pages related to resolver you should read also: