/etc/resolv.conf
周りを見ながら、有効な形式に関する次の情報が見つかりました。
- 末尾のスペースを許可
- 先行スペースは使用できません。
- DNSレコードは大文字と小文字を区別しませんが、すべてを小文字に置き換えるアプリケーションでは、奇妙な問題が発生する可能性があります。
しかし、私はどこにも見つかりません。resolv.conf
キーワード大文字と小文字を区別しないか、大文字と小文字を区別しません。みんな小文字だと思います。通常でも、必ずしもそうなんですか?大文字のサーバーを見つけたらバグですか?
Google検索が出ます。このフォーラムトピックここで、コード例は、キーワードが大文字と小文字であることを示すようです。存在する敏感。ただし、信頼できる文書へのリンクはありません。
/etc/resolv.conf
たとえば、キーワードは大文字と小文字を区別しますnameserver
か?
答え1
もちろん、glibcパーサーライブラリでは大文字と小文字を区別します。 MATCH関数では、strncmp
(大文字と小文字の区別の比較)の代わりに(大文字と小文字の区別の比較)を使用します。strncasecmp
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
#
答え2
見ている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
ん。