Date: Wed, 18 Jul 2001 16:48:39 -0700 (PDT) From: Scott Hazen Mueller <scott@zorch.sf-bay.org> To: FreeBSD-gnats-submit@freebsd.org Subject: bin/29071: a little hack to rwhod Message-ID: <200107182348.f6INmd709715@zorba.sf-bay.org>
next in thread | raw e-mail | index | archive | help
>Number: 29071
>Category: bin
>Synopsis: relay patch for rwhod
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Wed Jul 18 17:00:02 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator: Scott Hazen Mueller
>Release: FreeBSD 4.3-RELEASE i386
>Organization:
>Environment:
System: FreeBSD zorba.sf-bay.org 4.3-RELEASE FreeBSD 4.3-RELEASE #0: Wed Jul 18 14:01:18 PDT 2001 scott@zorba.sf-bay.org:/export/obj/export/src/sys/ZORBA i386
>Description:
Enclosed please find a small patch to add a '-r' flag (and underlying support)
to rwhod. Enabling '-r' turns the daemon into a relay so that it repeats
broadcasts it receives on all interfaces. This allows a FreeBSD router to
relay rwho packets across multiple subnets w/o using multicast support. Only
the relay needs to run the modified rwhod and enable relaying; the leaf nodes
need no changes.
Please note that this patch writes a byte of foo into the 'wd_pad' area of the
whod structure so that it can identify packets that it has already touched and
refrain from relaying them again...
>How-To-Repeat:
First, admit to using rwho.
"Hi, my name is Scott, and I use rwho."
Second, decide you'd like machines on different nets, tunneled together over
PPP tunnels, to exchange rwhod data.
Third, find yourself unable to get multicasting and rwhod -m to work.
>Fix:
*** rwhod.c Wed Jul 18 16:32:56 2001
--- rwhod.c.relay Wed Jul 18 16:28:57 2001
***************
*** 122,127 ****
--- 122,128 ----
int multicast_mode = NO_MULTICAST;
int multicast_scope;
struct sockaddr_in multicast_addr = { sizeof multicast_addr, AF_INET };
+ int mode_relay = 0;
/*
* Alarm interval. Don't forget to change the down time check in ruptime
***************
*** 179,184 ****
--- 180,186 ----
struct sockaddr_in sin;
uid_t unpriv_uid;
gid_t unpriv_gid;
+ struct neighbor *np;
if (getuid())
errx(1, "not super user");
***************
*** 204,209 ****
--- 206,213 ----
quiet_mode = 1;
else if (strcmp(*argv, "-p") == 0)
iff_flag = 0;
+ else if (strcmp(*argv, "-r") == 0)
+ mode_relay = 1;
else
usage();
argv++, argc--;
***************
*** 296,301 ****
--- 300,311 ----
inet_ntoa(from.sin_addr));
continue;
}
+ if ( mode_relay && ( wd.wd_hostname != myname ) && ( wd.wd_pad[1] != 'X' ) ) {
+ wd.wd_pad[1] = 'X';
+ for (np = neighbors; np != NULL; np = np->n_next)
+ (void) sendto(s, (char *)&wd, cc, 0,
+ np->n_addr, np->n_addrlen);
+ }
(void) snprintf(path, sizeof path, "whod.%s", wd.wd_hostname);
/*
* Rather than truncating and growing the file each time,
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200107182348.f6INmd709715>
