diff options
author | Timo Teräs <timo.teras@iki.fi> | 2015-05-23 11:08:38 +0300 |
---|---|---|
committer | David Lamparter <equinox@opensourcerouting.org> | 2015-06-01 16:31:10 +0200 |
commit | 53009d387a633997b16d32224b50451b5c81b61a (patch) | |
tree | 171f2b9a92011209c353d9173133ff10907bec4b /lib | |
parent | 3293bc280f15d8e3c04e0bf9b0a8d54d342a87a9 (diff) | |
download | quagga-53009d387a633997b16d32224b50451b5c81b61a.tar.bz2 quagga-53009d387a633997b16d32224b50451b5c81b61a.tar.xz |
lib: make sockunion2str safer to use
It's mostly used for logging, and the return value is never
checked, so try to make it valid.
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sockunion.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/lib/sockunion.c b/lib/sockunion.c index 727730af..492c36ec 100644 --- a/lib/sockunion.c +++ b/lib/sockunion.c @@ -166,13 +166,20 @@ str2sockunion (const char *str, union sockunion *su) const char * sockunion2str (const union sockunion *su, char *buf, size_t len) { - if (su->sa.sa_family == AF_INET) - return inet_ntop (AF_INET, &su->sin.sin_addr, buf, len); + switch (sockunion_family(su)) + { + case AF_UNSPEC: + snprintf (buf, len, "(unspec)"); + return buf; + case AF_INET: + return inet_ntop (AF_INET, &su->sin.sin_addr, buf, len); #ifdef HAVE_IPV6 - else if (su->sa.sa_family == AF_INET6) - return inet_ntop (AF_INET6, &su->sin6.sin6_addr, buf, len); + case AF_INET6: + return inet_ntop (AF_INET6, &su->sin6.sin6_addr, buf, len); #endif /* HAVE_IPV6 */ - return NULL; + } + snprintf (buf, len, "(af %d)", sockunion_family(su)); + return buf; } union sockunion * |