NOMBRE¶
res_init, res_query, res_search, res_querydomain, res_mkquery, res_send,
dn_comp, dn_expand - rutinas "resolver" (de resolución)
SINOPSIS¶
#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 class, int type,
unsigned char *answer, int anslen);
int res_search(const char *dname, int class, int type,
unsigned char *answer, int anslen);
int res_querydomain(const char *name, const char *domain,
int class, int type, unsigned char *answer, int anslen);
int res_mkquery(int op, const char *dname, int class, int type,
char *data, int datalen, struct rrec *newrr, char *buf,
int buflen);
int res_send(const char *msg, int msglen, char *answer,
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);
DESCRIPCIÓN¶
Estas funciones hacen peticiones e interpretan las respuestas de los servidores
de nombres de dominio de Internet.
La función
res_init() lee los ficheros de configuración
(ver resolv+(8)) para conseguir el nombre del dominio por defecto, orden de
búsqueda y la dirección(es) del servidor(es) de nombres. Si no
se proporciona servidor, se intenta con el host local. Si no se proporciona
dominio, se usa el asociado al host local. Este puede sobreescribirse con la
variable de entorno LOCALDOMAIN. Normalmente
res_init() es ejecutado
por la primera llamada a una de las otras funciones.
La función
res_query() pide al servidor de nombres el nombre de
dominio completamente cualificado
name de
type y
class
especificados. La respuesta se deja en el buffer
answer de longitud
anslen proporcionado por quien realiza la llamada.
La función
res_search() hace una petición y espera la
respuesta como
res_query(), pero además implementa las reglas
por defecto y las de búsqueda controladas por RES_DEFNAMES y RES_DNSRCH
(ver más abajo la descripción de las opciones de
_res).
La función
res_querydomain() hace una petición utilizando
res_query() en la concatenación de
name y
domain.
Las siguientes son funciones de un nivel más bajo utilizadas por
res_query().
La función
res_mkquery() construye un mensaje de petición
en
buf de longitud
buflen para el nombre de dominio
dname. El tipo de petición
op normalmente es QUERY, pero
puede ser cualquiera de los tipos definidos en
<arpa/nameser.h>.
newrr actualmente no se usa.
La función
res_send() envía una petición
preformateada, dada en
msg de longitud
msglen y devuelve la
respuesta en
answer que tiene longitud
anslen. Este
llamará a
res_init(), si aún no ha sido llamado.
La función
dn_comp() comprime el nombre de dominio
exp_dn y
lo guarda en el buffer
comp_dn de longitud
length. La
compresión usa una matriz de punteros
dnptrs a nombres
previamente comprimidos en el mensaje actual. El primero de los punteros
apunta al principio del mensaje y la lista termina con NULL. El límite
de la matriz está especificado por
lastdnptr. Si
dnptr es
NULL, los nombres de dominio no se comprimen. Si
lastdnptr es NULL, la
lista de etiquetas no se actualiza.
La función
dn_expand() expande el nombre de dominio comprimido
comp_dn a un nombre de dominio completo, y es puesto en el buffer
exp_dn de tamaño
length. El nombre comprimido está
contenido en una petición o mensaje de respuesta, y
msg apunta
al principio del mensaje.
Las rutinas del "resolver" usan la configuración global e
información del estado contenida en la estructura
_res, definida
en
<resolv.h>. El único campo que puede manipular
normalmente el usuario es
_res.options. Este campo puede contener un
"o (OR) lógico" bit a bit de las siguientes opciones:
- RES_INIT
- Cierto si res_init() ha sido llamado.
- RES_DEBUG
- Imprimir mensajes de depuración.
- RES_AAONLY
- Aceptar respuestas autoritativas solamente. res_send() continua
hasta que encuentra una respuesta autoritativa o devuelve un error.
[Àún no implementado].
- RES_USEVC
- Usar conexiones TCP para las peticiones, en vez de datagramas UDP.
- RES_PRIMARY
- Hacer petición solamente al servidor de nombres de dominio
primario.
- RES_IGNTC
- Ignorar errores de truncado. No reintentar con TCP. [Aún no
implementado].
- RES_RECURSE
- Poner a 1 el bit de recursión deseada en las peticiones. La
recursión es llevada a cabo por el servidor de nombres de dominio,
no por res_send(). [Activado por defecto].
- RES_DEFNAMES
- Si está puesto a 1, res_search() añadirá el
nombre de dominio por defecto a los nombres de componentes simples, p.ej.
aquellos que no contienen punto. [Activado por defecto].
- RES_STAYOPEN
- Usado con RES_USEVC para mantener la conexión TCP abierta entre
peticiones.
- RES_DNSRCH
- Si está a 1, res_search() buscará nombres de host en
el dominio actual y en los dominios "padre". Esta opción
es usada por gethostbyname(3). [Activado por defecto].
VALOR DEVUELTO¶
La función
res_init() devuelve 0 si hay éxito, o -1 si hubo
un error.
Las funciones
res_query(),
res_search(),
res_querydomain(),
res_mkquery() y
res_send() devuelven la longitud de la
respuesta, o -1 si hubo un error.
Las funciones
dn_comp() y
dn_expand() devuelven la longitud del
nombre comprimido, o -1 si hubo un error.
FICHEROS¶
/etc/resolv.conf fichero de configuración de resolver
/etc/host.conf fichero de configuración de resolver
BSD 4.3
VÉASE TAMBIÉN¶
gethostbyname(3),
hostname(7),
named(8),
resolv+(8)