summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.sbin/ppp/ncpaddr.c23
-rw-r--r--usr.sbin/ppp/route.c2
2 files changed, 20 insertions, 5 deletions
diff --git a/usr.sbin/ppp/ncpaddr.c b/usr.sbin/ppp/ncpaddr.c
index aa99bda11b5c..943db3dd9379 100644
--- a/usr.sbin/ppp/ncpaddr.c
+++ b/usr.sbin/ppp/ncpaddr.c
@@ -591,8 +591,13 @@ ncprange_sethost(struct ncprange *range, const struct ncpaddr *from)
case AF_INET:
range->ncprange_family = AF_INET;
range->ncprange_ip4addr = from->ncpaddr_ip4addr;
- range->ncprange_ip4mask.s_addr = INADDR_BROADCAST;
- range->ncprange_ip4width = 32;
+ if (from->ncpaddr_ip4addr.s_addr == INADDR_ANY) {
+ range->ncprange_ip4mask.s_addr = INADDR_ANY;
+ range->ncprange_ip4width = 0;
+ } else {
+ range->ncprange_ip4mask.s_addr = INADDR_BROADCAST;
+ range->ncprange_ip4width = 32;
+ }
break;
#ifndef NOINET6
@@ -654,8 +659,13 @@ ncprange_setip4host(struct ncprange *range, struct in_addr from)
{
range->ncprange_family = AF_INET;
range->ncprange_ip4addr = from;
- range->ncprange_ip4mask.s_addr = INADDR_BROADCAST;
- range->ncprange_ip4width = 32;
+ if (from.s_addr == INADDR_ANY) {
+ range->ncprange_ip4mask.s_addr = INADDR_ANY;
+ range->ncprange_ip4width = 0;
+ } else {
+ range->ncprange_ip4mask.s_addr = INADDR_BROADCAST;
+ range->ncprange_ip4width = 32;
+ }
}
void
@@ -693,7 +703,10 @@ ncprange_setsa(struct ncprange *range, const struct sockaddr *host,
case AF_INET:
range->ncprange_family = AF_INET;
range->ncprange_ip4addr = host4->sin_addr;
- if (mask4) {
+ if (host4->sin_addr.s_addr == INADDR_ANY) {
+ range->ncprange_ip4mask.s_addr = INADDR_ANY;
+ range->ncprange_ip4width = 0;
+ } else if (mask4 && mask4->sin_family == AF_INET) {
range->ncprange_ip4mask.s_addr = mask4->sin_addr.s_addr;
range->ncprange_ip4width = mask42bits(mask4->sin_addr);
} else {
diff --git a/usr.sbin/ppp/route.c b/usr.sbin/ppp/route.c
index 2ff5ee3ae704..76ae24efd8f7 100644
--- a/usr.sbin/ppp/route.c
+++ b/usr.sbin/ppp/route.c
@@ -317,6 +317,8 @@ route_ParseHdr(struct rt_msghdr *rtm, struct sockaddr *sa[RTAX_MAX])
if (rtm->rtm_addrs & (1 << rtax)) {
sa[rtax] = (struct sockaddr *)wp;
wp += ROUNDUP(sa[rtax]->sa_len);
+ if (sa[rtax]->sa_family == 0)
+ sa[rtax] = NULL; /* ??? */
} else
sa[rtax] = NULL;
}