As palavras-chave no resolv.conf são sensíveis a maiúsculas e minúsculas?

5

Olhando em volta, descobri o seguinte sobre /etc/resolv.conf formatação válida:

No entanto, não consigo encontrar em qualquer lugar se as palavras-chave resolv.conf diferenciam maiúsculas de minúsculas ou diferenciam maiúsculas de minúsculas. Eles parecem estar em minúsculas geralmente , mas eles precisam ser? É um erro se eu encontrar um servidor onde eles estão em letras maiúsculas?

Uma pesquisa no google este tópico do fórum , onde um exemplo de código parece indicar que as palavras-chave são maiúsculas e minúsculas em sensíveis. No entanto, não há link para nenhuma documentação autoritativa.

As palavras-chave /etc/resolv.conf (como nameserver ) diferenciam maiúsculas de minúsculas?

    
por Wildcard 10.11.2016 / 23:21

2 respostas

8

Eles são certamente sensíveis a maiúsculas e minúsculas nas bibliotecas do resolvedor glibc. Observe o uso de strncmp (comparação de maiúsculas e minúsculas) em vez de strncasecmp (comparação de maiúsculas e minúsculas) na função MATCH dentro de glibc res_init.c .

Este código é responsável por ler + analisar o arquivo /etc/resolv.conf .

#define MATCH(line, name) \
    (!strncmp(line, name, sizeof(name) - 1) && \
    (line[sizeof(name) - 1] == ' ' || \
     line[sizeof(name) - 1] == '\t'))

    if ((fp = fopen(_PATH_RESCONF, "rce")) != NULL) {
        /* No threads use this stream.  */
        __fsetlocking (fp, FSETLOCKING_BYCALLER);
        /* read the config file */
        while (fgets_unlocked(buf, sizeof(buf), fp) != NULL) {
        /* skip comments */
        if (*buf == ';' || *buf == '#')
            continue;
        /* read default domain name */
        if (MATCH(buf, "domain")) {
            if (haveenv)    /* skip if have from environ */
                continue;
            cp = buf + sizeof("domain") - 1;

Além disso, um exemplo rápido mostra como a pesquisa é interrompida com NAMESERVER em vez de com o servidor de nomes.

# cat /etc/resolv.conf
options timeout:2 attempts:5
; generated by /sbin/dhclient-script
search eu-west-1.compute.internal
nameserver 172.31.0.2
# getent hosts www.google.com
2a00:1450:400b:802::2004 www.google.com
# sed -i 's/nameserver/NAMESERVER/' /etc/resolv.conf
# getent hosts www.google.com
#
    
por 10.11.2016 / 23:36
4

Analisando o código-fonte da glibc , a macro que tenta corresponder strings como domain e nameserver é -

#define MATCH(line, name) \
  (!strncmp(line, name, sizeof(name) - 1) && \
  (line[sizeof(name) - 1] == ' ' || \
   line[sizeof(name) - 1] == '\t'))

e a linha que corresponde à palavra-chave search parece -

if (MATCH(buf, "search")) {

strncmp() faz distinção entre maiúsculas e minúsculas, de modo que a linha corresponderá apenas a um search minúsculo (seguido por um espaço ou uma tabulação). O mesmo vale para as outras palavras-chave.

O código de análise ignora as linhas não correspondentes, de modo que você não verá um erro se usar acidentalmente SEARCH em vez de search : a linha será simplesmente ignorada.

    
por 10.11.2016 / 23:40