diff --git a/doc/CHANGES-staging/func_curl.txt b/doc/CHANGES-staging/func_curl.txt
new file mode 100644
index 0000000000..fa9ad97462
--- /dev/null
+++ b/doc/CHANGES-staging/func_curl.txt
@@ -0,0 +1,5 @@
+Subject: func_curl
+
+A new option, followlocation, can now be enabled with the CURLOPT()
+dialplan function. Setting this will instruct cURL to follow 3xx
+redirects, which it does not by default.
diff --git a/funcs/func_curl.c b/funcs/func_curl.c
index af54f7d0fc..fcc626a3a6 100644
--- a/funcs/func_curl.c
+++ b/funcs/func_curl.c
@@ -110,6 +110,9 @@
Number of seconds to wait for DNS to be resolved
+
+ Whether or not to follow HTTP 3xx redirects (boolean)
+
For FTP URIs, force a text transfer (boolean)
@@ -131,7 +134,9 @@
server response
- Maximum number of redirects to follow
+ Maximum number of redirects to follow. The default is -1,
+ which allows for unlimited redirects. This only makes sense when
+ followlocation is also set.
Hostname or IP address to use as a proxy server
@@ -269,6 +274,9 @@ static int parse_curlopt_key(const char *name, CURLoption *key, enum optiontype
} else if (!strcasecmp(name, "proxyuserpwd")) {
*key = CURLOPT_PROXYUSERPWD;
*ot = OT_STRING;
+ } else if (!strcasecmp(name, "followlocation")) {
+ *key = CURLOPT_FOLLOWLOCATION;
+ *ot = OT_BOOLEAN;
} else if (!strcasecmp(name, "maxredirs")) {
*key = CURLOPT_MAXREDIRS;
*ot = OT_INTEGER;
@@ -858,6 +866,7 @@ static struct ast_custom_function acf_curlopt = {
" cookie - Send cookie with request [none]\n"
" conntimeout - Number of seconds to wait for connection\n"
" dnstimeout - Number of seconds to wait for DNS response\n"
+" followlocation - Follow HTTP 3xx redirects (boolean)\n"
" ftptext - For FTP, force a text transfer (boolean)\n"
" ftptimeout - For FTP, the server response timeout\n"
" header - Retrieve header information (boolean)\n"