Являются ли ключевые слова в resolv.conf чувствительными к регистру?

Оглядываясь, я узнал о правильном форматировании /etc/resolv.conf :

  • Доступно прокручивание пробелов
  • Продвинутое пробелы НЕ допускается
  • Записи DNS нечувствительны к регистру, хотя в приложениях могут возникнуть странные проблемы,

Тем не менее, я не могу найти нигде, являются ли ключевые слова resolv.conf нечувствительными к регистру или чувствительными к регистру. Обычно они выглядят как строчные буквы, но они должны быть? Это ошибка, если я нахожу сервер, на котором они находятся в верхнем регистре?

Поисковый поиск Google открывает этот форум , где пример кода указывает, что ключевые слова являются чувствительными к регистру. Однако нет никакой ссылки на какую-либо авторитетную документацию.

/etc/resolv.conf (например, nameserver ) чувствительны к регистру?

  • Dhclient не обновляет /etc/resolv.conf
  • resolv.conf - файловая система только для чтения
  • Как заставить resolv.conf работать старым образом в современных дистрибутивах Linux?
  • Как поддерживается resolv.conf, когда есть две сетевые карты?
  • Сохранение изменений в файле resolv.conf при перезагрузке с помощью resolvconf
  • Правильная настройка суффикса DNS Ubuntu 17.04?
  • Как изменить порядок /etc/resolv.conf во время загрузки
  • Невозможно переименовать файл resolv.conf как root
  • 2 Solutions collect form web for “Являются ли ключевые слова в resolv.conf чувствительными к регистру?”

    Они, безусловно, чувствительны к регистру в библиотеках распознавателей glibc. Обратите внимание на использование strncmp (с учетом регистра), а не strncasecmp (без strncasecmp регистра) в функции MATCH в glibc res_init.c .

    Этот код отвечает за чтение + разбор файла /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; 

    Кроме того, быстрый пример показывает, как поиск разбивается с NAMESERVER, а не сервером имен.

     # 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 # 

    Рассматривая исходный код для glibc , макрос, который пытается сопоставить строки, такие как domain и nameserver

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

    и строка, соответствующая ключевому слову search выглядит так:

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

    strncmp() чувствителен к регистру, поэтому строка будет соответствовать только search в нижнем регистре (за которым следует пробел или вкладка). То же самое верно для других ключевых слов.

    В синтаксическом коде игнорируются не совпадающие строки, поэтому вы не увидите ошибки, если случайно используете SEARCH вместо search : строка будет просто проигнорирована.

    Linux и Unix - лучшая ОС в мире.