From bf8ce4d2a28dc692c8947103522e9ccd23c21c10 Mon Sep 17 00:00:00 2001 From: Holger Weiss Date: Mon, 7 Jan 2008 02:04:17 +0000 Subject: [PATCH] Support "[IPv6]" address syntax. git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1893 f882894a-f735-0410-b71e-b25c423dba1c --- plugins/netutils.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/plugins/netutils.c b/plugins/netutils.c index 7bf2254..09a73e4 100644 --- a/plugins/netutils.c +++ b/plugins/netutils.c @@ -168,7 +168,8 @@ np_net_connect (const char *host_name, int port, int *sd, int proto) struct addrinfo hints; struct addrinfo *r, *res; struct sockaddr_un su; - char port_str[6]; + char port_str[6], host[MAX_HOST_ADDRESS_LENGTH]; + size_t len; int socktype, result; socktype = (proto == IPPROTO_UDP) ? SOCK_DGRAM : SOCK_STREAM; @@ -180,8 +181,18 @@ np_net_connect (const char *host_name, int port, int *sd, int proto) hints.ai_protocol = proto; hints.ai_socktype = socktype; + len = strlen (host_name); + /* check for an [IPv6] address (and strip the brackets) */ + if (len >= 2 && host_name[0] == '[' && host_name[len - 1] == ']') { + host_name++; + len -= 2; + } + if (len >= sizeof(host)) + return STATE_UNKNOWN; + memcpy (host, host_name, len); + host[len] = '\0'; snprintf (port_str, sizeof (port_str), "%d", port); - result = getaddrinfo (host_name, port_str, &hints, &res); + result = getaddrinfo (host, port_str, &hints, &res); if (result != 0) { printf ("%s\n", gai_strerror (result)); -- 2.30.2