resolver(3) | Library Functions Manual | resolver(3) |
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 resolver (libresolv, -lresolv)
#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);
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) :
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 :
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.
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 |
4.3BSD.
gethostbyname(3), resolv.conf(5), resolver(5), hostname(7), named(8)
Le fichier source resolv/README de la bibliothèque GNU C.
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 à debian-l10n-french@lists.debian.org.
5 février 2023 | Pages du manuel de Linux 6.03 |