RESOLVER(3) Manuel du programmeur Linux RESOLVER(3)
NOM
resolver, res_init, res_query, res_search, res_querydo
main, res_mkquery, res_send, dn_comp, dn_expand - Routines
de résolution de noms.
SYNOPSIS
#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>
extern struct state _res;
int res_init (void);
int res_query (const char *dname, int classe, int type,
unsigned char *answer, int anslen);
int res_search (const char *dname, int classe, int type,
unsigned char *answer, int anslen);
int res_querydomain (const char *name, const char *domain,
int classe, int type, unsigned char *answer, int anslen);
int res_mkquery (int op, const char *dname, int classe, int t char *data, int datalen, struct rrec *newrr, char *buf,
int buflen);
int res_send (const char *msg, int msglen, char *answer,
int anslen);
int dn_comp (unsigned char *exp_dn, unsigned char *comp_dn,
int length, unsigned char **dnptrs, unsigned char *exp_dn,
unsigned char **lastdnptr);
int dn_expand (unsigned char *msg, unsigned char *eomorig,
unsigned char *comp_dn, unsigned char *exp_dn, int length);
DESCRIPTION
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 LOCALDO
MAIN. 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
BSD 6 Novembre 1996 1
RESOLVER(3) Manuel du programmeur Linux RESOLVER(3)
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 com
pressé 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 configu
ration globale et des informations d'etat 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é.
BSD 6 Novembre 1996 2
RESOLVER(3) Manuel du programmeur Linux RESOLVER(3)
RES_DEBUG
Afficher les messages de débugging.
RES_AAONLY
N'accepter que les réponses des serveurs autoritat
ifs ([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].
VALEUR RENVOYÉE
La fonction res_init() renvoie 0 si elle réussit, ou -1 si
une erreur se produit.
Les fonctions res_query(), res_search(), res_querydo
main(), res_mkquery() 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.
BSD 6 Novembre 1996 3
RESOLVER(3) Manuel du programmeur Linux RESOLVER(3)
FICHIERS
/etc/resolv.conf Configuration de la résolution de noms.
/etc/host.conf Configuration de la résolution de noms.
CONFORMITÉ
BSD 4.3
VOIR AUSSI
gethostbyname(3), hostname(7), named(8), resolv+(8)
TRADUCTION
Christophe Blaess, 1997.
BSD 6 Novembre 1996 4