diff --git a/THANKS.in b/THANKS.in index 66397ad1..5dbb1b39 100644 --- a/THANKS.in +++ b/THANKS.in @@ -426,3 +426,4 @@ Eunice Remoquillo Louis Sautier Sven Hartge Alvar Penning +Michael Jeanson diff --git a/plugins/check_curl.c b/plugins/check_curl.c index ba856a11..e3e514ff 100644 --- a/plugins/check_curl.c +++ b/plugins/check_curl.c @@ -68,10 +68,6 @@ const char *email = "devel@monitoring-plugins.org"; #include -enum { - MAX_IPV4_HOSTLENGTH = 255, -}; - enum { REGS = 2, }; @@ -789,21 +785,21 @@ redir_wrapper redir(curlhelp_write_curlbuf *header_buf, const check_curl_config /* set new values for redirected request */ if (!(config.followsticky & STICKY_HOST)) { - free(working_state.server_address); + // free(working_state.server_address); working_state.server_address = strndup(new_host, MAX_IPV4_HOSTLENGTH); } if (!(config.followsticky & STICKY_PORT)) { working_state.serverPort = (unsigned short)new_port; } - free(working_state.host_name); + // free(working_state.host_name); working_state.host_name = strndup(new_host, MAX_IPV4_HOSTLENGTH); /* reset virtual port */ working_state.virtualPort = working_state.serverPort; free(new_host); - free(working_state.server_url); + // free(working_state.server_url); working_state.server_url = new_url; uriFreeUriMembersA(&uri); diff --git a/plugins/check_curl.d/check_curl_helpers.c b/plugins/check_curl.d/check_curl_helpers.c index d49d8f07..e4e7bef6 100644 --- a/plugins/check_curl.d/check_curl_helpers.c +++ b/plugins/check_curl.d/check_curl_helpers.c @@ -128,8 +128,20 @@ check_curl_configure_curl(const check_curl_static_curl_config config, char dnscache[DEFAULT_BUFFER_SIZE]; char addrstr[DEFAULT_BUFFER_SIZE / 2]; if (working_state.use_ssl && working_state.host_name != NULL) { + char *tmp_mod_address; + + /* lookup_host() requires an IPv6 address without the brackets. */ + if ((strnlen(working_state.server_address, MAX_IPV4_HOSTLENGTH) > 2) && + (working_state.server_address[0] == '[')) { + // Duplicate and strip the leading '[' + tmp_mod_address = + strndup(working_state.server_address + 1, strlen(working_state.server_address) - 2); + } else { + tmp_mod_address = working_state.server_address; + } + int res; - if ((res = lookup_host(working_state.server_address, addrstr, DEFAULT_BUFFER_SIZE / 2, + if ((res = lookup_host(tmp_mod_address, addrstr, DEFAULT_BUFFER_SIZE / 2, config.sin_family)) != 0) { die(STATE_CRITICAL, _("Unable to lookup IP address for '%s': getaddrinfo returned %d - %s"), diff --git a/plugins/check_curl.d/check_curl_helpers.h b/plugins/check_curl.d/check_curl_helpers.h index 87e45a9d..e7b80f7e 100644 --- a/plugins/check_curl.d/check_curl_helpers.h +++ b/plugins/check_curl.d/check_curl_helpers.h @@ -7,6 +7,10 @@ # include #endif +enum { + MAX_IPV4_HOSTLENGTH = 255, +}; + /* for buffers for header and body */ typedef struct { size_t buflen;