Re: Using /etc/hosts, not dns
- Reply: Steve O'Hara-Smith : "Re: Using /etc/hosts, not dns"
- In reply to: Steven Friedrich : "Re: Using /etc/hosts, not dns"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 05 Aug 2023 18:19:45 UTC
> Correct, Linux still works. After all these years and my extensive Unix > experience, I am abandoning FreeBSD. You have completely abandoned > common sense. I thought this might be an interesting bit of information to add to the thread. On OpenBSD, /etc/resolv.conf supports a 'lookup' keyword that FreeBSD has not implemented (AFAICT). From the man page: lookup This keyword is used by the library routines gethostbyname(3) and gethostbyaddr(3). It specifies which databases should be searched, and the order to do so. The legal space-separated values are: bind Query a domain name server. file Search for entries in /etc/hosts. If the lookup keyword is not used in the system's resolv.conf file then the assumed order is bind file. Furthermore, if the system's resolv.conf file does not exist, then the only database used is file. But the 'host' command is the same as FreeBSD, and does not consult /etc/hosts. It should still be possible to write a small C program that uses gethostbyname(3), and that should respect the lookup order. As long as resolv.conf has 'lookup file bind' it would consult /etc/hosts first and then consult name servers second. I wrote a proof of concept (I'm trying to learn C, so this was a good task for me): #include <netdb.h> #include <stdio.h> #include <sys/socket.h> #define IPv4_FORMAT "%hhu.%hhu.%hhu.%hhu" int main(void) { struct hostent *ent; ent = gethostbyname2("read.amazon.com", AF_INET); if (h_errno == NETDB_SUCCESS) { char *addr = ent->h_addr_list[0]; fprintf(stdout, IPv4_FORMAT, addr[0], addr[1], addr[2], addr[3]); fprintf(stdout, "\n"); } else { fprintf(stderr, "error: %s", hstrerror(h_errno)); } return 0; } 0x1eef