aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2017-06-26 10:29:17 +0200
committerTobias Brunner <tobias@strongswan.org>2017-07-27 13:15:43 +0200
commit67402ec77bd3e4b585f3f4fc906c974e68772c77 (patch)
treee7f794abfc1cba899ece4cabc0ef636227c3b78b
parent791cfe82a109100b4ff2e79f09b8a8e277f6fbae (diff)
downloadstrongswan-67402ec77bd3e4b585f3f4fc906c974e68772c77.tar.bz2
strongswan-67402ec77bd3e4b585f3f4fc906c974e68772c77.tar.xz
curl: Enable following redirects
The maximum number of redirects can be limited. The functionality can also be disabled. Fixes #2366.
-rw-r--r--conf/Makefile.am1
-rw-r--r--conf/plugins/curl.opt3
-rw-r--r--src/libstrongswan/plugins/curl/curl_fetcher.c9
3 files changed, 13 insertions, 0 deletions
diff --git a/conf/Makefile.am b/conf/Makefile.am
index de21103e3..87319db22 100644
--- a/conf/Makefile.am
+++ b/conf/Makefile.am
@@ -36,6 +36,7 @@ plugins = \
plugins/bypass-lan.opt \
plugins/certexpire.opt \
plugins/coupling.opt \
+ plugins/curl.opt \
plugins/dhcp.opt \
plugins/dnscert.opt \
plugins/duplicheck.opt \
diff --git a/conf/plugins/curl.opt b/conf/plugins/curl.opt
new file mode 100644
index 000000000..90efa12f4
--- /dev/null
+++ b/conf/plugins/curl.opt
@@ -0,0 +1,3 @@
+charon.plugins.curl.redir = -1
+ Maximum number of redirects followed by the plugin, set to 0 to disable
+ following redirects, set to -1 for no limit.
diff --git a/src/libstrongswan/plugins/curl/curl_fetcher.c b/src/libstrongswan/plugins/curl/curl_fetcher.c
index 541d2a2f3..b52b35ba0 100644
--- a/src/libstrongswan/plugins/curl/curl_fetcher.c
+++ b/src/libstrongswan/plugins/curl/curl_fetcher.c
@@ -58,6 +58,11 @@ struct private_curl_fetcher_t {
* Timeout for a transfer
*/
long timeout;
+
+ /**
+ * Maximum number of redirects to follow
+ */
+ long redir;
};
/**
@@ -116,6 +121,8 @@ METHOD(fetcher_t, fetch, status_t,
curl_easy_setopt(this->curl, CURLOPT_TIMEOUT, this->timeout);
}
curl_easy_setopt(this->curl, CURLOPT_CONNECTTIMEOUT, CONNECT_TIMEOUT);
+ curl_easy_setopt(this->curl, CURLOPT_FOLLOWLOCATION, TRUE);
+ curl_easy_setopt(this->curl, CURLOPT_MAXREDIRS, this->redir);
curl_easy_setopt(this->curl, CURLOPT_WRITEFUNCTION, (void*)curl_cb);
curl_easy_setopt(this->curl, CURLOPT_WRITEDATA, &data);
if (this->headers)
@@ -260,6 +267,8 @@ curl_fetcher_t *curl_fetcher_create()
},
.curl = curl_easy_init(),
.cb = fetcher_default_callback,
+ .redir = lib->settings->get_int(lib->settings, "%s.plugins.curl.redir",
+ -1, lib->ns),
);
if (!this->curl)