1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
--- a/Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java
+++ b/Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java
@@ -751,3 +751,4 @@
- File serverLogFile = new File(serverRoot, "server.log");
+ File serverLogFile = new File(
+ System.getProperty("ghidra.server.logdir", serverRoot.getPath()), "server.log");
Application.initializeLogging(serverLogFile, serverLogFile);
--- a/Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/PdbLog.java
+++ b/Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/PdbLog.java
@@ -24,2 +24,3 @@
import ghidra.util.Msg;
+import utility.application.ApplicationUtilities;
@@ -201,3 +202,4 @@
*/
- File logFile = new File(Application.getUserSettingsDirectory(), "pdb.analyzer.log");
+ File logFile = new File(ApplicationUtilities.getDefaultUserStateDir(
+ Application.getApplicationLayout().getApplicationProperties()), "pdb.analyzer.log");
if (logFile.exists()) {
--- a/Ghidra/Framework/Generic/src/main/java/ghidra/framework/Application.java
+++ b/Ghidra/Framework/Generic/src/main/java/ghidra/framework/Application.java
@@ -151,5 +151,5 @@
* @param logFile application log file, if null the default <i>application.log</i> will be stored
- * within the user's application settings directory
+ * within the user's application state directory
* @param scriptLogFile scripting log file, if null the default <i>script.log</i> will be stored
- * within the user's application settings directory
+ * within the user's application state directory
* @throws AssertException if Application has not yet been initialized, or logging
@@ -164,7 +164,16 @@
- if (logFile == null) {
- logFile = new File(app.layout.getUserSettingsDir(), "application.log");
- }
- if (scriptLogFile == null) {
- scriptLogFile = new File(app.layout.getUserSettingsDir(), "script.log");
+ if (logFile == null || scriptLogFile == null) {
+ try {
+ File logDir = ApplicationUtilities.getDefaultUserStateDir(
+ app.layout.getApplicationProperties());
+ if (logFile == null) {
+ logFile = new File(logDir, "application.log");
+ }
+ if (scriptLogFile == null) {
+ scriptLogFile = new File(logDir, "script.log");
+ }
+ }
+ catch (IOException e) {
+ throw new UncheckedIOException("Failed to create log directory", e);
+ }
}
--- a/Ghidra/Framework/Utility/src/main/java/utility/application/ApplicationUtilities.java
+++ b/Ghidra/Framework/Utility/src/main/java/utility/application/ApplicationUtilities.java
@@ -218,3 +218,3 @@
case WINDOWS -> new File(getEnvFile("LOCALAPPDATA", true), appName);
- case LINUX -> new File("/var/tmp/" + userDirName);
+ case LINUX -> new File(getJavaUserHomeDir(), ".cache/" + appName);
case FREE_BSD -> new File("/var/tmp/" + userDirName);
@@ -230,2 +230,13 @@
}
+ }
+
+ public static File getDefaultUserStateDir(ApplicationProperties applicationProperties)
+ throws IOException {
+ File root = getEnvFile(XdgUtils.XDG_STATE_HOME, false);
+ if (root == null) {
+ root = new File(getJavaUserHomeDir(), ".local/state");
+ }
+ ApplicationIdentifier id = new ApplicationIdentifier(applicationProperties);
+ return createDir(new File(root,
+ getUserSpecificDirName(root, id.getApplicationName()) + "/" + id));
}
--- a/Ghidra/RuntimeScripts/server/server.conf
+++ b/Ghidra/RuntimeScripts/server/server.conf
@@ -13,4 +13,5 @@
-# Initial Working Directory (i.e., absolute installation directory path)
-wrapper.working.dir=${ghidra_home}
+# Working directory.
+wrapper.working.dir=@GENTOO_EPREFIX@/var/lib/ghidra
+wrapper.cache=@GENTOO_EPREFIX@/var/cache/ghidra
@@ -84,2 +85,4 @@
#wrapper.java.additional.10=-Dghidra.password=
+
+wrapper.java.additional.22=-Dghidra.server.logdir=@GENTOO_EPREFIX@/var/log/ghidra
@@ -148,3 +151,3 @@
-ghidra.repositories.dir=./repositories
+ghidra.repositories.dir=@GENTOO_EPREFIX@/var/lib/ghidra/repositories
@@ -236,3 +239,3 @@
# Log file to use for wrapper output logging.
-wrapper.logfile=wrapper.log
+wrapper.logfile=@GENTOO_EPREFIX@/var/log/ghidra/wrapper.log
--- a/Ghidra/RuntimeScripts/support/launch.properties
+++ b/Ghidra/RuntimeScripts/support/launch.properties
@@ -153,3 +153,3 @@
# - Windows: %LOCALAPPDATA%\<application>
-# - Linux: /var/tmp/<user>-<application>
+# - Linux: $HOME/.cache/<application>
# - macOS: /var/tmp/<user>-<application>
--- a/Ghidra/RuntimeScripts/server/ghidraSvr
+++ b/Ghidra/RuntimeScripts/server/ghidraSvr
@@ -48,3 +48,3 @@
echo
- echo -e "ERROR: $1" >> "${GHIDRA_HOME}/wrapper.log"
+ echo -e "ERROR: $1" >> "@GENTOO_EPREFIX@/var/log/ghidra/wrapper.log"
exit 1
|