Glibc

resolv.conf 中的關鍵字是否區分大小寫?

  • August 21, 2017

環顧四周,我發現了以下有關/etc/resolv.conf有效格式的資訊:

resolv.conf 但是,無論關鍵字是不區分大小寫還是區分大小寫,我都找不到任何地方。他們似乎通常是小寫的,但他們必須是嗎?如果我發現它們是大寫的伺服器,這是否是一個錯誤?

Google搜尋出現了這個論壇主題,其中的程式碼範例似乎表明關鍵字區分大小寫**。**但是,沒有任何權威文件的連結。

/etc/resolv.conf關鍵字(如)是否nameserver區分大小寫?

它們在 glibc 解析器庫中肯定是區分大小寫的。請注意在glibc res_init.cstrncmp的 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
#

引用自:https://unix.stackexchange.com/questions/322461