This was suggested by deraadt@, sorry.

On Thu, Nov 08, 2018 at 08:05:13PM -0500, Bryan Steele wrote:
> 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);

Reply via email to