Use /tmp for run dir when home is not writable
authorMathieu Baudier <mbaudier@argeo.org>
Wed, 18 Oct 2023 11:48:03 +0000 (13:48 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Wed, 18 Oct 2023 11:48:03 +0000 (13:48 +0200)
org.argeo.cms/src/org/argeo/cms/util/OS.java

index 56a5fdfd46d3691704ca15d886ba2ba6dec96a55..e72ad252a48d1de1b836e65560e74c3de782e578 100644 (file)
@@ -1,6 +1,7 @@
 package org.argeo.cms.util;
 
 import java.io.File;
+import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
@@ -62,10 +63,15 @@ public class OS {
                        // TODO support multiple names
                        runDir = Paths.get(xdgRunDir);
                } else {
-                       if (System.getProperty("user.name").equals("root")) {
+                       String username = System.getProperty("user.name");
+                       if (username.equals("root")) {
                                runDir = Paths.get("/run");
                        } else {
                                runDir = Paths.get(System.getProperty("user.home"), ".cache/argeo");
+                               if (!Files.isWritable(runDir)) {
+                                       // typically, dameon's home (/usr/sbin) is not writable
+                                       runDir = Paths.get("/tmp/" + username + "/run");
+                               }
                        }
                }
                return runDir;