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