Small patch for php safe mode

Development-related discussion, including bundled plugins
User avatar
HeikoAdams
Bear Rating Master
Bear Rating Master
Posts: 101
Joined: 19 Mar 2013, 00:17

Small patch for php safe mode

Postby HeikoAdams » 19 Mar 2013, 00:24

Hi there,
I've made some small modifications to ttrss to fix a problem if safe mode is activated. The only affected file is the includes/functions.php.

Since safe mode blocks CURLOPT_FOLLOWLOCATION the following function needs to be added:

Code: Select all

   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_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, $referer):'';
         }
         $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;
   }

The next step is to modify line 338 to look like this:

Code: Select all

$ch = curl_init(geturl($url));

That's all

User avatar
fox
^ me reading your posts ^
Posts: 6318
Joined: 27 Aug 2005, 22:53
Location: Saint-Petersburg, Russia
Contact:

Re: Small patch for php safe mode

Postby fox » 19 Mar 2013, 00:38

I'm not sure if that's the only thing that safe mode breaks, but thanks. Can you make that into a pull request?

User avatar
HeikoAdams
Bear Rating Master
Bear Rating Master
Posts: 101
Joined: 19 Mar 2013, 00:17

Re: Small patch for php safe mode

Postby HeikoAdams » 19 Mar 2013, 00:49

This is the only problem I noticed in the error-logs.

I've attached my modifications as a patch
Attachments
unburn_safe_mode.patch
(2.59 KiB) Downloaded 93 times
ttrss_safe_mode.patch
(2.82 KiB) Downloaded 96 times

User avatar
fox
^ me reading your posts ^
Posts: 6318
Joined: 27 Aug 2005, 22:53
Location: Saint-Petersburg, Russia
Contact:

Re: Small patch for php safe mode

Postby fox » 19 Mar 2013, 01:11



Return to “Development”

Who is online

Users browsing this forum: No registered users and 1 guest