summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'net-misc/netkit-rwho')
-rw-r--r--net-misc/netkit-rwho/ChangeLog11
-rw-r--r--net-misc/netkit-rwho/Manifest23
-rw-r--r--net-misc/netkit-rwho/files/digest-netkit-rwho-0.17-r11
-rw-r--r--net-misc/netkit-rwho/files/digest-netkit-rwho-0.17-r21
-rw-r--r--net-misc/netkit-rwho/files/netkit-rwho-0.17-debian.patch874
-rw-r--r--net-misc/netkit-rwho/files/netkit-rwho-0.17-gentoo.diff40
-rw-r--r--net-misc/netkit-rwho/files/netkit-rwho-0.17-tiny-packet-dos.patch20
-rw-r--r--net-misc/netkit-rwho/netkit-rwho-0.17-r1.ebuild13
-rw-r--r--net-misc/netkit-rwho/netkit-rwho-0.17-r2.ebuild21
9 files changed, 34 insertions, 970 deletions
diff --git a/net-misc/netkit-rwho/ChangeLog b/net-misc/netkit-rwho/ChangeLog
index 0c3b7719214f..53c048ef0b04 100644
--- a/net-misc/netkit-rwho/ChangeLog
+++ b/net-misc/netkit-rwho/ChangeLog
@@ -1,6 +1,13 @@
# ChangeLog for net-misc/netkit-rwho
-# Copyright 2002-2005 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/net-misc/netkit-rwho/ChangeLog,v 1.10 2005/12/07 20:47:26 strerror Exp $
+# Copyright 2002-2006 Gentoo Foundation; Distributed under the GPL v2
+# $Header: /var/cvsroot/gentoo-x86/net-misc/netkit-rwho/ChangeLog,v 1.11 2006/02/21 21:28:11 vanquirius Exp $
+
+ 21 Feb 2006; Marcelo Goes <vanquirius@gentoo.org>
+ -files/netkit-rwho-0.17-debian.patch, -files/netkit-rwho-0.17-gentoo.diff,
+ -files/netkit-rwho-0.17-tiny-packet-dos.patch, netkit-rwho-0.17-r1.ebuild,
+ netkit-rwho-0.17-r2.ebuild:
+ Move patches to mirrors, fixes large files bug 123634 reported by Mark
+ Loeser <halcy0n at gentoo dot org>.
*netkit-rwho-0.17-r2 (07 Dec 2005)
diff --git a/net-misc/netkit-rwho/Manifest b/net-misc/netkit-rwho/Manifest
index cd4367645c78..09146710e8ce 100644
--- a/net-misc/netkit-rwho/Manifest
+++ b/net-misc/netkit-rwho/Manifest
@@ -1,22 +1,9 @@
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-MD5 93aabefeed0b6030e03d2d2263331049 ChangeLog 1567
-MD5 4817c77ec114079b62c6825805637f78 files/digest-netkit-rwho-0.17-r1 67
-MD5 4817c77ec114079b62c6825805637f78 files/digest-netkit-rwho-0.17-r2 67
+MD5 2f8d94a50cfd1b098ee0260c8b601bdb ChangeLog 1915
+MD5 2431041fffac0fce7c21632adc68cdab files/digest-netkit-rwho-0.17-r1 141
+MD5 2431041fffac0fce7c21632adc68cdab files/digest-netkit-rwho-0.17-r2 141
MD5 4bc141a5e5e4179e24cf2107fc96cc4a files/netkit-rwho-0.17-confd 93
MD5 772c136191f2ebb3589cf69276c82e27 files/netkit-rwho-0.17-cron 402
-MD5 244fbd58e86aa33cd82632a4537ad82d files/netkit-rwho-0.17-debian.patch 23287
-MD5 25a5144430969258d0a607505ba7e00a files/netkit-rwho-0.17-gentoo.diff 1139
MD5 d1045fc5ab2fb6b9494fea17f0e00d04 files/netkit-rwho-0.17-rc 258
-MD5 90c2da8beb52736b4e4f7973e0b16489 files/netkit-rwho-0.17-tiny-packet-dos.patch 583
MD5 5355b4f79a0130d075711f0a54840239 metadata.xml 223
-MD5 f613f5046419a1577a9efccb54994819 netkit-rwho-0.17-r1.ebuild 1142
-MD5 b5d107cee29cb2fe9975106b0ab252db netkit-rwho-0.17-r2.ebuild 1285
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.2 (GNU/Linux)
-
-iD8DBQFDzGaN2+ySkm8kpY0RAtiTAKCHJEtrUxHjksKapkynvPG/DIK5ywCglbGl
-g0BgK+ZBR56MaBr+wYGgrI8=
-=Sk95
------END PGP SIGNATURE-----
+MD5 cba2bf9abb8da5033cbb2a069de282e4 netkit-rwho-0.17-r1.ebuild 1189
+MD5 08c0d7594b4d517202d056b267b5694f netkit-rwho-0.17-r2.ebuild 1339
diff --git a/net-misc/netkit-rwho/files/digest-netkit-rwho-0.17-r1 b/net-misc/netkit-rwho/files/digest-netkit-rwho-0.17-r1
index 5ed5db18811d..4c2922d9f3bd 100644
--- a/net-misc/netkit-rwho/files/digest-netkit-rwho-0.17-r1
+++ b/net-misc/netkit-rwho/files/digest-netkit-rwho-0.17-r1
@@ -1 +1,2 @@
+MD5 5a290b68e91b4017a4c23b90cbcb0170 netkit-rwho-0.17-patches.tar.gz 8077
MD5 0f71620d45d472f89134ba0d74242e75 netkit-rwho-0.17.tar.gz 20610
diff --git a/net-misc/netkit-rwho/files/digest-netkit-rwho-0.17-r2 b/net-misc/netkit-rwho/files/digest-netkit-rwho-0.17-r2
index 5ed5db18811d..4c2922d9f3bd 100644
--- a/net-misc/netkit-rwho/files/digest-netkit-rwho-0.17-r2
+++ b/net-misc/netkit-rwho/files/digest-netkit-rwho-0.17-r2
@@ -1 +1,2 @@
+MD5 5a290b68e91b4017a4c23b90cbcb0170 netkit-rwho-0.17-patches.tar.gz 8077
MD5 0f71620d45d472f89134ba0d74242e75 netkit-rwho-0.17.tar.gz 20610
diff --git a/net-misc/netkit-rwho/files/netkit-rwho-0.17-debian.patch b/net-misc/netkit-rwho/files/netkit-rwho-0.17-debian.patch
deleted file mode 100644
index d097b0f7ab57..000000000000
--- a/net-misc/netkit-rwho/files/netkit-rwho-0.17-debian.patch
+++ /dev/null
@@ -1,874 +0,0 @@
-diff -ruN netkit-rwho-0.17.old/ruptime/ruptime.c netkit-rwho-0.17/ruptime/ruptime.c
---- netkit-rwho-0.17.old/ruptime/ruptime.c 1999-12-12 07:33:39.000000000 -0800
-+++ netkit-rwho-0.17/ruptime/ruptime.c 2005-12-06 21:08:35.000000000 -0800
-@@ -212,7 +212,7 @@
- static char resbuf[32];
- int days, hours, minutes;
-
-- if (tval < 0 || tval > 999*24*60*60) {
-+ if (tval < 0) {
- (void)snprintf(resbuf, sizeof(resbuf), "%s ??:??", updown);
- return(resbuf);
- }
-@@ -220,10 +220,10 @@
- hours = minutes / 60; minutes %= 60;
- days = hours / 24; hours %= 24;
- if (days)
-- (void)snprintf(resbuf, sizeof(resbuf), "%s %3d+%02d:%02d",
-+ (void)snprintf(resbuf, sizeof(resbuf), "%s %4d+%02d:%02d",
- updown, days, hours, minutes);
- else
-- (void)snprintf(resbuf, sizeof(resbuf), "%s %2d:%02d",
-+ (void)snprintf(resbuf, sizeof(resbuf), "%s %2d:%02d",
- updown, hours, minutes);
- return(resbuf);
- }
-diff -ruN netkit-rwho-0.17.old/rwho/Makefile netkit-rwho-0.17/rwho/Makefile
---- netkit-rwho-0.17.old/rwho/Makefile 1999-12-12 10:05:05.000000000 -0800
-+++ netkit-rwho-0.17/rwho/Makefile 2005-12-06 21:08:35.000000000 -0800
-@@ -3,8 +3,6 @@
- include ../MCONFIG
- include ../MRULES
-
--CFLAGS += -I../include
--
- rwho: rwho.o
- $(CC) $(LDFLAGS) $^ $(LIBS) -o $@
-
-diff -ruN netkit-rwho-0.17.old/rwhod/Makefile netkit-rwho-0.17/rwhod/Makefile
---- netkit-rwho-0.17.old/rwhod/Makefile 1999-07-31 23:00:13.000000000 -0700
-+++ netkit-rwho-0.17/rwhod/Makefile 2005-12-06 21:08:35.000000000 -0800
-@@ -3,8 +3,11 @@
- include ../MCONFIG
- include ../MRULES
-
--CFLAGS += -I../include
--OBJS = rwhod.o daemon.o
-+ifneq ($(USE_GLIBC),1)
-+CFLAGS += -D_GNU_SOURCE
-+endif
-+
-+OBJS = rwhod.o
-
- rwhod: $(OBJS)
- $(CC) $(LDFLAGS) $^ $(LIBS) -o $@
-diff -ruN netkit-rwho-0.17.old/rwhod/rwhod.8 netkit-rwho-0.17/rwhod/rwhod.8
---- netkit-rwho-0.17.old/rwhod/rwhod.8 2000-07-30 16:57:06.000000000 -0700
-+++ netkit-rwho-0.17/rwhod/rwhod.8 2005-12-06 21:08:35.000000000 -0800
-@@ -32,7 +32,10 @@
- .\" from: @(#)rwhod.8 6.5 (Berkeley) 3/16/91
- .\" $Id: netkit-rwho-0.17-debian.patch,v 1.1 2005/12/07 20:47:26 strerror Exp $
- .\"
--.Dd May 13, 1997
-+.\" Modified by Philippe Troin <phil@fifi.org>: added interface
-+.\" options and forwarding.
-+
-+.Dd March 10, 1999
- .Dt RWHOD 8
- .Os "Linux NetKit (0.17)"
- .Sh NAME
-@@ -40,7 +43,8 @@
- .Nd system status server
- .Sh SYNOPSIS
- .Nm rwhod
--.Op Fl bpa
-+.Op Fl bpaf
-+.Op -i <if>...
- .Op Fl u Ar user
- .Sh DESCRIPTION
- .Nm Rwhod
-@@ -67,22 +71,6 @@
- in the ``rwho'' service specification; see
- .Xr services 5 .
- .Pp
--If the
--.Fl b
--flag is supplied, only broadcast interfaces, such as ethernets, will
--be used.
--If the
--.Fl p
--flag is supplied, only point-to-point interfaces will be used. If the
--.Fl a
--flag is supplied, or no flags are supplied, all interfaces will be
--used.
--.Pp
--If the
--.Fl u
--flag is supplied, rwhod will run as the specified user instead of as
--root.
--.Pp
- The messages sent and received, are of the form:
- .Bd -literal -offset indent
- struct outmp {
-@@ -145,16 +133,78 @@
- .Nm Rwhod
- recomputes the system boot time every 30 minutes because on
- some (non-Linux) systems it is not a totally reliable process.
-+.Sh FLAGS
-+If the
-+.Fl b
-+flag is supplied, only broadcast interfaces, such as ethernets, will
-+be used.
-+If the
-+.Fl p
-+flag is supplied, only point-to-point interfaces will be used. If the
-+.Fl a
-+flag is supplied, or no flags are supplied, all interfaces will be
-+used.
-+.Pp
-+Alternately, you may specify interfaces by name by providing one or
-+more
-+.Fl i
-+options followed by the interface name.
-+.Pp
-+If the
-+.Fl u
-+flag is supplied, rwhod will run as the specified user instead of as
-+root.
-+.Pp
-+.Nm Rwhod
-+can also forward packets between interfaces if started with
-+.Fl f.
-+Please read the
-+.Xr CAVEATS
-+section before enabling
-+.Xr rwhod
-+forwarding.
-+.Sh CAVEATS
-+While
-+.Xr rwhod
-+listens on any interface present on the host, it will only send (or
-+forward) to the interfaces determined by the
-+.Fl a b p i
-+flags.
-+.Pp
-+When operating in forwarding mode (with
-+.Fl f
-+),
-+.Xr rwhod
-+forwards all correct rwhod packets received on an interface to all the
-+other interfaces. You can create a broadcast storm if there is a
-+loop in your network and all the routers in the loop run in forwarding
-+mode. To prevent this from happenning,
-+.Xr rwhod
-+will shut down forwarding (and log the event to the syslog) if more
-+than one
-+.Xr rwhod
-+packet is forwarded per second on average over the last three
-+minutes. If this happens, you must break the loop of forwarding routers.
- .Sh SEE ALSO
- .Xr rwho 1 ,
- .Xr ruptime 1
- .Sh BUGS
--There should be a way to relay status information between networks.
-+Some kind of proxying feature might be useful if your router doesn't
-+run
-+.Xr rwhod.
-+.Pp
- People often interpret the server dying
--or network communtication failures
-+or network communication failures
- as a machine going down.
-+.Pp
-+.Xr Rwhod
-+doesn't refresh its interface list, which might be useful when using
-+.Fl a b p.
- .Sh HISTORY
- The
- .Nm
- command appeared in
- .Bx 4.2 .
-+.Pp
-+Philippe Troin <phil@fifi.org> implemented forwarding and interface
-+selection flags.
-diff -ruN netkit-rwho-0.17.old/rwhod/rwhod.c netkit-rwho-0.17/rwhod/rwhod.c
---- netkit-rwho-0.17.old/rwhod/rwhod.c 2005-12-06 21:08:06.000000000 -0800
-+++ netkit-rwho-0.17/rwhod/rwhod.c 2005-12-06 21:12:57.000000000 -0800
-@@ -29,6 +29,10 @@
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-+
-+ * Modified by Philippe Troin <phil@fifi.org> (added options & implemented
-+ * them.
-+
- */
-
- char copyright[] =
-@@ -47,6 +51,7 @@
- #include <signal.h>
- #include <sys/ioctl.h>
- #include <sys/file.h>
-+#include <sys/types.h>
-
- #include <net/if.h>
- #include <netinet/in.h>
-@@ -71,10 +76,10 @@
- #include <grp.h>
- #include <time.h>
-
--#include "daemon.h"
--
- #include "../version.h"
-
-+typedef struct sockaddr_in SA;
-+
- #define ENDIAN LITTLE_ENDIAN
-
- /*
-@@ -98,27 +103,44 @@
- static int verify(const char *name);
- int getloadavg(double ptr[3], int n);
-
-+
-+/* This is the list of interface we want to listen on */
-+struct wanted_neigh {
-+ struct wanted_neigh *w_next;
-+ char *w_ifname;
-+ enum { W_USED_NOT, W_USED_ONCE, W_USED_MULTI } w_used;
-+};
-+
- /*
- * We communicate with each neighbor in
- * a list constructed at the time we're
- * started up. Neighbors are currently
- * directly connected via a hardware interface.
- */
--struct neighbor {
-+struct neighbor {
- struct neighbor *n_next;
- char *n_name; /* interface name */
-- char *n_addr; /* who to send to */
-+ SA *n_myaddr; /* My address on this i/f */
-+ SA *n_mask; /* Netmask on this i/f */
-+ SA *n_dstaddr; /* who to send to */
- int n_addrlen; /* size of address */
- int n_flags; /* should forward?, interface flags */
- };
-
-+static struct wanted_neigh *wanted_neigh;
- static struct neighbor *neighbors;
- static struct servent *sp;
- static int sk;
--static int use_pointopoint = 0;
--static int use_broadcast = 0;
-+static int use_pointopoint;
-+static int use_broadcast;
- static int need_init = 1;
--static int child_pid = 0;
-+static int child_pid;
-+static int use_forwarding;
-+static int forwarded_packets;
-+
-+/* Max number of packets to forward between each alarm() tick.
-+ If this number is exceeded, then the forwarding is switched off. */
-+#define MAX_FWD_PACKETS (AL_INTERVAL)
-
- #define WHDRSIZE (((caddr_t) &((struct whod *) 0)->wd_we) \
- - ((caddr_t) 0))
-@@ -127,24 +149,48 @@
- static void termhandler(int);
- static void sendpacket(struct whod *);
- static void getboottime(struct whod *);
-+static void forward(const SA *, const struct whod *, int cc);
-+static void usage(void);
-
- int
- main(int argc, char *argv[])
- {
-+ struct wanted_neigh *wn;
-+ int wn_dup;
- struct sockaddr_in from;
-- struct passwd *pw = 0;
-+ struct passwd *pw;
- struct stat st;
- char path[64];
- char *user = NULL;
- int on = 1;
- int opt;
-+ time_t before;
-
- if (getuid()) {
- fprintf(stderr, "rwhod: not super user\n");
-+ }
-+ openlog("rwhod", LOG_PID, LOG_DAEMON);
-+ sp = getservbyname("who", "udp");
-+ if (sp == 0) {
-+ fprintf(stderr, "rwhod: udp/who: unknown service\n");
-+ exit(1);
-+ }
-+ if ((sk = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
-+ syslog(LOG_ERR, "socket: %m");
-+ exit(1);
-+ }
-+ if (setsockopt(sk, SOL_SOCKET, SO_BROADCAST, &on, sizeof (on)) < 0) {
-+ syslog(LOG_ERR, "setsockopt SO_BROADCAST: %m");
-+ exit(1);
-+ }
-+ sine.sin_family = AF_INET;
-+ sine.sin_port = sp->s_port;
-+ if (bind(sk, (struct sockaddr *)&sine, sizeof(sine)) < 0) {
-+ syslog(LOG_ERR, "bind: %m");
- exit(1);
- }
-
-- while ((opt = getopt(argc, argv, "bpau:")) != EOF) {
-+ while ((opt = getopt(argc, argv, "bpai:fu:")) != EOF) {
- switch (opt) {
- case 'b':
- use_broadcast = 1;
-@@ -156,29 +202,57 @@
- use_broadcast = 1;
- use_pointopoint = 1;
- break;
-+ case 'f':
-+ use_forwarding = 1;
-+ break;
-+ case 'i':
-+ wn_dup = 0;
-+ for (wn = wanted_neigh; wn; wn = wn->w_next) {
-+ if (strcmp(wn->w_ifname, optarg)== 0) {
-+ wn_dup = 1;
-+ break;
-+ }
-+ }
-+ if (wn_dup) {
-+ fprintf(stderr, "rwhod: warning: "
-+ "duplicate interface %s in arguments\n",
-+ optarg);
-+ } else {
-+ wn = malloc(sizeof(struct wanted_neigh));
-+ if (wn == NULL) {
-+ fprintf(stderr, "rwhod: out of memory\n");
-+ exit(2);
-+ }
-+ wn->w_next = wanted_neigh;
-+ wn->w_ifname = malloc(strlen(optarg)+1);
-+ wn->w_used = W_USED_NOT;
-+ if (wn->w_ifname == NULL) {
-+ fprintf(stderr, "rwhod: out of memory\n");
-+ exit(2);
-+ }
-+ strcpy(wn->w_ifname, optarg);
-+ wanted_neigh = wn;
-+ }
-+ break;
- case 'u':
- user = optarg;
- break;
- case '?':
- default:
-- fprintf(stderr, "usage: rwhod [-bpa] [-u user]\n");
-- exit(1);
-- break;
-+ usage();
- }
- }
- if (optind<argc) {
-- fprintf(stderr, "usage: rwhod [-bpa] [-u user]\n");
-- exit(1);
-+ usage();
- }
-- if (!use_pointopoint && !use_broadcast) {
-+ if (!use_pointopoint && !use_broadcast && !wanted_neigh) {
- /* use none is nonsensical; default to all */
- use_pointopoint = 1;
- use_broadcast = 1;
- }
--
-- sp = getservbyname("who", "udp");
-- if (sp == 0) {
-- fprintf(stderr, "rwhod: udp/who: unknown service\n");
-+ if ((use_pointopoint || use_broadcast) && wanted_neigh) {
-+ fprintf(stderr, "rwhod: cannot specify both -i and one of -b "
-+ "-p -a\n");
- exit(1);
- }
- #ifndef DEBUG
-@@ -190,26 +264,33 @@
- exit(1);
- }
- (void) signal(SIGHUP, huphandler);
-- openlog("rwhod", LOG_PID, LOG_DAEMON);
--
-- if ((sk = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
-- syslog(LOG_ERR, "socket: %m");
-- exit(1);
-- }
-- if (setsockopt(sk, SOL_SOCKET, SO_BROADCAST, &on, sizeof (on)) < 0) {
-- syslog(LOG_ERR, "setsockopt SO_BROADCAST: %m");
-- exit(1);
-- }
-- sine.sin_family = AF_INET;
-- sine.sin_port = sp->s_port;
-- if (bind(sk, (struct sockaddr *)&sine, sizeof(sine)) < 0) {
-- syslog(LOG_ERR, "bind: %m");
-- exit(1);
-- }
-
- (void) umask(022);
-
- signal(SIGTERM, termhandler);
-+
-+ if (user) {
-+ /* We have to drop privs in two steps--first get the
-+ * account info, then drop privs after chroot */
-+ if ((pw = getpwnam(user)) == NULL) {
-+ syslog(LOG_ERR, "unknown user: %s", user);
-+ exit(1);
-+ }
-+
-+ /* Now drop privs */
-+ if (pw->pw_uid) {
-+ if (setgroups(1, &pw->pw_gid) < 0
-+ || setgid(pw->pw_gid) < 0
-+ || setuid(pw->pw_uid) < 0) {
-+ syslog(LOG_ERR,"failed to drop privilege: %m");
-+ exit(1);
-+ }
-+ }
-+ }
-+
-+ if (!configure(sk))
-+ exit(1);
-+
- child_pid = fork();
- if (child_pid < 0) {
- syslog(LOG_ERR, "fork: %m");
-@@ -220,35 +301,15 @@
- exit(0);
- }
-
-- /* We have to drop privs in two steps--first get the
-- * account info, then drop privs after chroot */
-- if (user && (pw = getpwnam(user)) == NULL) {
-- syslog(LOG_ERR, "unknown user: %s", user);
-- exit(1);
-- }
--
-- /* Chroot to the spool directory
-- * (note this is already our $cwd) */
-- if (chroot(_PATH_RWHODIR) < 0) {
-- syslog(LOG_ERR, "chroot(%s): %m", _PATH_RWHODIR);
-- kill(child_pid, SIGTERM);
-- exit(1);
-- }
--
-- /* Now drop privs */
-- if (pw) {
-- if (setgroups(1, &pw->pw_gid) < 0
-- || setgid(pw->pw_gid) < 0
-- || setuid(pw->pw_uid) < 0) {
-- syslog(LOG_ERR, "failed to drop privilege: %m");
-- exit(1);
-- }
-- }
--
-+ before = 0;
- for (;;) {
- struct whod wd;
- int cc, whod;
-+#ifdef __GLIBC__
-+ socklen_t len = sizeof(from);
-+#else
- size_t len = sizeof(from);
-+#endif
-
- memset(&wd, 0, sizeof(wd));
- cc = recvfrom(sk, (char *)&wd, sizeof(struct whod), 0,
-@@ -262,6 +323,12 @@
- syslog(LOG_WARNING, "packet too small");
- continue;
- }
-+ if (cc < WHDRSIZE) {
-+ syslog(LOG_WARNING, "packet too small");
-+ continue;
-+ }
-+ if (cc < WHDRSIZE)
-+ continue;
- if (from.sin_port != sp->s_port) {
- syslog(LOG_WARNING, "%d: bad from port",
- ntohs(from.sin_port));
-@@ -271,14 +338,24 @@
- continue;
- if (wd.wd_type != WHODTYPE_STATUS)
- continue;
-+
-+ if (use_forwarding) {
-+ time_t now = time(NULL);
-+ if ((uintmax_t) (now - before) >= AL_INTERVAL) {
-+ before = now;
-+ forwarded_packets = 0;
-+ }
-+ forward(&from, &wd, cc);
-+ }
-+
- /*
- * Ensure null termination of the name within the packet.
- * Otherwise we might overflow or read past the end.
- */
- wd.wd_hostname[sizeof(wd.wd_hostname)-1] = 0;
- if (!verify(wd.wd_hostname)) {
-- syslog(LOG_WARNING, "malformed host name from %x",
-- from.sin_addr.s_addr);
-+ syslog(LOG_WARNING, "malformed host name from %s",
-+ inet_ntoa(from.sin_addr));
- continue;
- }
- snprintf(path, sizeof(path), "whod.%s", wd.wd_hostname);
-@@ -350,9 +427,6 @@
- size_t mynamelen;
- struct whod mywd;
-
-- if (!configure(sk))
-- exit(1);
--
- /*
- * Establish host name as returned by system.
- */
-@@ -362,7 +436,7 @@
- }
- if ((cp = index(myname, '.')) != NULL)
- *cp = '\0';
-- mynamelen = strlen(myname);
-+ mynamelen = strlen(myname) + 1;
- if (mynamelen > sizeof(mywd.wd_hostname))
- mynamelen = sizeof(mywd.wd_hostname) - 1;
- strncpy(mywd.wd_hostname, myname, mynamelen);
-@@ -453,7 +527,9 @@
- }
- we = wd->wd_we;
- for (i = 0; i < nutmps; i++) {
-- if (stat(we->we_utmp.out_line, &stb) >= 0)
-+ const char *p = we->we_utmp.out_line;
-+
-+ if (!strchr(p, ':') && stat(p, &stb) >= 0)
- we->we_idle = htonl(now - stb.st_atime);
- we++;
- }
-@@ -465,10 +541,10 @@
- wd->wd_vers = WHODVERSION;
- wd->wd_type = WHODTYPE_STATUS;
- for (np = neighbors; np != NULL; np = np->n_next) {
-- if (sendto(sk, (char *)wd, cc, 0,
-- (struct sockaddr *) np->n_addr, np->n_addrlen) < 0)
-+ if (sendto(sk, wd, cc, 0,
-+ (struct sockaddr *) np->n_dstaddr, np->n_addrlen) < 0)
- syslog(LOG_ERR, "sendto(%s): %m",
-- inet_ntoa(((struct sockaddr_in *)np->n_addr)->sin_addr));
-+ inet_ntoa(np->n_dstaddr->sin_addr));
- }
-
- if (nutmps && chdir(_PATH_RWHODIR)) {
-@@ -477,6 +553,7 @@
- }
- }
-
-+#if __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 2)
- /*
- * Taken from:
- *
-@@ -523,6 +600,7 @@
- fclose(fp);
- return 0;
- }
-+#endif /* __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 2) */
-
-
- void
-@@ -571,7 +649,7 @@
- exit(1);
- }
- (void) lseek(kmemf, (long)nl[NL_BOOTTIME].n_value, L_SET);
-- (void) read(kmemf, (char *)&wd->wd_boottime,
-+ (void) read(kmemf, &wd->wd_boottime,
- sizeof (wd->wd_boottime));
- wd->wd_boottime = htonl(wd->wd_boottime);
- #endif
-@@ -589,10 +667,11 @@
- struct ifreq ifreq, *ifr;
- struct sockaddr_in *sn;
- register struct neighbor *np;
-+ struct wanted_neigh *wn;
-
- ifc.ifc_len = sizeof (buf);
- ifc.ifc_buf = buf;
-- if (ioctl(s, SIOCGIFCONF, (char *)&ifc) < 0) {
-+ if (ioctl(s, SIOCGIFCONF, &ifc) < 0) {
- syslog(LOG_ERR, "ioctl (get interface configuration)");
- return (0);
- }
-@@ -605,7 +684,11 @@
- #endif
- cplim = buf + ifc.ifc_len; /*skip over if's with big ifr_addr's */
- for (cp = buf; cp < cplim;
-+#ifdef linux
-+ cp += sizeof(struct ifreq)) {
-+#else
- cp += sizeof (ifr->ifr_name) + size(ifr->ifr_addr)) {
-+#endif
- ifr = (struct ifreq *)cp;
- for (np = neighbors; np != NULL; np = np->n_next)
- if (np->n_name &&
-@@ -619,63 +702,170 @@
- continue;
- np->n_name = malloc(strlen(ifr->ifr_name) + 1);
- if (np->n_name == NULL) {
-- free((char *)np);
-+ free(np);
- continue;
- }
- strcpy(np->n_name, ifr->ifr_name);
- np->n_addrlen = sizeof (ifr->ifr_addr);
-- np->n_addr = malloc(np->n_addrlen);
-- if (np->n_addr == NULL) {
-+
-+ np->n_dstaddr = malloc(np->n_addrlen);
-+ if (np->n_dstaddr == NULL) {
-+ free(np->n_name);
-+ free(np);
-+ continue;
-+ }
-+ bzero(np->n_dstaddr, np->n_addrlen);
-+
-+ np->n_myaddr = malloc(np->n_addrlen);
-+ if (np->n_myaddr == NULL) {
-+ free(np->n_dstaddr);
- free(np->n_name);
-- free((char *)np);
-+ free(np);
- continue;
- }
-- bcopy((char *)&ifr->ifr_addr, np->n_addr, np->n_addrlen);
-- if (ioctl(s, SIOCGIFFLAGS, (char *)&ifreq) < 0) {
-+ bzero(np->n_myaddr, np->n_addrlen);
-+
-+ np->n_mask = malloc(np->n_addrlen);
-+ if (np->n_mask == NULL) {
-+ free(np->n_myaddr);
-+ free(np->n_dstaddr);
-+ free(np->n_name);
-+ free(np);
-+ continue;
-+ }
-+ bzero(np->n_mask, np->n_addrlen);
-+
-+ /* Initialize both my address and destination address by
-+ the interface address. The destination address will be
-+ overwritten when the interface has IFF_BROADCAST or
-+ IFF_POINTOPOINT. */
-+ bcopy(&ifr->ifr_addr, np->n_dstaddr, np->n_addrlen);
-+ bcopy(&ifr->ifr_addr, np->n_myaddr, np->n_addrlen);
-+
-+ if (ioctl(s, SIOCGIFFLAGS, &ifreq) < 0) {
- syslog(LOG_ERR, "ioctl (get interface flags)");
-- free((char *)np);
-+ free(np->n_myaddr);
-+ free(np->n_dstaddr);
-+ free(np->n_name);
-+ free(np);
- continue;
- }
- if ((ifreq.ifr_flags & IFF_UP) == 0 ||
-- (ifreq.ifr_flags & (IFF_BROADCAST|IFF_POINTOPOINT)) == 0) {
-- free((char *)np);
-+ (ifreq.ifr_flags & (IFF_BROADCAST|IFF_POINTOPOINT)) == 0 ||
-+ (ifreq.ifr_flags & IFF_LOOPBACK) != 0) {
-+ free(np->n_myaddr);
-+ free(np->n_dstaddr);
-+ free(np->n_name);
-+ free(np);
- continue;
- }
-+ if (wanted_neigh) {
-+ int found = 0;
-+ for (wn = wanted_neigh; wn; wn = wn->w_next)
-+ if (strcmp(wn->w_ifname, ifreq.ifr_name)==0) {
-+ found = 1;
-+ break;
-+ }
-+ if (!found) {
-+ free(np->n_mask);
-+ free(np->n_myaddr);
-+ free(np->n_dstaddr);
-+ free(np->n_name);
-+ free(np);
-+ continue;
-+ }
-+ switch (wn->w_used) {
-+ case W_USED_NOT:
-+ wn->w_used = W_USED_ONCE;
-+ break;
-+ case W_USED_ONCE:
-+ syslog(LOG_ERR,
-+ "specified interface %s more than once",
-+ wn->w_ifname);
-+ wn->w_used = W_USED_MULTI;
-+ break;
-+ case W_USED_MULTI:
-+ /* oh well... don't tell again... */
-+ break;
-+ default:
-+ syslog(LOG_CRIT, "w_used=%d on %s",
-+ wn->w_used, wn->w_ifname);
-+ abort();
-+ }
-+ }
- np->n_flags = ifreq.ifr_flags;
- if (np->n_flags & IFF_POINTOPOINT) {
-- if (ioctl(s, SIOCGIFDSTADDR, (char *)&ifreq) < 0) {
-+ if (ioctl(s, SIOCGIFDSTADDR, &ifreq) < 0) {
- syslog(LOG_ERR, "ioctl (get dstaddr)");
-+ free(np->n_mask);
-+ free(np->n_myaddr);
-+ free(np->n_dstaddr);
-+ free(np->n_name);
- free(np);
- continue;
- }
-- if (!use_pointopoint) {
-+ if (!wanted_neigh && !use_pointopoint) {
-+ free(np->n_mask);
-+ free(np->n_myaddr);
-+ free(np->n_dstaddr);
-+ free(np->n_name);
- free(np);
- continue;
- }
- /* we assume addresses are all the same size */
-- bcopy((char *)&ifreq.ifr_dstaddr,
-- np->n_addr, np->n_addrlen);
-+ bcopy(&ifreq.ifr_dstaddr, np->n_dstaddr, np->n_addrlen);
- }
- if (np->n_flags & IFF_BROADCAST) {
-- if (ioctl(s, SIOCGIFBRDADDR, (char *)&ifreq) < 0) {
-+ if (ioctl(s, SIOCGIFBRDADDR, &ifreq) < 0) {
- syslog(LOG_ERR, "ioctl (get broadaddr)");
-+ free(np->n_mask);
-+ free(np->n_myaddr);
-+ free(np->n_dstaddr);
-+ free(np->n_name);
- free(np);
- continue;
- }
-- if (!use_broadcast) {
-+ if (!wanted_neigh && !use_broadcast) {
-+ free(np->n_mask);
-+ free(np->n_myaddr);
-+ free(np->n_dstaddr);
-+ free(np->n_name);
- free(np);
- continue;
- }
- /* we assume addresses are all the same size */
-- bcopy((char *)&ifreq.ifr_broadaddr,
-- np->n_addr, np->n_addrlen);
-+ bcopy(&ifreq.ifr_broadaddr, np->n_dstaddr, np->n_addrlen);
-+
-+ /* Get netmask */
-+ if (ioctl(s, SIOCGIFNETMASK, &ifreq) < 0) {
-+ syslog(LOG_ERR, "ioctl (get netmask)");
-+ free(np->n_mask);
-+ free(np->n_myaddr);
-+ free(np->n_dstaddr);
-+ free(np->n_name);
-+ free(np);
-+ continue;
-+ }
-+ bcopy((char*)&ifreq.ifr_netmask,
-+ np->n_mask, np->n_addrlen);
- }
- /* gag, wish we could get rid of Internet dependencies */
-- sn = (struct sockaddr_in *)np->n_addr;
-+ sn = (SA *)np->n_dstaddr;
- sn->sin_port = sp->s_port;
- np->n_next = neighbors;
- neighbors = np;
- }
-+
-+ /* Check for unfound i/f */
-+ for (wn = wanted_neigh; wn; wn = wn->w_next)
-+ if (wn->w_used == W_USED_NOT)
-+ syslog(LOG_WARNING, "didn't find interface %s",
-+ wn->w_ifname);
-+
-+ /* Dump out used i/f */
-+ for (np = neighbors; np; np = np->n_next)
-+ syslog(LOG_INFO, "sending on interface %s", np->n_name);
-+
- return (1);
- }
-
-@@ -697,7 +887,7 @@
- {
- register struct whod *w = (struct whod *)buf;
- register struct whoent *we;
-- struct sockaddr_in *sn = (struct sockaddr_in *)to;
-+ struct sockaddr_in *sn = (SA *)to;
- char *interval();
-
- printf("sendto %x.%d\n", ntohl(sn->sin_addr.s_addr), ntohs(sn->sin_port));
-@@ -751,3 +941,63 @@
- return (resbuf);
- }
- #endif
-+
-+/* Eventually forward the packet */
-+static void
-+forward(const SA *from, const struct whod *wd, int cc)
-+{
-+ struct neighbor *np;
-+ int looped_back = 0;
-+
-+ /* Scan to see if the packet was sent by us */
-+ for (np = neighbors; np != NULL; np = np->n_next)
-+ if (from->sin_addr.s_addr ==
-+ np->n_myaddr->sin_addr.s_addr) {
-+ looped_back = 1;
-+ break;
-+ }
-+
-+ if (!looped_back) {
-+ sigset_t saved_set;
-+ sigset_t mask_set;
-+
-+ sigemptyset(&mask_set);
-+ sigaddset(&mask_set, SIGALRM);
-+ sigprocmask(SIG_BLOCK, &mask_set, &saved_set);
-+
-+ if (++forwarded_packets > MAX_FWD_PACKETS) {
-+ syslog(LOG_ERR, "too many forward requests, "
-+ "disabling forwarding");
-+ use_forwarding = 0;
-+ }
-+
-+ sigprocmask(SIG_SETMASK, &saved_set, NULL);
-+
-+ /* Re-broadcast packet on all interfaces... */
-+ for (np = neighbors; np != NULL; np = np->n_next) {
-+ /* .. but do not rebroadcast on the incoming interface */
-+ if (((np->n_flags & IFF_BROADCAST) &&
-+ (from->sin_addr.s_addr &
-+ np->n_mask->sin_addr.s_addr) !=
-+ (np->n_myaddr->sin_addr.s_addr &
-+ np->n_mask->sin_addr.s_addr)) ||
-+ ((np->n_flags & IFF_POINTOPOINT) &&
-+ (from->sin_addr.s_addr) !=
-+ np->n_dstaddr->sin_addr.s_addr)) {
-+ if (sendto(sk, wd, cc, 0,
-+ (struct sockaddr *)np->n_dstaddr,
-+ np->n_addrlen) < 0)
-+ syslog(LOG_ERR,
-+ "forwarding sendto(%s): %m",
-+ inet_ntoa(np->n_dstaddr->sin_addr));
-+ }
-+ }
-+ }
-+}
-+
-+static void
-+usage()
-+{
-+ fprintf(stderr, "usage: rwhod [-bpaf] [-i <ifname>] [-u user]...\n");
-+ exit(1);
-+}
diff --git a/net-misc/netkit-rwho/files/netkit-rwho-0.17-gentoo.diff b/net-misc/netkit-rwho/files/netkit-rwho-0.17-gentoo.diff
deleted file mode 100644
index d7e2902de77b..000000000000
--- a/net-misc/netkit-rwho/files/netkit-rwho-0.17-gentoo.diff
+++ /dev/null
@@ -1,40 +0,0 @@
---- netkit-rwho-0.17-org/rwhod/rwhod.c Sat Jul 22 21:19:48 2000
-+++ netkit-rwho-0.17/rwhod/rwhod.c Sat Jul 6 11:53:50 2002
-@@ -69,6 +69,7 @@
- #include <arpa/inet.h>
- #include <pwd.h>
- #include <grp.h>
-+#include <time.h>
-
- #include "daemon.h"
-
-@@ -95,7 +96,7 @@
- static void broadcaster(void);
- static int configure(int s);
- static int verify(const char *name);
--static int getloadavg(double ptr[3], int n);
-+int getloadavg(double ptr[3], int n);
-
- /*
- * We communicate with each neighbor in
-@@ -273,7 +274,7 @@
- wd.wd_hostname[sizeof(wd.wd_hostname)-1] = 0;
- if (!verify(wd.wd_hostname)) {
- syslog(LOG_WARNING, "malformed host name from %x",
-- from.sin_addr);
-+ from.sin_addr.s_addr);
- continue;
- }
- snprintf(path, sizeof(path), "whod.%s", wd.wd_hostname);
-@@ -359,9 +360,9 @@
- *cp = '\0';
- mynamelen = strlen(myname);
- if (mynamelen > sizeof(mywd.wd_hostname))
-- mynamelen = sizeof(mywd.wd_hostname);
-+ mynamelen = sizeof(mywd.wd_hostname) - 1;
- strncpy(mywd.wd_hostname, myname, mynamelen);
-- mywd.wd_hostname[sizeof(mywd.wd_hostname)-1] = 0;
-+ mywd.wd_hostname[mynamelen] = 0;
-
- getboottime(&mywd);
-
diff --git a/net-misc/netkit-rwho/files/netkit-rwho-0.17-tiny-packet-dos.patch b/net-misc/netkit-rwho/files/netkit-rwho-0.17-tiny-packet-dos.patch
deleted file mode 100644
index 4c9b83063b47..000000000000
--- a/net-misc/netkit-rwho/files/netkit-rwho-0.17-tiny-packet-dos.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-If a user sends a packet which is smaller than WHDRSIZE, the code
-will later hit a loop which will result in the service faulting.
-A simple DoS where the server will be taken out, but something
-that should be fixed :).
-
-http://bugs.gentoo.org/show_bug.cgi?id=78371
-
---- rwhod/rwhod.c
-+++ rwhod/rwhod.c
-@@ -258,6 +258,10 @@
- syslog(LOG_WARNING, "recv: %m");
- continue;
- }
-+ if (cc < WHDRSIZE) {
-+ syslog(LOG_WARNING, "packet too small");
-+ continue;
-+ }
- if (from.sin_port != sp->s_port) {
- syslog(LOG_WARNING, "%d: bad from port",
- ntohs(from.sin_port));
diff --git a/net-misc/netkit-rwho/netkit-rwho-0.17-r1.ebuild b/net-misc/netkit-rwho/netkit-rwho-0.17-r1.ebuild
index 09e9490d86a4..79ba2737754e 100644
--- a/net-misc/netkit-rwho/netkit-rwho-0.17-r1.ebuild
+++ b/net-misc/netkit-rwho/netkit-rwho-0.17-r1.ebuild
@@ -1,12 +1,13 @@
-# Copyright 1999-2005 Gentoo Foundation
+# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/net-misc/netkit-rwho/netkit-rwho-0.17-r1.ebuild,v 1.1 2005/02/05 06:45:52 vapier Exp $
+# $Header: /var/cvsroot/gentoo-x86/net-misc/netkit-rwho/netkit-rwho-0.17-r1.ebuild,v 1.2 2006/02/21 21:28:11 vanquirius Exp $
inherit eutils
DESCRIPTION="Netkit - ruptime/rwho/rwhod"
HOMEPAGE="http://www.hcs.harvard.edu/~dholland/computers/netkit.html"
-SRC_URI="ftp://ftp.uk.linux.org/pub/linux/Networking/netkit/${P}.tar.gz"
+SRC_URI="ftp://ftp.uk.linux.org/pub/linux/Networking/netkit/${P}.tar.gz
+ mirror://gentoo/${PN}-0.17-patches.tar.gz"
LICENSE="BSD"
SLOT="0"
@@ -20,9 +21,9 @@ DEPEND="${RDEPEND}
src_unpack() {
unpack ${A}
- cd ${S}
- epatch ${FILESDIR}/${P}-tiny-packet-dos.patch
- epatch ${FILESDIR}/${P}-gentoo.diff
+ cd "${S}"
+ epatch "${WORKDIR}"/${P}-tiny-packet-dos.patch
+ epatch "${WORKDIR}"/${P}-gentoo.diff
}
src_compile() {
diff --git a/net-misc/netkit-rwho/netkit-rwho-0.17-r2.ebuild b/net-misc/netkit-rwho/netkit-rwho-0.17-r2.ebuild
index 3a34668cb247..c9c3376aeea4 100644
--- a/net-misc/netkit-rwho/netkit-rwho-0.17-r2.ebuild
+++ b/net-misc/netkit-rwho/netkit-rwho-0.17-r2.ebuild
@@ -1,12 +1,13 @@
-# Copyright 1999-2005 Gentoo Foundation
+# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/net-misc/netkit-rwho/netkit-rwho-0.17-r2.ebuild,v 1.1 2005/12/07 20:47:26 strerror Exp $
+# $Header: /var/cvsroot/gentoo-x86/net-misc/netkit-rwho/netkit-rwho-0.17-r2.ebuild,v 1.2 2006/02/21 21:28:11 vanquirius Exp $
inherit eutils
DESCRIPTION="Netkit - ruptime/rwho/rwhod"
HOMEPAGE="http://www.hcs.harvard.edu/~dholland/computers/netkit.html"
-SRC_URI="ftp://ftp.uk.linux.org/pub/linux/Networking/netkit/${P}.tar.gz"
+SRC_URI="ftp://ftp.uk.linux.org/pub/linux/Networking/netkit/${P}.tar.gz
+ mirror://gentoo/${PN}-0.17-patches.tar.gz"
LICENSE="BSD"
SLOT="0"
@@ -20,10 +21,10 @@ DEPEND="${RDEPEND}
src_unpack() {
unpack ${A}
- cd ${S}
- epatch ${FILESDIR}/${P}-tiny-packet-dos.patch
- epatch ${FILESDIR}/${P}-gentoo.diff
- epatch ${FILESDIR}/${P}-debian.patch
+ cd "${S}"
+ epatch "${WORKDIR}"/${P}-tiny-packet-dos.patch
+ epatch "${WORKDIR}"/${P}-gentoo.diff
+ epatch "${WORKDIR}"/${P}-debian.patch
}
src_compile() {
@@ -44,9 +45,9 @@ src_install() {
doman ruptime/ruptime.1 rwho/rwho.1 rwhod/rwhod.8
dodoc README ChangeLog
- newinitd ${FILESDIR}/${P}-rc rwhod
- newconfd ${FILESDIR}/${P}-confd rwhod
+ newinitd "${FILESDIR}"/${P}-rc rwhod
+ newconfd "${FILESDIR}"/${P}-confd rwhod
exeinto /etc/cron.monthly
- doexe ${FILESDIR}/${P}-cron
+ doexe "${FILESDIR}"/${P}-cron
}