xref: /OK3568_Linux_fs/buildroot/package/softether/0003-use-fhs-install-directories.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunFrom b9420c3bfc2a8b9d35d0c8e5f6849007c2bc21fa Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Darik Horn <dajhorn@vanadac.com>
3*4882a593SmuzhiyunDate: Mon, 14 Apr 2014 13:22:24 -0400
4*4882a593SmuzhiyunSubject: [PATCH] Use FHS installation directories.
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunInstall to `/usr/sbin`, `/usr/lib`, and `/var/lib` according to the Linux
7*4882a593Smuzhiyunfilesystem hierarchy standard if SoftEther is built through autotools.
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunIn a managed installation, the FHS stipulates that the application must
10*4882a593Smuzhiyunaccomodate a read-only installation path.  This requires a new `GetStateDir`
11*4882a593Smuzhiyunfunction that substitues `GetExeDir` in some parts of the code.
12*4882a593Smuzhiyun
13*4882a593SmuzhiyunTaken from Github at
14*4882a593Smuzhiyunhttps://github.com/dajhorn/SoftEtherVPN/commit/b9420c3bfc2a8b9d35d0c8e5f6849007c2bc21fa.
15*4882a593Smuzhiyun
16*4882a593SmuzhiyunSigned-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
17*4882a593SmuzhiyunSigned-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun[Updated for 4.28 build 9669 beta - src/Mayaqua/Encrypt.c dropped IsXRevoked()
20*4882a593SmuzhiyunSigned-off-by: Matthew Weber <matthew.weber@rockwellcollins.com>
21*4882a593Smuzhiyun---
22*4882a593Smuzhiyun autotools/softether.am      |  1 +
23*4882a593Smuzhiyun src/Cedar/Admin.c           |  2 +-
24*4882a593Smuzhiyun src/Cedar/Command.c         |  6 +++++-
25*4882a593Smuzhiyun src/Cedar/Logging.c         |  2 +-
26*4882a593Smuzhiyun src/Cedar/Server.c          |  4 ++--
27*4882a593Smuzhiyun src/Mayaqua/FileIO.c        | 39 ++++++++++++++++++++++++++++++++++++---
28*4882a593Smuzhiyun src/Mayaqua/FileIO.h        |  2 ++
29*4882a593Smuzhiyun src/Mayaqua/Mayaqua.c       |  4 ++++
30*4882a593Smuzhiyun src/Mayaqua/Table.c         |  6 +++++-
31*4882a593Smuzhiyun src/Mayaqua/Unix.c          |  6 +++---
32*4882a593Smuzhiyun src/bin/hamcore/Makefile.am |  8 ++++++--
33*4882a593Smuzhiyun 11 files changed, 66 insertions(+), 14 deletions(-)
34*4882a593Smuzhiyun
35*4882a593SmuzhiyunIndex: b/autotools/softether.am
36*4882a593Smuzhiyun===================================================================
37*4882a593Smuzhiyun--- a/autotools/softether.am
38*4882a593Smuzhiyun+++ b/autotools/softether.am
39*4882a593Smuzhiyun@@ -27,6 +27,7 @@
40*4882a593Smuzhiyun 	-I$(top_srcdir)/src \
41*4882a593Smuzhiyun 	-I$(top_srcdir)/src/Mayaqua \
42*4882a593Smuzhiyun 	-I$(top_srcdir)/src/Cedar \
43*4882a593Smuzhiyun+	-DSTATE_DIR='"@localstatedir@/lib/softether"' \
44*4882a593Smuzhiyun 	-DUNIX \
45*4882a593Smuzhiyun 	-DUNIX_LINUX \
46*4882a593Smuzhiyun 	-D_REENTRANT \
47*4882a593SmuzhiyunIndex: b/src/Cedar/Admin.c
48*4882a593Smuzhiyun===================================================================
49*4882a593Smuzhiyun--- a/src/Cedar/Admin.c
50*4882a593Smuzhiyun+++ b/src/Cedar/Admin.c
51*4882a593Smuzhiyun@@ -10334,7 +10334,7 @@
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun 	Zero(t, sizeof(RPC_READ_LOG_FILE));
54*4882a593Smuzhiyun
55*4882a593Smuzhiyun-	GetExeDir(exe_dir, sizeof(exe_dir));
56*4882a593Smuzhiyun+	GetStateDir(exe_dir, sizeof(exe_dir));
57*4882a593Smuzhiyun 	Format(full_path, sizeof(full_path), "%s/%s", exe_dir, filepath);
58*4882a593Smuzhiyun
59*4882a593Smuzhiyun 	// Read file
60*4882a593SmuzhiyunIndex: b/src/Cedar/Command.c
61*4882a593Smuzhiyun===================================================================
62*4882a593Smuzhiyun--- a/src/Cedar/Command.c
63*4882a593Smuzhiyun+++ b/src/Cedar/Command.c
64*4882a593Smuzhiyun@@ -527,7 +527,7 @@
65*4882a593Smuzhiyun 	UINT i;
66*4882a593Smuzhiyun
67*4882a593Smuzhiyun 	GetExeName(exe, sizeof(exe));
68*4882a593Smuzhiyun-	GetExeDir(exe_dir, sizeof(exe_dir));
69*4882a593Smuzhiyun+	GetStateDir(exe_dir, sizeof(exe_dir));
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun 	ok = false;
72*4882a593Smuzhiyun 	dirs = EnumDir(exe_dir);
73*4882a593Smuzhiyun@@ -552,7 +552,11 @@
74*4882a593Smuzhiyun 		UCHAR *buf;
75*4882a593Smuzhiyun 		IO *io;
76*4882a593Smuzhiyun #ifndef	OS_WIN32
77*4882a593Smuzhiyun+#ifdef STATE_DIR
78*4882a593Smuzhiyun+		wchar_t *filename = L"" STATE_DIR L"/vpn_checker_tmp";
79*4882a593Smuzhiyun+#else
80*4882a593Smuzhiyun 		wchar_t *filename = L"/tmp/vpn_checker_tmp";
81*4882a593Smuzhiyun+#endif
82*4882a593Smuzhiyun #else	// OS_WIN32
83*4882a593Smuzhiyun 		wchar_t filename[MAX_PATH];
84*4882a593Smuzhiyun 		CombinePathW(filename, sizeof(filename), MsGetMyTempDirW(), L"vpn_checker_tmp");
85*4882a593SmuzhiyunIndex: b/src/Cedar/Logging.c
86*4882a593Smuzhiyun===================================================================
87*4882a593Smuzhiyun--- a/src/Cedar/Logging.c
88*4882a593Smuzhiyun+++ b/src/Cedar/Logging.c
89*4882a593Smuzhiyun@@ -508,7 +508,7 @@
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun 	e = ZeroMalloc(sizeof(ERASER));
92*4882a593Smuzhiyun
93*4882a593Smuzhiyun-	GetExeDir(dir, sizeof(dir));
94*4882a593Smuzhiyun+	GetStateDir(dir, sizeof(dir));
95*4882a593Smuzhiyun
96*4882a593Smuzhiyun 	e->Log = log;
97*4882a593Smuzhiyun 	e->MinFreeSpace = min_size;
98*4882a593SmuzhiyunIndex: b/src/Cedar/Server.c
99*4882a593Smuzhiyun===================================================================
100*4882a593Smuzhiyun--- a/src/Cedar/Server.c
101*4882a593Smuzhiyun+++ b/src/Cedar/Server.c
102*4882a593Smuzhiyun@@ -1060,7 +1060,7 @@
103*4882a593Smuzhiyun 		hubname = NULL;
104*4882a593Smuzhiyun 	}
105*4882a593Smuzhiyun
106*4882a593Smuzhiyun-	GetExeDir(exe_dir, sizeof(exe_dir));
107*4882a593Smuzhiyun+	GetStateDir(exe_dir, sizeof(exe_dir));
108*4882a593Smuzhiyun
109*4882a593Smuzhiyun 	// Enumerate in the server_log
110*4882a593Smuzhiyun 	if (hubname == NULL)
111*4882a593Smuzhiyun@@ -1134,7 +1134,7 @@
112*4882a593Smuzhiyun 		return;
113*4882a593Smuzhiyun 	}
114*4882a593Smuzhiyun
115*4882a593Smuzhiyun-	GetExeDir(exe_dir, sizeof(exe_dir));
116*4882a593Smuzhiyun+	GetStateDir(exe_dir, sizeof(exe_dir));
117*4882a593Smuzhiyun 	Format(dir_full_path, sizeof(dir_full_path), "%s/%s", exe_dir, dirname);
118*4882a593Smuzhiyun
119*4882a593Smuzhiyun 	dir = EnumDir(dir_full_path);
120*4882a593SmuzhiyunIndex: b/src/Mayaqua/FileIO.c
121*4882a593Smuzhiyun===================================================================
122*4882a593Smuzhiyun--- a/src/Mayaqua/FileIO.c
123*4882a593Smuzhiyun+++ b/src/Mayaqua/FileIO.c
124*4882a593Smuzhiyun@@ -122,8 +122,14 @@
125*4882a593Smuzhiyun #include <errno.h>
126*4882a593Smuzhiyun #include <Mayaqua/Mayaqua.h>
127*4882a593Smuzhiyun
128*4882a593Smuzhiyun+#ifdef STATE_DIR
129*4882a593Smuzhiyun+static char exe_file_name[MAX_SIZE] = STATE_DIR "/a.out";
130*4882a593Smuzhiyun+static wchar_t exe_file_name_w[MAX_SIZE] = L"" STATE_DIR L"/a.out";
131*4882a593Smuzhiyun+#else
132*4882a593Smuzhiyun static char exe_file_name[MAX_SIZE] = "/tmp/a.out";
133*4882a593Smuzhiyun static wchar_t exe_file_name_w[MAX_SIZE] = L"/tmp/a.out";
134*4882a593Smuzhiyun+#endif
135*4882a593Smuzhiyun+
136*4882a593Smuzhiyun static LIST *hamcore = NULL;
137*4882a593Smuzhiyun static IO *hamcore_io = NULL;
138*4882a593Smuzhiyun
139*4882a593Smuzhiyun@@ -1038,7 +1044,7 @@
140*4882a593Smuzhiyun 	}
141*4882a593Smuzhiyun
142*4882a593Smuzhiyun 	// If the file exist in hamcore/ directory on the local disk, read it
143*4882a593Smuzhiyun-	GetExeDirW(exe_dir, sizeof(exe_dir));
144*4882a593Smuzhiyun+	GetStateDirW(exe_dir, sizeof(exe_dir));
145*4882a593Smuzhiyun
146*4882a593Smuzhiyun 	UniFormat(tmp, sizeof(tmp), L"%s/%S/%S", exe_dir, HAMCORE_DIR_NAME, filename);
147*4882a593Smuzhiyun
148*4882a593Smuzhiyun@@ -1154,7 +1160,7 @@
149*4882a593Smuzhiyun 		return;
150*4882a593Smuzhiyun 	}
151*4882a593Smuzhiyun
152*4882a593Smuzhiyun-	GetExeDirW(exe_dir, sizeof(exe_dir));
153*4882a593Smuzhiyun+	GetStateDirW(exe_dir, sizeof(exe_dir));
154*4882a593Smuzhiyun 	UniFormat(tmp, sizeof(tmp), L"%s/%S", exe_dir, HAMCORE_FILE_NAME);
155*4882a593Smuzhiyun
156*4882a593Smuzhiyun 	UniFormat(tmp2, sizeof(tmp2), L"%s/%S", exe_dir, HAMCORE_FILE_NAME_2);
157*4882a593Smuzhiyun@@ -1438,6 +1444,33 @@
158*4882a593Smuzhiyun 	GetDirNameFromFilePathW(name, size, exe_file_name_w);
159*4882a593Smuzhiyun }
160*4882a593Smuzhiyun
161*4882a593Smuzhiyun+void GetStateDir(char *name, UINT size)
162*4882a593Smuzhiyun+{
163*4882a593Smuzhiyun+	// Validate arguments
164*4882a593Smuzhiyun+	if (name == NULL)
165*4882a593Smuzhiyun+	{
166*4882a593Smuzhiyun+		return;
167*4882a593Smuzhiyun+	}
168*4882a593Smuzhiyun+#ifdef STATE_DIR
169*4882a593Smuzhiyun+	StrCpy(name, size, STATE_DIR);
170*4882a593Smuzhiyun+#else
171*4882a593Smuzhiyun+	GetExeDir(name, size)
172*4882a593Smuzhiyun+#endif
173*4882a593Smuzhiyun+}
174*4882a593Smuzhiyun+void GetStateDirW(wchar_t *name, UINT size)
175*4882a593Smuzhiyun+{
176*4882a593Smuzhiyun+	// Validate arguments
177*4882a593Smuzhiyun+	if (name == NULL)
178*4882a593Smuzhiyun+	{
179*4882a593Smuzhiyun+		return;
180*4882a593Smuzhiyun+	}
181*4882a593Smuzhiyun+#ifdef STATE_DIR
182*4882a593Smuzhiyun+	UniStrCpy(name, size, L"" STATE_DIR L"");
183*4882a593Smuzhiyun+#else
184*4882a593Smuzhiyun+	GetExeDirW(name, size)
185*4882a593Smuzhiyun+#endif
186*4882a593Smuzhiyun+}
187*4882a593Smuzhiyun+
188*4882a593Smuzhiyun // Get the EXE file name
189*4882a593Smuzhiyun void GetExeName(char *name, UINT size)
190*4882a593Smuzhiyun {
191*4882a593Smuzhiyun@@ -2389,7 +2422,7 @@
192*4882a593Smuzhiyun 	else
193*4882a593Smuzhiyun 	{
194*4882a593Smuzhiyun 		wchar_t dir[MAX_SIZE];
195*4882a593Smuzhiyun-		GetExeDirW(dir, sizeof(dir));
196*4882a593Smuzhiyun+		GetStateDirW(dir, sizeof(dir));
197*4882a593Smuzhiyun 		ConbinePathW(dst, size, dir, &src[1]);
198*4882a593Smuzhiyun 	}
199*4882a593Smuzhiyun }
200*4882a593SmuzhiyunIndex: b/src/Mayaqua/FileIO.h
201*4882a593Smuzhiyun===================================================================
202*4882a593Smuzhiyun--- a/src/Mayaqua/FileIO.h
203*4882a593Smuzhiyun+++ b/src/Mayaqua/FileIO.h
204*4882a593Smuzhiyun@@ -349,6 +349,8 @@
205*4882a593Smuzhiyun void GetExeNameW(wchar_t *name, UINT size);
206*4882a593Smuzhiyun void GetExeDir(char *name, UINT size);
207*4882a593Smuzhiyun void GetExeDirW(wchar_t *name, UINT size);
208*4882a593Smuzhiyun+void GetStateDir(char *name, UINT size);
209*4882a593Smuzhiyun+void GetStateDirW(wchar_t *name, UINT size);
210*4882a593Smuzhiyun void BuildHamcore(char *dst_filename, char *src_dir, bool unix_only);
211*4882a593Smuzhiyun int CompareHamcore(void *p1, void *p2);
212*4882a593Smuzhiyun void InitHamcore();
213*4882a593SmuzhiyunIndex: b/src/Mayaqua/Mayaqua.c
214*4882a593Smuzhiyun===================================================================
215*4882a593Smuzhiyun--- a/src/Mayaqua/Mayaqua.c
216*4882a593Smuzhiyun+++ b/src/Mayaqua/Mayaqua.c
217*4882a593Smuzhiyun@@ -611,7 +611,11 @@
218*4882a593Smuzhiyun 		_exit(0);
219*4882a593Smuzhiyun 	}
220*4882a593Smuzhiyun
221*4882a593Smuzhiyun+#ifndef STATE_DIR
222*4882a593Smuzhiyun+	// This check causes hamcorebuilder to fail in an unprivileged
223*4882a593Smuzhiyun+	// environment, and is unnecessary for a managed installation.
224*4882a593Smuzhiyun 	CheckUnixTempDir();
225*4882a593Smuzhiyun+#endif
226*4882a593Smuzhiyun
227*4882a593Smuzhiyun 	// Initialization of Probe
228*4882a593Smuzhiyun 	InitProbe();
229*4882a593SmuzhiyunIndex: b/src/Mayaqua/Table.c
230*4882a593Smuzhiyun===================================================================
231*4882a593Smuzhiyun--- a/src/Mayaqua/Table.c
232*4882a593Smuzhiyun+++ b/src/Mayaqua/Table.c
233*4882a593Smuzhiyun@@ -1191,7 +1191,7 @@
234*4882a593Smuzhiyun 		return;
235*4882a593Smuzhiyun 	}
236*4882a593Smuzhiyun
237*4882a593Smuzhiyun-	GetExeDirW(exe, sizeof(exe));
238*4882a593Smuzhiyun+	GetStateDirW(exe, sizeof(exe));
239*4882a593Smuzhiyun 	UniStrCpy(hashtemp, sizeof(hashtemp), strfilename);
240*4882a593Smuzhiyun 	BinToStrW(tmp, sizeof(tmp), filehash, MD5_SIZE);
241*4882a593Smuzhiyun 	UniStrCat(hashtemp, sizeof(hashtemp), tmp);
242*4882a593Smuzhiyun@@ -1204,7 +1204,11 @@
243*4882a593Smuzhiyun 	UniStrLower(tmp);
244*4882a593Smuzhiyun
245*4882a593Smuzhiyun #ifndef	OS_WIN32
246*4882a593Smuzhiyun+#ifdef STATE_DIR
247*4882a593Smuzhiyun+	UniStrCpy(exe, sizeof(exe), L"" STATE_DIR L"");
248*4882a593Smuzhiyun+#else
249*4882a593Smuzhiyun 	UniStrCpy(exe, sizeof(exe), L"/tmp");
250*4882a593Smuzhiyun+#endif
251*4882a593Smuzhiyun #else	// OS_WIN32
252*4882a593Smuzhiyun 	StrToUni(exe, sizeof(exe), MsGetTempDir());
253*4882a593Smuzhiyun #endif	// OS_WIN32
254*4882a593SmuzhiyunIndex: b/src/Mayaqua/Unix.c
255*4882a593Smuzhiyun===================================================================
256*4882a593Smuzhiyun--- a/src/Mayaqua/Unix.c
257*4882a593Smuzhiyun+++ b/src/Mayaqua/Unix.c
258*4882a593Smuzhiyun@@ -928,7 +928,7 @@
259*4882a593Smuzhiyun 		StrCpy(tmp, sizeof(tmp), instance_name);
260*4882a593Smuzhiyun 	}
261*4882a593Smuzhiyun
262*4882a593Smuzhiyun-	GetExeDir(dir, sizeof(dir));
263*4882a593Smuzhiyun+	GetStateDir(dir, sizeof(dir));
264*4882a593Smuzhiyun
265*4882a593Smuzhiyun 	// File name generation
266*4882a593Smuzhiyun 	Format(name, sizeof(name), "%s/.%s", dir, tmp);
267*4882a593Smuzhiyun@@ -2260,7 +2260,7 @@
268*4882a593Smuzhiyun 		return;
269*4882a593Smuzhiyun 	}
270*4882a593Smuzhiyun
271*4882a593Smuzhiyun-	GetExeDir(dir, sizeof(dir));
272*4882a593Smuzhiyun+	GetStateDir(dir, sizeof(dir));
273*4882a593Smuzhiyun
274*4882a593Smuzhiyun 	GetExeName(exe_name, sizeof(exe_name));
275*4882a593Smuzhiyun 	StrCat(exe_name, sizeof(exe_name), ":pid_hash");
276*4882a593Smuzhiyun@@ -2305,7 +2305,7 @@
277*4882a593Smuzhiyun 		return;
278*4882a593Smuzhiyun 	}
279*4882a593Smuzhiyun
280*4882a593Smuzhiyun-	GetExeDir(dir, sizeof(dir));
281*4882a593Smuzhiyun+	GetStateDir(dir, sizeof(dir));
282*4882a593Smuzhiyun
283*4882a593Smuzhiyun 	GetExeName(exe_name, sizeof(exe_name));
284*4882a593Smuzhiyun 	StrCat(exe_name, sizeof(exe_name), ":pid_hash");
285*4882a593SmuzhiyunIndex: b/src/bin/hamcore/Makefile.am
286*4882a593Smuzhiyun===================================================================
287*4882a593Smuzhiyun--- a/src/bin/hamcore/Makefile.am
288*4882a593Smuzhiyun+++ b/src/bin/hamcore/Makefile.am
289*4882a593Smuzhiyun@@ -18,12 +18,16 @@
290*4882a593Smuzhiyun
291*4882a593Smuzhiyun include $(top_srcdir)/autotools/softether.am
292*4882a593Smuzhiyun
293*4882a593Smuzhiyun-# This is required to use a custom build rule with -Wall and -Werror enabled.
294*4882a593Smuzhiyun+# An empty EXEEXT required for overrides with -Wall and -Werror enabled.
295*4882a593Smuzhiyun AUTOMAKE_OPTIONS = -Wno-override
296*4882a593Smuzhiyun EXEEXT =
297*4882a593Smuzhiyun+
298*4882a593Smuzhiyun HAMCOREBUILDER = $(top_builddir)/src/hamcorebuilder/hamcorebuilder
299*4882a593Smuzhiyun
300*4882a593Smuzhiyun-sbin_PROGRAMS = hamcore.se2
301*4882a593Smuzhiyun+noinst_PROGRAMS = hamcore.se2
302*4882a593Smuzhiyun
303*4882a593Smuzhiyun hamcore.se2$(EXEEXT): $(HAMCOREBUILDER)
304*4882a593Smuzhiyun 	$(HAMCOREBUILDER) $(top_srcdir)/src/bin/hamcore $@
305*4882a593Smuzhiyun+
306*4882a593Smuzhiyun+install-exec-local: hamcore.se2$(EXEEXT)
307*4882a593Smuzhiyun+	$(INSTALL_DATA) -D hamcore.se2$(EXEEXT) $(DESTDIR)$(localstatedir)/lib/softether/hamcore.se2
308