resolver, res_init, res_query, res_search, res_querydomain, res_mkquery, res_send, dn_comp, dn_expand - Routines de résolution de noms.
Ces fonctions interrogent, et interprètent les réponses de serveurs de
noms Internet.
La fonction
res_init() lit les fichiers de configuration (voir
resolv+(8)) pour obtenir le nom de domaine par défaut, l'ordre de recherche
et l'adresse du (des) serveur(s) de noms.
Si aucun serveur n'est donné, on essaye de contacter l'hôte local.
Si aucun domaine n'est donné, on utilise celui associé à l'hôte local.
Ceci peut être surchargé par la variable d'environnement LOCALDOMAIN.
res_init() est normalement exécutée lors du premier appel à l'une des
autres fonctions.
La fonction
res_query() interroge le serveur de noms pour le
nom de domaine pleinement qualifié
name du
type spécifié,
et de la
classe donnée. La réponse est placée dans le buffer
answer de longueur
anslen qui doit être fourni par l'appelant.
La fonction
res_search() interroge un serveur, et attend la réponse,
comme
res_query(), mais implémente de 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() interroge le serveur en appelant
res_query() avec la concaténation de
name et
domain.
Les fonctions suivantes sont des routines bas-niveau utilisées par
res_query().
La fonction
res_mkquery() construit une requête dans
buf
de longueur
buflen concernant le nom de domaine
dname.
Le type
op de requête est généralement QUERY, mais on peut également
utiliser l'un des types définis dans
<arpa/nameser.h>.
newrr ne sert à rien actuellemennt.
La fonction
res_send() envoie une requête préformatée, située dans
msg de longueur
msglen et renvoie la réponse dans
answer
qui est de longueur
anslen. Elle appellera
res_init(), si ça
n'a pas encore été fait.
La fonction
dn_comp() compresse le nom de domaine
exp_dn
et le stocke dans le buffer
comp_dn de longueur
length.
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é
comp_dn en un nom de domaine complet, qui est ensuite placé dans le buffer
exp_dn de taille
length. 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,
définie dans
<resolv.h>.
Le seul champ habituellement manipulé par l'utilisateur est
_res.options.
Il contient un
OU binaire entre les options suivantes :
- RES_INIT
-
Vrai si res_init() a été appelé.
- RES_DEBUG
-
Afficher les messages de débugging.
- RES_AAONLY
-
N'accepter que les réponses des serveurs autoritatifs ([NDT] "autoritatif" est
un barbarisme, voir "L'administration réseau sous Linux" chapitre 2.6.4
pour une justification de son emploi) res_send() continue jusqu'à trouver
un serveur autoritatif, ou renvoie une erreur. Pas encore implémenté.
- RES_USEVC
-
Utiliser des connexions TCP pour les interrogations plutôt que des datagrammes
UDP.
- RES_PRIMARY
-
N'interroger que le serveur de domaines primaire.
- RES_IGNTC
-
Ignorer les erreurs de troncature. Ne pas ré-essayer avec TCP. Pas encore
implémenté.
- RES_RECURSE
-
Fixer dans les requêtes le bit de récursion. La récursion est prise en
charge par le serveur de nom du domaine, et pas par res_send().
[Active par défaut].
- RES_DEFNAMES
-
res_search() ajoutera le nom de domaine par défaut aux noms
simples, par exemple ceux ne contenant pas de point.
[Active par defaut].
- RES_STAYOPEN
-
Utilisée avec RES_USEVC pour garder ouverte une connexion TCP entre les
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).
[Active par défaut].
Christophe Blaess, 1996-2003.