resolver
Section: C Library Functions (3)
Updated: 5 février 2023
Index
Return to Main Contents
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 <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>,
David Prévot <david@tilapin.org>
et
bubu <bubub@no-log.org>
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 à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- FICHIERS
-
- ATTRIBUTS
-
- STANDARDS
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 06:45:14 GMT, May 18, 2024