[monitoring-plugins] check_curl: enable internal cookie handling

Sven Nierlein git at monitoring-plugins.org
Wed Dec 25 19:50:11 CET 2024


    Module: monitoring-plugins
    Branch: master
    Commit: e7dbfd42231754b0258f2f92088caba7de3ee9d8
    Author: Andre Klärner <kandre at ak-online.be>
 Committer: Sven Nierlein <sven at nierlein.org>
      Date: Fri Nov 29 10:34:16 2024 +0100
       URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=e7dbfd42

check_curl: enable internal cookie handling

This enables us to enable curl cookie engine by specifying an empty
filename as the cookie jar file.

This works, since curl's CURLOPT_COOKIEFILE option allows passing an
empty string as filename, which it interprets as a request to enable the
cookie processing. But since CURLOPT_COOKIEJAR would now attempt to
write to a file named by an empty filename, it would break again (or at
least produce a warning in verbose output).

Overall this is allows to handle checking URLs with cookie based
sessions without persisting the cookies to disk, by using the
curl-internal redirect following.

---

 plugins/check_curl.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/plugins/check_curl.c b/plugins/check_curl.c
index ef7d4ee4..748201e8 100644
--- a/plugins/check_curl.c
+++ b/plugins/check_curl.c
@@ -818,8 +818,11 @@ int check_http(void) {
 
 	/* cookie handling */
 	if (cookie_jar_file != NULL) {
-		handle_curl_option_return_code(curl_easy_setopt(curl, CURLOPT_COOKIEJAR, cookie_jar_file), "CURLOPT_COOKIEJAR");
+		/* enable reading cookies from a file, and if the filename is an empty string, only enable the curl cookie engine */
 		handle_curl_option_return_code(curl_easy_setopt(curl, CURLOPT_COOKIEFILE, cookie_jar_file), "CURLOPT_COOKIEFILE");
+		/* now enable saving cookies to a file, but only if the filename is not an empty string, since writing it would fail */
+		if (*cookie_jar_file)
+			handle_curl_option_return_code(curl_easy_setopt(curl, CURLOPT_COOKIEJAR, cookie_jar_file), "CURLOPT_COOKIEJAR");
 	}
 
 	/* do the request */
@@ -2011,6 +2014,9 @@ void print_help(void) {
 	printf("    %s\n", _("Send HAProxy proxy protocol v1 header (CURLOPT_HAPROXYPROTOCOL)."));
 	printf(" %s\n", "--cookie-jar=FILE");
 	printf("    %s\n", _("Store cookies in the cookie jar and send them out when requested."));
+	printf("    %s\n", _("Specify an empty string as FILE to enable curl's cookie engine without saving"));
+	printf("    %s\n", _("the cookies to disk. Only enabling the engine without saving to disk requires"));
+	printf("    %s\n", _("handling multiple requests internally to curl, so use it with --onredirect=curl"));
 	printf("\n");
 
 	printf(UT_WARN_CRIT);



More information about the Commits mailing list