]> git.mxchange.org Git - friendica.git/commitdiff
Bugfix for not createable spool path
authorMichael <heluecht@pirati.ca>
Sun, 19 Feb 2017 08:23:21 +0000 (08:23 +0000)
committerMichael <heluecht@pirati.ca>
Sun, 19 Feb 2017 08:23:21 +0000 (08:23 +0000)
boot.php
include/items.php
include/spool_post.php

index 504a524ed7d321e340f48ecf07688e991ecd613f..b8e92670708836c6d5b9c376185120031e914161 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -1457,7 +1457,7 @@ class App {
                        return false;
                }
                if (!is_writable($directory)) {
-                       logger('Path "'.$temppath.'" is not writable for user '.self::systemuser(), LOGGER_DEBUG);
+                       logger('Path "'.$directory.'" is not writable for user '.self::systemuser(), LOGGER_DEBUG);
                        return false;
                }
                return true;
@@ -2367,7 +2367,7 @@ function get_itemcachepath() {
 
        $itemcache = get_config('system','itemcache');
        if (($itemcache != "") AND App::directory_usable($itemcache)) {
-               return($itemcache);
+               return $itemcache;
        }
 
        $temppath = get_temppath();
@@ -2380,7 +2380,7 @@ function get_itemcachepath() {
 
                if (App::directory_usable($itemcache)) {
                        set_config("system", "itemcache", $itemcache);
-                       return($itemcache);
+                       return $itemcache;
                }
        }
        return "";
@@ -2389,25 +2389,32 @@ function get_itemcachepath() {
 function get_lockpath() {
        $lockpath = get_config('system','lockpath');
        if (($lockpath != "") AND App::directory_usable($lockpath)) {
-               return($lockpath);
+               // We have a lock path and it is usable
+               return $lockpath;
        }
 
+       // We don't have a working preconfigured lock path, so we take the temp path.
        $temppath = get_temppath();
 
        if ($temppath != "") {
+               // To avoid any interferences with other systems we create our own directory
                $lockpath = $temppath."/lock";
-
                if (!is_dir($lockpath)) {
                        mkdir($lockpath);
-               } elseif (!App::directory_usable($lockpath)) {
-                       $lockpath = $temppath;
                }
 
                if (App::directory_usable($lockpath)) {
+                       // The new path is usable, we are happy
                        set_config("system", "lockpath", $lockpath);
-                       return($lockpath);
+                       return $lockpath;
+               } else {
+                       // We can't create a subdirectory, strange.
+                       // But the directory seems to work, so we use it but don't store it.
+                       return $temppath;
                }
        }
+
+       // Reaching this point means that the operating system is configured badly.
        return "";
 }
 
@@ -2419,50 +2426,68 @@ function get_lockpath() {
 function get_spoolpath() {
        $spoolpath = get_config('system','spoolpath');
        if (($spoolpath != "") AND App::directory_usable($spoolpath)) {
-               return($spoolpath);
+               // We have a spool path and it is usable
+               return $spoolpath;
        }
 
+       // We don't have a working preconfigured spool path, so we take the temp path.
        $temppath = get_temppath();
 
        if ($temppath != "") {
+               // To avoid any interferences with other systems we create our own directory
                $spoolpath = $temppath."/spool";
-
                if (!is_dir($spoolpath)) {
                        mkdir($spoolpath);
-               } elseif (!App::directory_usable($spoolpath)) {
-                       $spoolpath = $temppath;
                }
 
                if (App::directory_usable($spoolpath)) {
+                       // The new path is usable, we are happy
                        set_config("system", "spoolpath", $spoolpath);
-                       return($spoolpath);
+                       return $spoolpath;
+               } else {
+                       // We can't create a subdirectory, strange.
+                       // But the directory seems to work, so we use it but don't store it.
+                       return $temppath;
                }
        }
+
+       // Reaching this point means that the operating system is configured badly.
        return "";
 }
 
 function get_temppath() {
        $a = get_app();
 
-       $temppath = get_config("system","temppath");
+       $temppath = get_config("system", "temppath");
 
        if (($temppath != "") AND App::directory_usable($temppath)) {
-               return($temppath);
+               // We have a temp path and it is usable
+               return $temppath;
        }
 
+       // We don't have a working preconfigured temp path, so we take the system path.
        $temppath = sys_get_temp_dir();
-       if (($temppath != "") AND App::directory_usable($temppath)) {
-               $temppath .= "/".$a->get_hostname();
-               if (!is_dir($temppath))
-                       mkdir($temppath);
 
-               if (App::directory_usable($temppath)) {
-                       set_config("system", "temppath", $temppath);
-                       return($temppath);
+       // Check if it is usable
+       if (($temppath != "") AND App::directory_usable($temppath)) {
+               // To avoid any interferences with other systems we create our own directory
+               $new_temppath .= "/".$a->get_hostname();
+               if (!is_dir($new_temppath))
+                       mkdir($new_temppath);
+
+               if (App::directory_usable($new_temppath)) {
+                       // The new path is usable, we are happy
+                       set_config("system", "temppath", $new_temppath);
+                       return $new_temppath;
+               } else {
+                       // We can't create a subdirectory, strange.
+                       // But the directory seems to work, so we use it but don't store it.
+                       return $temppath;
                }
        }
 
-       return("");
+       // Reaching this point means that the operating system is configured badly.
+       return '';
 }
 
 /// @deprecated
index 2b6fb9a1fe046a1c5b3966dda84cb4520799dcc7..1e38e3fdb424efe24c1fc005790a82eb07c12d00 100644 (file)
@@ -857,7 +857,9 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
                }
 
                // Now we store the data in the spool directory
-               $file = 'item-'.round(microtime(true) * 10000).".msg";
+               // We use "microtime" to keep the arrival order and "mt_rand" to avoid duplicates
+               $file = 'item-'.round(microtime(true) * 10000).'-'.mt_rand().'.msg';
+
                $spool = get_spoolpath().'/'.$file;
                file_put_contents($spool, json_encode($arr));
                logger("Item wasn't stored - Item was spooled into file ".$file, LOGGER_DEBUG);
index d2c94881bd51589039fa8f55b8d58efc31bf8f56..36bcab2a5570d865a851b84283b6abbe42990132 100644 (file)
@@ -30,10 +30,24 @@ function spool_post_run($argv, $argc) {
        if (is_writable($path)){
                if ($dh = opendir($path)) {
                        while (($file = readdir($dh)) !== false) {
+
+                               // It is not named like a spool file, so we don't care.
+                               if (substr($file, 0, 5) != "item-") {
+                                       continue;
+                               }
+
                                $fullfile = $path."/".$file;
+
+                               // We don't care about directories either
                                if (filetype($fullfile) != "file") {
                                        continue;
                                }
+
+                               // We can't read or write the file? So we don't care about it.
+                               if (!is_writable($fullfile) OR !is_readable($fullfile)) {
+                                       continue;
+                               }
+
                                $arr = json_decode(file_get_contents($fullfile), true);
 
                                // If it isn't an array then it is no spool file