diff options
author | Andre Klärner <kandre@ak-online.be> | 2024-11-29 10:34:16 +0100 |
---|---|---|
committer | Sven Nierlein <sven@nierlein.org> | 2024-12-02 20:48:24 +0100 |
commit | e7dbfd42231754b0258f2f92088caba7de3ee9d8 (patch) | |
tree | 1732cc2c6aac9540d6ee4435ffaa9b8ed9443055 | |
parent | afb1734ec488b72e17b3fe8d14d9a0473e1449a4 (diff) | |
download | monitoring-plugins-e7dbfd42231754b0258f2f92088caba7de3ee9d8.tar.gz |
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.
-rw-r--r-- | plugins/check_curl.c | 8 |
1 files changed, 7 insertions, 1 deletions
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) { | |||
818 | 818 | ||
819 | /* cookie handling */ | 819 | /* cookie handling */ |
820 | if (cookie_jar_file != NULL) { | 820 | if (cookie_jar_file != NULL) { |
821 | handle_curl_option_return_code(curl_easy_setopt(curl, CURLOPT_COOKIEJAR, cookie_jar_file), "CURLOPT_COOKIEJAR"); | 821 | /* enable reading cookies from a file, and if the filename is an empty string, only enable the curl cookie engine */ |
822 | handle_curl_option_return_code(curl_easy_setopt(curl, CURLOPT_COOKIEFILE, cookie_jar_file), "CURLOPT_COOKIEFILE"); | 822 | handle_curl_option_return_code(curl_easy_setopt(curl, CURLOPT_COOKIEFILE, cookie_jar_file), "CURLOPT_COOKIEFILE"); |
823 | /* now enable saving cookies to a file, but only if the filename is not an empty string, since writing it would fail */ | ||
824 | if (*cookie_jar_file) | ||
825 | handle_curl_option_return_code(curl_easy_setopt(curl, CURLOPT_COOKIEJAR, cookie_jar_file), "CURLOPT_COOKIEJAR"); | ||
823 | } | 826 | } |
824 | 827 | ||
825 | /* do the request */ | 828 | /* do the request */ |
@@ -2011,6 +2014,9 @@ void print_help(void) { | |||
2011 | printf(" %s\n", _("Send HAProxy proxy protocol v1 header (CURLOPT_HAPROXYPROTOCOL).")); | 2014 | printf(" %s\n", _("Send HAProxy proxy protocol v1 header (CURLOPT_HAPROXYPROTOCOL).")); |
2012 | printf(" %s\n", "--cookie-jar=FILE"); | 2015 | printf(" %s\n", "--cookie-jar=FILE"); |
2013 | printf(" %s\n", _("Store cookies in the cookie jar and send them out when requested.")); | 2016 | printf(" %s\n", _("Store cookies in the cookie jar and send them out when requested.")); |
2017 | printf(" %s\n", _("Specify an empty string as FILE to enable curl's cookie engine without saving")); | ||
2018 | printf(" %s\n", _("the cookies to disk. Only enabling the engine without saving to disk requires")); | ||
2019 | printf(" %s\n", _("handling multiple requests internally to curl, so use it with --onredirect=curl")); | ||
2014 | printf("\n"); | 2020 | printf("\n"); |
2015 | 2021 | ||
2016 | printf(UT_WARN_CRIT); | 2022 | printf(UT_WARN_CRIT); |