These libc functions are used to map hardware MAC addresses to hostnames and vice versa. If it exists, /etc/ethers will typically contain a number of lines like so:
34:00:8a:56:10:20 superman In addition to that, there is support for using a YP (nee Yellow Pee) lookup service: "If a '+' appears alone on a line in the file, then ether_hostton() will consult the x ethers.byname YP map, and ether_ntohost() will consult the ethers.byaddr YP map." This support currently interferes with my work to reduce the pledge(2) in tcpdump(8), as the "inet" promise is required to perform these lookups.. I've come up with small a diff to remove it, but it was suggested there may be some interactions with ldap, and I'm not sure how important this functionality may be to existing YP users (I am not one). Any objections to this approach? (Missing man page removal bits) -Bryan. Index: ethers.c =================================================================== RCS file: /cvs/src/lib/libc/net/ethers.c,v retrieving revision 1.25 diff -u -p -u -r1.25 ethers.c --- lib/libc/net/ethers.c 21 Sep 2016 04:38:56 -0000 1.25 +++ lib/libc/net/ethers.c 8 Nov 2018 23:54:19 -0000 @@ -34,9 +34,6 @@ #include <string.h> #include <ctype.h> #include <limits.h> -#ifdef YP -#include <rpcsvc/ypclnt.h> -#endif #ifndef _PATH_ETHERS #define _PATH_ETHERS "/etc/ethers" @@ -99,18 +96,6 @@ ether_ntohost(char *hostname, struct eth char buf[BUFSIZ+1], *p; size_t len; struct ether_addr try; -#ifdef YP - char trybuf[sizeof("xx:xx:xx:xx:xx:xx")]; - int trylen; -#endif - -#ifdef YP - snprintf(trybuf, sizeof trybuf, "%x:%x:%x:%x:%x:%x", - e->ether_addr_octet[0], e->ether_addr_octet[1], - e->ether_addr_octet[2], e->ether_addr_octet[3], - e->ether_addr_octet[4], e->ether_addr_octet[5]); - trylen = strlen(trybuf); -#endif f = fopen(_PATH_ETHERS, "re"); if (f == NULL) @@ -123,26 +108,9 @@ ether_ntohost(char *hostname, struct eth (void)memcpy(buf, p, len); buf[len] = '\n'; /* code assumes newlines later on */ buf[len+1] = '\0'; -#ifdef YP - /* A + in the file means try YP now. */ - if (!strncmp(buf, "+\n", sizeof(buf))) { - char *ypbuf, *ypdom; - int ypbuflen; - - if (yp_get_default_domain(&ypdom)) - continue; - if (yp_match(ypdom, "ethers.byaddr", trybuf, - trylen, &ypbuf, &ypbuflen)) - continue; - if (ether_line(ypbuf, &try, hostname) == 0) { - free(ypbuf); - (void)fclose(f); - return (0); - } - free(ypbuf); + /* A + in the file meant try YP, ignore it. */ + if (!strncmp(buf, "+\n", sizeof(buf))) continue; - } -#endif if (ether_line(buf, &try, hostname) == 0 && memcmp(&try, e, sizeof(try)) == 0) { (void)fclose(f); @@ -161,9 +129,6 @@ ether_hostton(const char *hostname, stru char buf[BUFSIZ+1], *p; char try[HOST_NAME_MAX+1]; size_t len; -#ifdef YP - int hostlen = strlen(hostname); -#endif f = fopen(_PATH_ETHERS, "re"); if (f==NULL) @@ -177,26 +142,9 @@ ether_hostton(const char *hostname, stru memcpy(buf, p, len); buf[len] = '\n'; /* code assumes newlines later on */ buf[len+1] = '\0'; -#ifdef YP - /* A + in the file means try YP now. */ - if (!strncmp(buf, "+\n", sizeof(buf))) { - char *ypbuf, *ypdom; - int ypbuflen; - - if (yp_get_default_domain(&ypdom)) - continue; - if (yp_match(ypdom, "ethers.byname", hostname, hostlen, - &ypbuf, &ypbuflen)) - continue; - if (ether_line(ypbuf, e, try) == 0) { - free(ypbuf); - (void)fclose(f); - return (0); - } - free(ypbuf); + /* A + in the file meant try YP, ignore it. */ + if (!strncmp(buf, "+\n", sizeof(buf))) continue; - } -#endif if (ether_line(buf, e, try) == 0 && strcmp(hostname, try) == 0) { (void)fclose(f); return (0);