/etc/resolv.conf
주변을 둘러보면서 유효한 형식에 대한 다음 정보를 찾았습니다 .
- 후행 공백 허용
- 선행 공백은 허용되지 않습니다.
- DNS 레코드는 대소문자를 구분하지 않지만모든 것을 소문자로 바꾸는 응용 프로그램에서는 이상한 문제가 발생할 수 있습니다.
그러나 나는 어디에서나 찾을 수 없습니다.resolv.conf
핵심 단어대소문자를 구분하지 않거나 대소문자를 구분하지 않습니다. 모두 소문자인 것 같아요대개, 하지만 꼭 그래야만 하나요? 대문자인 서버를 발견하면 버그입니까?
구글 검색이 나오네요이 포럼 주제, 여기서 코드 예제는 키워드가 대소 문자임을 나타내는 것으로 보입니다.존재하다예민한. 그러나 신뢰할 수 있는 문서에 대한 링크는 없습니다.
/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
해당 줄이 무시되고 오류가 표시되지 않습니다.