aboutsummaryrefslogtreecommitdiff
path: root/sbin
diff options
context:
space:
mode:
authorPawel Jakub Dawidek <pjd@FreeBSD.org>2011-05-18 22:43:56 +0000
committerPawel Jakub Dawidek <pjd@FreeBSD.org>2011-05-18 22:43:56 +0000
commit0855e42386b6846ae819eaae298257d2f8a70286 (patch)
treeee08afde938ea99abf978732a71f737428718d67 /sbin
parentdbe66680b0eeca111740b149fac4ed45b0fdbf09 (diff)
downloadsrc-0855e42386b6846ae819eaae298257d2f8a70286.tar.gz
src-0855e42386b6846ae819eaae298257d2f8a70286.zip
- Add support for AF_INET6 sockets for %S format character.
- Use inet_ntop(3) instead of reimplementing it. - Use %hhu for unsigned char instead of casting it to unsigned int and using %u. MFC after: 1 week
Notes
Notes: svn path=/head/; revision=222087
Diffstat (limited to 'sbin')
-rw-r--r--sbin/hastd/pjdlog.c33
1 files changed, 26 insertions, 7 deletions
diff --git a/sbin/hastd/pjdlog.c b/sbin/hastd/pjdlog.c
index 59d3ffac0023..16ecf4d9c8cc 100644
--- a/sbin/hastd/pjdlog.c
+++ b/sbin/hastd/pjdlog.c
@@ -31,8 +31,10 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
+#include <arpa/inet.h>
#include <assert.h>
#include <errno.h>
@@ -103,22 +105,39 @@ pjdlog_printf_render_sockaddr(struct __printf_io *io,
switch (ss->ss_family) {
case AF_INET:
{
+ char addr[INET_ADDRSTRLEN];
const struct sockaddr_in *sin;
- in_addr_t ip;
unsigned int port;
sin = (const struct sockaddr_in *)ss;
- ip = ntohl(sin->sin_addr.s_addr);
port = ntohs(sin->sin_port);
+ if (inet_ntop(ss->ss_family, &sin->sin_addr, addr,
+ sizeof(addr)) == NULL) {
+ PJDLOG_ABORT("inet_ntop(AF_INET) failed: %s.",
+ strerror(errno));
+ }
+ snprintf(buf, sizeof(buf), "%s:%u", addr, port);
+ break;
+ }
+ case AF_INET6:
+ {
+ char addr[INET6_ADDRSTRLEN];
+ const struct sockaddr_in6 *sin;
+ unsigned int port;
- snprintf(buf, sizeof(buf), "%u.%u.%u.%u:%u",
- ((ip >> 24) & 0xff), ((ip >> 16) & 0xff),
- ((ip >> 8) & 0xff), (ip & 0xff), port);
+ sin = (const struct sockaddr_in6 *)ss;
+ port = ntohs(sin->sin6_port);
+ if (inet_ntop(ss->ss_family, &sin->sin6_addr, addr,
+ sizeof(addr)) == NULL) {
+ PJDLOG_ABORT("inet_ntop(AF_INET6) failed: %s.",
+ strerror(errno));
+ }
+ snprintf(buf, sizeof(buf), "[%s]:%u", addr, port);
break;
}
default:
- snprintf(buf, sizeof(buf), "[unsupported family %u]",
- (unsigned int)ss->ss_family);
+ snprintf(buf, sizeof(buf), "[unsupported family %hhu]",
+ ss->ss_family);
break;
}
ret = __printf_out(io, pi, buf, strlen(buf));