RESOLVER(3)

NOME
res_init, res_query, res_search, res_querydomain, res_mkquery, res_send, dn_comp, dn_expand - rotinas resolvedoras

SINÓPSE
#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 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);

DESCRIÇÃO
Estas funções fazem pesquisas e interpretam as respostas de servidores de nomes de domínio da Internet.

A função res_init() lê os arquivos de configuração (veja resolv+(8)) para obter o nome de domínio padrão, a ordem de buscas e o(s) endereço(s) do(s) servidor(es) de nome. Se nenhum servidor é dado, o 'host' local é tentado. Se nenhum domínio é dado, é usado aquele domínio associado ao 'host' local. Ele pode ser sobreposto pela variável de ambiente LOCALDOMAIN. res_init() é executado normalmente pela primeira chamada a uma das outras funções.

A função res_query() pesquisa o servidor de nome para o nome de domínio totalmente qualificado name do tipo e da classe especificada. O que for retornado é deixado no 'buffer' answer de comprimento anslen fornecido pelo chamador.

A função res_search() faz uma pesquisa e espera pela resposta como res_query(), mas além disso implementa as regras padrão e de busca controladas por RES_DEFNAMES e RES_DNSRCH (veja a descrição das opções _res abaixo).

A função res_querydomain() faz uma pesquisa usando res_query() sobre a conecatenação de nome e domínio.

As seguintes funções são rotinas de nível mais baixo, usadas por res_query().

A função res_mkquery() constrói uma mensagem de pesquisa em buf de comprimento buflen para o nome de domínio dname. O tipo de pesquisa op é geralmente QUERY, mas pode ser qualquer um dos tipos definidos em <arpa/nameser.h>. newrr não é usado correntemente.

A função res_send() envia uma pesquisa pré-formatada dada em msg de comprimento msglen e retorna a resposta em answer que tem comprimento anslen. Ela chamará a função res_init(), se ela já não tiver sido chamada.

A função dn_comp() comprime o nome de domínio exp_dn e o armazena no 'buffer' comp_dn de comprimento length. A compressão usa uma matriz de ponteiros dnptrs para nomes previamente comprimidos na mensagem corrente. O primeiro ponteiro aponta para o início da mensagem, e a lista termina com NULO. O limite da matriz é especificada por lastdnptr. Se dnptr é NULO, os nomes de domínio não são comprimidos. Se lastdnptr é NULO, a lista de títulos não é atualizada.

A função dn_expand() expande o nome de domínio comprimido comp_dn para um nome de domínio completo, que é colocado no 'buffer' exp_dn de tamanho length. O nome comprimido está contido em uma pesquisa ou mensagem de resposta, e msg aponta para o início da mensagem.

As rotinas de resolução usam configurações globais e informações de estado contidas na estrutura _res, que está definida em <resolv.h>. O único campo que normalmente é manipulado pelo usuário é _res.options. Este campo pode conter um 'OU' bit-a-bit das seguintes opções:

RES_INIT
    Verdadeiro se res_init() foi chamado.

RES_DEBUG
    Imprime mensagens de eliminação de erros.

RES_AAONLY
    Aceita somente respostas autoritativas. res_send() continua até encontrar uma resposta autoritativas ou retorna um erro. [Atualmente não implementado].

RES_USEVC
    Usa conexões TCP para pesquisas em vez de datagramas UDP.

RES_PRIMARY
    Somente servidor primário de nome de domínio de pesquisa.

RES_IGNTC
    Ignora erros de truncamento. Não tenta novamente com TCP. [Atualmente não implementado].

RES_RECURSE
    Seta o bit de recursão desejado em pesquisas. A recursão é realizada pelo servidor de nome de domínio, e não por res_send(). [Habilitado por padrão].

RES_DEFNAMES
    Se setado, res_search() acrescentará o nome de domínio padrão a nomes de componentes simples, isto é, aqueles que não contêm um ponto. [Habilitado por padrão].

RES_STAYOPEN
    Usado com RES_USEVC para manter a conexão TCP aberta entre pesquisas.

RES_DNSRCH
    Se setado, res_search() buscará nomes de 'hosts' no domínio corrente e em domínios pais. Esta opção é usada por gethostbyname(3). [Habilitado por padrão].

VALORES RETORNADOS
A função res_init() retorna 0 em caso de sucesso, ou -1 se ocorrer um erro.

As funções res_query(), res_search(), res_querydomain(), res_mkquery() e res_send() retornam o comprimento da resposta, ou -1 se ocorre um erro.

As funções dn_comp() e dn_expand() retornam o tamanho do nome compactado, ou -1 se um erro ocorre.

ARQUIVOS
/etc/resolv.conf          arquivo de configuração do resolvedor
/etc/host.conf            arquivo de configuração do resolvedor

DE ACORDO COM
BSD 4.3.

VEJA TAMBÉM
gethostbyname(3), hostname(7), named(8), resolv+(8).

TRADUZIDO POR LDP-BR em 21/08/2000.

  Tradução:
Rubens de Jesus Nogueira <darkseid99@usa.net>

  Revisão.:
André Luiz Fassone <lonely_wolf@ig.com.br>