Glibc
resolv.conf 中的關鍵字是否區分大小寫?
環顧四周,我發現了以下有關
/etc/resolv.conf
有效格式的資訊:
- 允許尾隨空格
- 不允許使用前導空格
- DNS 記錄不區分大小寫,但在將所有內容小寫的應用程序中可能會遇到奇怪的問題
resolv.conf
但是,無論關鍵字是不區分大小寫還是區分大小寫,我都找不到任何地方。他們似乎通常是小寫的,但他們必須是嗎?如果我發現它們是大寫的伺服器,這是否是一個錯誤?Google搜尋出現了這個論壇主題,其中的程式碼範例似乎表明關鍵字區分大小寫**。**但是,沒有任何權威文件的連結。
/etc/resolv.conf
關鍵字(如)是否nameserver
區分大小寫?
它們在 glibc 解析器庫中肯定是區分大小寫的。請注意在glibc res_init.c
strncmp
的 MATCH 函式中使用(casesensitive compare) 而不是strncasecmp
(case insensitive compare) 。這段程式碼負責讀取+解析
/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 #