From 4c46702672631c0cf84067d6f2c55b3bfda1db6f Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 19 Nov 2015 20:05:17 +0300 Subject: drop support for (obsolete, removed from recent php versions) php safe_mode setting remove ugly hacks for curl + open_basedir combination breaking support for http redirects --- plugins/af_unburn/init.php | 59 +++------------------------------------------- 1 file changed, 3 insertions(+), 56 deletions(-) mode change 100644 => 100755 plugins/af_unburn/init.php (limited to 'plugins/af_unburn/init.php') diff --git a/plugins/af_unburn/init.php b/plugins/af_unburn/init.php old mode 100644 new mode 100755 index 5c9bc1387..593038871 --- a/plugins/af_unburn/init.php +++ b/plugins/af_unburn/init.php @@ -17,23 +17,19 @@ class Af_Unburn extends Plugin { function hook_article_filter($article) { $owner_uid = $article["owner_uid"]; - if (!function_exists("curl_init")) + if (!function_exists("curl_init") || ini_get("open_basedir")) return $article; if ((strpos($article["link"], "feedproxy.google.com") !== FALSE || strpos($article["link"], "/~r/") !== FALSE || strpos($article["link"], "feedsportal.com") !== FALSE)) { - if (ini_get("safe_mode") || ini_get("open_basedir")) { - $ch = curl_init(geturl($article["link"])); - } else { - $ch = curl_init($article["link"]); - } + $ch = curl_init($article["link"]); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, !ini_get("safe_mode") && !ini_get("open_basedir")); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_USERAGENT, SELF_USER_AGENT); if (defined('_CURL_HTTP_PROXY')) { @@ -76,55 +72,6 @@ class Af_Unburn extends Plugin { return $article; } - function geturl($url){ - - (function_exists('curl_init')) ? '' : die('cURL Must be installed for geturl function to work. Ask your host to enable it or uncomment extension=php_curl.dll in php.ini'); - - $curl = curl_init(); - $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,"; - $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; - $header[] = "Cache-Control: max-age=0"; - $header[] = "Connection: keep-alive"; - $header[] = "Keep-Alive: 300"; - $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; - $header[] = "Accept-Language: en-us,en;q=0.5"; - $header[] = "Pragma: "; - - curl_setopt($curl, CURLOPT_URL, $url); - curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0 Firefox/5.0'); - curl_setopt($curl, CURLOPT_HTTPHEADER, $header); - curl_setopt($curl, CURLOPT_HEADER, true); - curl_setopt($curl, CURLOPT_REFERER, $url); - curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate'); - curl_setopt($curl, CURLOPT_AUTOREFERER, true); - curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); - //curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); //CURLOPT_FOLLOWLOCATION Disabled... - curl_setopt($curl, CURLOPT_TIMEOUT, 60); - - $html = curl_exec($curl); - - $status = curl_getinfo($curl); - curl_close($curl); - - if($status['http_code']!=200){ - if($status['http_code'] == 301 || $status['http_code'] == 302) { - list($header) = explode("\r\n\r\n", $html, 2); - $matches = array(); - preg_match("/(Location:|URI:)[^(\n)]*/", $header, $matches); - $url = trim(str_replace($matches[1],"",$matches[0])); - $url_parsed = parse_url($url); - return (isset($url_parsed))? geturl($url):''; - } - $oline=''; - foreach($status as $key=>$eline){$oline.='['.$key.']'.$eline.' ';} - $line =$oline." \r\n ".$url."\r\n-----------------\r\n"; - $handle = @fopen('./curl.error.log', 'a'); - fwrite($handle, $line); - return FALSE; - } - return $url; - } - function api_version() { return 2; } -- cgit v1.2.3-54-g00ecf From aa03bac42490673b4cd027c779655a027b1dd0fc Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Fri, 20 Nov 2015 13:34:52 +0300 Subject: allow NO_CURL to disable several CURL-related checks in plugins af_readability: skip http content-type checking when open_basedir is enabled --- install/index.php | 4 ++++ plugins/af_readability/init.php | 6 ++++-- plugins/af_redditimgur/init.php | 2 +- plugins/af_unburn/init.php | 2 +- plugins/af_zz_imgsetsizes/init.php | 3 ++- 5 files changed, 12 insertions(+), 5 deletions(-) (limited to 'plugins/af_unburn/init.php') diff --git a/install/index.php b/install/index.php index 959dc6c0e..74ea65652 100755 --- a/install/index.php +++ b/install/index.php @@ -325,6 +325,10 @@ array_push($notices, "It is highly recommended to enable support for CURL in PHP."); } + if (function_exists("curl_init") && ini_get("open_basedir")) { + array_push($notices, "CURL and open_basedir combination breaks support for HTTP redirects. See the FAQ for more information."); + } + if (count($notices) > 0) { print_notice("Configuration check succeeded with minor problems:"); diff --git a/plugins/af_readability/init.php b/plugins/af_readability/init.php index 6216d510a..675e5c5d5 100755 --- a/plugins/af_readability/init.php +++ b/plugins/af_readability/init.php @@ -100,13 +100,15 @@ class Af_Readability extends Plugin { if (!class_exists("Readability")) require_once(dirname(dirname(__DIR__)). "/lib/readability/Readability.php"); - if (function_exists("curl_init")) { + if (!defined('NO_CURL') && function_exists('curl_init') && !ini_get("open_basedir")) { + $ch = curl_init($article["link"]); + curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, !ini_get("open_basedir")); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_USERAGENT, SELF_USER_AGENT); @$result = curl_exec($ch); diff --git a/plugins/af_redditimgur/init.php b/plugins/af_redditimgur/init.php index f99941477..3ff960729 100755 --- a/plugins/af_redditimgur/init.php +++ b/plugins/af_redditimgur/init.php @@ -244,7 +244,7 @@ class Af_RedditImgur extends Plugin { $found = $this->inline_stuff($article, $doc, $xpath); - if (function_exists("curl_init") && !$found && $this->host->get($this, "enable_readability") && + if (!defined('NO_CURL') && function_exists("curl_init") && !$found && $this->host->get($this, "enable_readability") && mb_strlen(strip_tags($article["content"])) <= 150) { if (!class_exists("Readability")) require_once(dirname(dirname(__DIR__)). "/lib/readability/Readability.php"); diff --git a/plugins/af_unburn/init.php b/plugins/af_unburn/init.php index 593038871..263997dbf 100755 --- a/plugins/af_unburn/init.php +++ b/plugins/af_unburn/init.php @@ -17,7 +17,7 @@ class Af_Unburn extends Plugin { function hook_article_filter($article) { $owner_uid = $article["owner_uid"]; - if (!function_exists("curl_init") || ini_get("open_basedir")) + if (defined('NO_CURL') || !function_exists("curl_init") || ini_get("open_basedir")) return $article; if ((strpos($article["link"], "feedproxy.google.com") !== FALSE || diff --git a/plugins/af_zz_imgsetsizes/init.php b/plugins/af_zz_imgsetsizes/init.php index d71ec096e..96afbbfe0 100644 --- a/plugins/af_zz_imgsetsizes/init.php +++ b/plugins/af_zz_imgsetsizes/init.php @@ -18,7 +18,8 @@ class Af_Zz_ImgSetSizes extends Plugin { function hook_article_filter($article) { - $owner_uid = $article["owner_uid"]; + if (defined('NO_CURL') || !function_exists("curl_init")) + return $article; $charset_hack = ' -- cgit v1.2.3-54-g00ecf