From owner-freebsd-bugs Tue Jan 30 18:40:48 1996 Return-Path: owner-bugs Received: (from root@localhost) by freefall.freebsd.org (8.7.3/8.7.3) id SAA03859 for bugs-outgoing; Tue, 30 Jan 1996 18:40:48 -0800 (PST) Received: (from gnats@localhost) by freefall.freebsd.org (8.7.3/8.7.3) id SAA03737 Tue, 30 Jan 1996 18:40:25 -0800 (PST) Resent-Date: Tue, 30 Jan 1996 18:40:25 -0800 (PST) Resent-Message-Id: <199601310240.SAA03737@freefall.freebsd.org> Resent-From: gnats (GNATS Management) Resent-To: freebsd-bugs Resent-Reply-To: FreeBSD-gnats@freefall.FreeBSD.org, jc@irbs.com Received: from goombay.irbs.com (goombay.irbs.com [205.216.79.250]) by freefall.freebsd.org (8.7.3/8.7.3) with SMTP id SAA03077 for ; Tue, 30 Jan 1996 18:31:47 -0800 (PST) Received: (from jc@localhost) by goombay.irbs.com (8.6.12/8.6.6) id VAA19105; Tue, 30 Jan 1996 21:31:06 -0500 Message-Id: <199601310231.VAA19105@goombay.irbs.com> Date: Tue, 30 Jan 1996 21:31:06 -0500 From: John Capo Reply-To: jc@irbs.com To: FreeBSD-gnats-submit@freebsd.org X-Send-Pr-Version: 3.2 Subject: bin/981: clnt_broadcast() is not aware of aliases Sender: owner-bugs@freebsd.org Precedence: bulk >Number: 981 >Category: bin >Synopsis: clnt_broadcast() is not aware of aliases >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Jan 30 18:40:10 PST 1996 >Last-Modified: >Originator: John Capo >Organization: IRBS Engineering >Release: FreeBSD 2.1-STABLE i386 >Environment: -stable and probably -current. >Description: clnt_broadcast() sends a broadcast packet for each aliased address on an interface. >How-To-Repeat: Run ypbind on a system with an Ethernet if that has alias addresses. >Fix: *** lib/libc/rpc/pmap_rmt.c.orig Tue May 30 01:41:27 1995 --- lib/libc/rpc/pmap_rmt.c Tue Jan 30 20:20:55 1996 *************** *** 166,171 **** --- 166,172 ---- int sock; /* any valid socket will do */ char *buf; /* why allocxate more when we can use existing... */ { + struct in_addr addr; struct ifconf ifc; struct ifreq ifreq, *ifr; struct sockaddr_in *sin; *************** *** 196,208 **** sin = (struct sockaddr_in *)&ifr->ifr_addr; #ifdef SIOCGIFBRDADDR /* 4.3BSD */ if (ioctl(sock, SIOCGIFBRDADDR, (char *)&ifreq) < 0) { ! addrs[i++] = ! inet_makeaddr(inet_netof(sin->sin_addr), INADDR_ANY); } else { ! addrs[i++] = ((struct sockaddr_in*) &ifreq.ifr_addr)->sin_addr; } #else /* 4.2 BSD */ addrs[i++] = inet_makeaddr(inet_netof(sin->sin_addr), INADDR_ANY); --- 197,216 ---- sin = (struct sockaddr_in *)&ifr->ifr_addr; #ifdef SIOCGIFBRDADDR /* 4.3BSD */ if (ioctl(sock, SIOCGIFBRDADDR, (char *)&ifreq) < 0) { ! addr = inet_makeaddr(inet_netof(sin->sin_addr), INADDR_ANY); } else { ! addr = ((struct sockaddr_in*) &ifreq.ifr_addr)->sin_addr; } + + for (n = 0; n < i; n++) { + if (memcmp(&addrs[n], &addr, sizeof (addr)) == 0) + goto duplicate; + + } + addrs[i++] = addr; + duplicate: #else /* 4.2 BSD */ addrs[i++] = inet_makeaddr(inet_netof(sin->sin_addr), INADDR_ANY); >Audit-Trail: >Unformatted: