Module Name: src
Committed By: christos
Date: Wed Jan 7 22:38:32 UTC 2015
Modified Files:
src/sbin/route: rtutil.c rtutil.h
Log Message:
make netname4 match the netname6 signature avoiding a NULL pointer.
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sbin/route/rtutil.c
cvs rdiff -u -r1.2 -r1.3 src/sbin/route/rtutil.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sbin/route/rtutil.c
diff -u src/sbin/route/rtutil.c:1.3 src/sbin/route/rtutil.c:1.4
--- src/sbin/route/rtutil.c:1.3 Tue Nov 11 22:34:08 2014
+++ src/sbin/route/rtutil.c Wed Jan 7 17:38:32 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: rtutil.c,v 1.3 2014/11/12 03:34:08 christos Exp $ */
+/* $NetBSD: rtutil.c,v 1.4 2015/01/07 22:38:32 christos Exp $ */
/* $OpenBSD: show.c,v 1.1 2006/05/27 19:16:37 claudio Exp $ */
/*
@@ -552,21 +552,27 @@ routename6(const struct sockaddr_in6 *si
* The address is assumed to be that of a net or subnet, not a host.
*/
char *
-netname4(in_addr_t in, in_addr_t mask, int flags)
+netname4(const struct sockaddr_in* sa4, const struct sockaddr_in *mask, int flags)
{
const char *cp = NULL;
struct netent *np = NULL;
int mbits;
+ in_addr_t in = sa4->sin_addr.s_addr;
+
+ if (mask) {
+ in_addr_t m = mask->sin_addr.s_addr ;
+ m = ntohl(m);
+ mbits = m ? 33 - ffs(m) : 0;
+ } else
+ mbits = 0;
in = ntohl(in);
- mask = ntohl(mask);
- if (!(flags & RT_NFLAG) && in != INADDR_ANY) {
+ if (in == INADDR_ANY && !mbits)
+ cp = "default";
+ else if (!(flags & RT_NFLAG) && in != INADDR_ANY) {
if ((np = getnetbyaddr(in, AF_INET)) != NULL)
cp = np->n_name;
}
- mbits = mask ? 33 - ffs(mask) : 0;
- if (in == INADDR_ANY && !mbits)
- cp = "default";
if (cp)
strlcpy(line, cp, sizeof(line));
#define C(x) ((x) & 0xff)
@@ -582,7 +588,7 @@ netname4(in_addr_t in, in_addr_t mask, i
snprintf(line, sizeof(line), "%u.%u.%u.%u/%d", C(in >> 24),
C(in >> 16), C(in >> 8), C(in), mbits);
#undef C
- return (line);
+ return line;
}
#ifdef INET6
@@ -693,8 +699,8 @@ netname(const struct sockaddr *sa, const
switch (sa->sa_family) {
case AF_INET:
- return netname4(((const struct sockaddr_in *)sa)->sin_addr.s_addr,
- ((const struct sockaddr_in *)mask)->sin_addr.s_addr, flags);
+ return netname4((const struct sockaddr_in *)sa,
+ (const struct sockaddr_in *)mask, flags);
#ifdef INET6
case AF_INET6:
return netname6((const struct sockaddr_in6 *)sa,
Index: src/sbin/route/rtutil.h
diff -u src/sbin/route/rtutil.h:1.2 src/sbin/route/rtutil.h:1.3
--- src/sbin/route/rtutil.h:1.2 Tue Nov 11 22:34:08 2014
+++ src/sbin/route/rtutil.h Wed Jan 7 17:38:32 2015
@@ -53,7 +53,7 @@ char *routename6(const struct sockaddr_i
char *netname6(const struct sockaddr_in6 *, const struct sockaddr_in6 *, int);
#endif
char *netname(const struct sockaddr *, const struct sockaddr *, int);
-char *netname4(in_addr_t, in_addr_t, int);
+char *netname4(const struct sockaddr_in *, const struct sockaddr_in *, int);
char *mpls_ntoa(const struct sockaddr *);
char *any_ntoa(const struct sockaddr *);