Date: Tue, 30 Jan 1996 21:31:06 -0500 From: John Capo <jc@irbs.com> To: FreeBSD-gnats-submit@freebsd.org Subject: bin/981: clnt_broadcast() is not aware of aliases Message-ID: <199601310231.VAA19105@goombay.irbs.com> Resent-Message-ID: <199601310240.SAA03737@freefall.freebsd.org>
index | next in thread | raw e-mail
>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:
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199601310231.VAA19105>
