summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornorby <norby@openbsd.org>2006-06-17 11:39:52 +0000
committernorby <norby@openbsd.org>2006-06-17 11:39:52 +0000
commitd7994a511fe3a0730499ca97b79fe4a1543fc4b3 (patch)
tree1bd0b1bf49ce31f84b4a2108a40574a6852b5eed
parentKNF (diff)
downloadwireguard-openbsd-d7994a511fe3a0730499ca97b79fe4a1543fc4b3.tar.xz
wireguard-openbsd-d7994a511fe3a0730499ca97b79fe4a1543fc4b3.zip
make dvmrpd(8) capable of fetching interfaces correctly on sparc64.
-rw-r--r--usr.sbin/dvmrpd/kroute.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/usr.sbin/dvmrpd/kroute.c b/usr.sbin/dvmrpd/kroute.c
index e63769bfef0..3abc6102151 100644
--- a/usr.sbin/dvmrpd/kroute.c
+++ b/usr.sbin/dvmrpd/kroute.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kroute.c,v 1.2 2006/06/01 22:07:30 claudio Exp $ */
+/* $OpenBSD: kroute.c,v 1.3 2006/06/17 11:39:52 norby Exp $ */
/*
* Copyright (c) 2004 Esben Norby <norby@openbsd.org>
@@ -26,6 +26,7 @@
#include <arpa/inet.h>
#include <net/if.h>
#include <net/if_dl.h>
+#include <net/if_types.h>
#include <net/route.h>
#include <err.h>
#include <errno.h>
@@ -346,13 +347,19 @@ fetchifs(int ifindex)
kif->k.baudrate = ifm.ifm_data.ifi_baudrate;
kif->k.mtu = ifm.ifm_data.ifi_mtu;
kif->k.nh_reachable = (kif->k.flags & IFF_UP) &&
- (ifm.ifm_data.ifi_link_state != LINK_STATE_DOWN);
+ (ifm.ifm_data.ifi_link_state == LINK_STATE_UP ||
+ (ifm.ifm_data.ifi_link_state == LINK_STATE_UNKNOWN &&
+ ifm.ifm_data.ifi_type != IFT_CARP));
if ((sa = rti_info[RTAX_IFP]) != NULL)
if (sa->sa_family == AF_LINK) {
sdl = (struct sockaddr_dl *)sa;
- if (sdl->sdl_nlen > 0)
- strlcpy(kif->k.ifname, sdl->sdl_data,
- sizeof(kif->k.ifname));
+ if (sdl->sdl_nlen >= sizeof(kif->k.ifname))
+ memcpy(kif->k.ifname, sdl->sdl_data,
+ sizeof(kif->k.ifname) - 1);
+ else if (sdl->sdl_nlen > 0)
+ memcpy(kif->k.ifname, sdl->sdl_data,
+ sdl->sdl_nlen);
+ /* string already terminated via calloc() */
}
kif_insert(kif);