summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Weiss <hweiss@users.sourceforge.net>2008-01-07 02:04:17 +0000
committerHolger Weiss <hweiss@users.sourceforge.net>2008-01-07 02:04:17 +0000
commitbf8ce4d2a28dc692c8947103522e9ccd23c21c10 (patch)
treebda394bfdad597e772d9f595b737eab44fbc5ff9
parent59a2d41d63e3dd766ee9c8fcd6d086d88f6ac417 (diff)
downloadmonitoring-plugins-bf8ce4d2a28dc692c8947103522e9ccd23c21c10.tar.gz
Support "[IPv6]" address syntax.
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1893 f882894a-f735-0410-b71e-b25c423dba1c
-rw-r--r--plugins/netutils.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/plugins/netutils.c b/plugins/netutils.c
index 7bf22543..09a73e45 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)
168 struct addrinfo hints; 168 struct addrinfo hints;
169 struct addrinfo *r, *res; 169 struct addrinfo *r, *res;
170 struct sockaddr_un su; 170 struct sockaddr_un su;
171 char port_str[6]; 171 char port_str[6], host[MAX_HOST_ADDRESS_LENGTH];
172 size_t len;
172 int socktype, result; 173 int socktype, result;
173 174
174 socktype = (proto == IPPROTO_UDP) ? SOCK_DGRAM : SOCK_STREAM; 175 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)
180 hints.ai_protocol = proto; 181 hints.ai_protocol = proto;
181 hints.ai_socktype = socktype; 182 hints.ai_socktype = socktype;
182 183
184 len = strlen (host_name);
185 /* check for an [IPv6] address (and strip the brackets) */
186 if (len >= 2 && host_name[0] == '[' && host_name[len - 1] == ']') {
187 host_name++;
188 len -= 2;
189 }
190 if (len >= sizeof(host))
191 return STATE_UNKNOWN;
192 memcpy (host, host_name, len);
193 host[len] = '\0';
183 snprintf (port_str, sizeof (port_str), "%d", port); 194 snprintf (port_str, sizeof (port_str), "%d", port);
184 result = getaddrinfo (host_name, port_str, &hints, &res); 195 result = getaddrinfo (host, port_str, &hints, &res);
185 196
186 if (result != 0) { 197 if (result != 0) {
187 printf ("%s\n", gai_strerror (result)); 198 printf ("%s\n", gai_strerror (result));