2014-10-04 23:44:58 +02:00
|
|
|
From b9420c3bfc2a8b9d35d0c8e5f6849007c2bc21fa Mon Sep 17 00:00:00 2001
|
|
|
|
From: Darik Horn <dajhorn@vanadac.com>
|
|
|
|
Date: Mon, 14 Apr 2014 13:22:24 -0400
|
|
|
|
Subject: [PATCH] Use FHS installation directories.
|
|
|
|
|
|
|
|
Install to `/usr/sbin`, `/usr/lib`, and `/var/lib` according to the Linux
|
|
|
|
filesystem hierarchy standard if SoftEther is built through autotools.
|
|
|
|
|
|
|
|
In a managed installation, the FHS stipulates that the application must
|
|
|
|
accomodate a read-only installation path. This requires a new `GetStateDir`
|
|
|
|
function that substitues `GetExeDir` in some parts of the code.
|
|
|
|
|
|
|
|
Taken from Github at
|
|
|
|
https://github.com/dajhorn/SoftEtherVPN/commit/b9420c3bfc2a8b9d35d0c8e5f6849007c2bc21fa.
|
|
|
|
|
|
|
|
Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
|
|
|
|
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
2019-02-05 12:47:52 +01:00
|
|
|
|
|
|
|
[Updated for 4.28 build 9669 beta - src/Mayaqua/Encrypt.c dropped IsXRevoked()
|
|
|
|
Signed-off-by: Matthew Weber <matthew.weber@rockwellcollins.com>
|
2014-10-04 23:44:58 +02:00
|
|
|
---
|
|
|
|
autotools/softether.am | 1 +
|
|
|
|
src/Cedar/Admin.c | 2 +-
|
|
|
|
src/Cedar/Command.c | 6 +++++-
|
|
|
|
src/Cedar/Logging.c | 2 +-
|
|
|
|
src/Cedar/Server.c | 4 ++--
|
|
|
|
src/Mayaqua/FileIO.c | 39 ++++++++++++++++++++++++++++++++++++---
|
|
|
|
src/Mayaqua/FileIO.h | 2 ++
|
|
|
|
src/Mayaqua/Mayaqua.c | 4 ++++
|
|
|
|
src/Mayaqua/Table.c | 6 +++++-
|
|
|
|
src/Mayaqua/Unix.c | 6 +++---
|
|
|
|
src/bin/hamcore/Makefile.am | 8 ++++++--
|
2019-02-05 12:47:52 +01:00
|
|
|
11 files changed, 66 insertions(+), 14 deletions(-)
|
2014-10-04 23:44:58 +02:00
|
|
|
|
|
|
|
Index: b/autotools/softether.am
|
|
|
|
===================================================================
|
|
|
|
--- a/autotools/softether.am
|
|
|
|
+++ b/autotools/softether.am
|
|
|
|
@@ -27,6 +27,7 @@
|
|
|
|
-I$(top_srcdir)/src \
|
|
|
|
-I$(top_srcdir)/src/Mayaqua \
|
|
|
|
-I$(top_srcdir)/src/Cedar \
|
|
|
|
+ -DSTATE_DIR='"@localstatedir@/lib/softether"' \
|
|
|
|
-DUNIX \
|
|
|
|
-DUNIX_LINUX \
|
|
|
|
-D_REENTRANT \
|
|
|
|
Index: b/src/Cedar/Admin.c
|
|
|
|
===================================================================
|
|
|
|
--- a/src/Cedar/Admin.c
|
|
|
|
+++ b/src/Cedar/Admin.c
|
|
|
|
@@ -10334,7 +10334,7 @@
|
|
|
|
|
|
|
|
Zero(t, sizeof(RPC_READ_LOG_FILE));
|
|
|
|
|
|
|
|
- GetExeDir(exe_dir, sizeof(exe_dir));
|
|
|
|
+ GetStateDir(exe_dir, sizeof(exe_dir));
|
|
|
|
Format(full_path, sizeof(full_path), "%s/%s", exe_dir, filepath);
|
|
|
|
|
|
|
|
// Read file
|
|
|
|
Index: b/src/Cedar/Command.c
|
|
|
|
===================================================================
|
|
|
|
--- a/src/Cedar/Command.c
|
|
|
|
+++ b/src/Cedar/Command.c
|
|
|
|
@@ -527,7 +527,7 @@
|
|
|
|
UINT i;
|
|
|
|
|
|
|
|
GetExeName(exe, sizeof(exe));
|
|
|
|
- GetExeDir(exe_dir, sizeof(exe_dir));
|
|
|
|
+ GetStateDir(exe_dir, sizeof(exe_dir));
|
|
|
|
|
|
|
|
ok = false;
|
|
|
|
dirs = EnumDir(exe_dir);
|
|
|
|
@@ -552,7 +552,11 @@
|
|
|
|
UCHAR *buf;
|
|
|
|
IO *io;
|
|
|
|
#ifndef OS_WIN32
|
|
|
|
+#ifdef STATE_DIR
|
|
|
|
+ wchar_t *filename = L"" STATE_DIR L"/vpn_checker_tmp";
|
|
|
|
+#else
|
|
|
|
wchar_t *filename = L"/tmp/vpn_checker_tmp";
|
|
|
|
+#endif
|
|
|
|
#else // OS_WIN32
|
|
|
|
wchar_t filename[MAX_PATH];
|
|
|
|
CombinePathW(filename, sizeof(filename), MsGetMyTempDirW(), L"vpn_checker_tmp");
|
|
|
|
Index: b/src/Cedar/Logging.c
|
|
|
|
===================================================================
|
|
|
|
--- a/src/Cedar/Logging.c
|
|
|
|
+++ b/src/Cedar/Logging.c
|
|
|
|
@@ -508,7 +508,7 @@
|
|
|
|
|
|
|
|
e = ZeroMalloc(sizeof(ERASER));
|
|
|
|
|
|
|
|
- GetExeDir(dir, sizeof(dir));
|
|
|
|
+ GetStateDir(dir, sizeof(dir));
|
|
|
|
|
|
|
|
e->Log = log;
|
|
|
|
e->MinFreeSpace = min_size;
|
|
|
|
Index: b/src/Cedar/Server.c
|
|
|
|
===================================================================
|
|
|
|
--- a/src/Cedar/Server.c
|
|
|
|
+++ b/src/Cedar/Server.c
|
|
|
|
@@ -1060,7 +1060,7 @@
|
|
|
|
hubname = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
- GetExeDir(exe_dir, sizeof(exe_dir));
|
|
|
|
+ GetStateDir(exe_dir, sizeof(exe_dir));
|
|
|
|
|
|
|
|
// Enumerate in the server_log
|
|
|
|
if (hubname == NULL)
|
|
|
|
@@ -1134,7 +1134,7 @@
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
- GetExeDir(exe_dir, sizeof(exe_dir));
|
|
|
|
+ GetStateDir(exe_dir, sizeof(exe_dir));
|
|
|
|
Format(dir_full_path, sizeof(dir_full_path), "%s/%s", exe_dir, dirname);
|
|
|
|
|
|
|
|
dir = EnumDir(dir_full_path);
|
|
|
|
Index: b/src/Mayaqua/FileIO.c
|
|
|
|
===================================================================
|
|
|
|
--- a/src/Mayaqua/FileIO.c
|
|
|
|
+++ b/src/Mayaqua/FileIO.c
|
|
|
|
@@ -122,8 +122,14 @@
|
|
|
|
#include <errno.h>
|
|
|
|
#include <Mayaqua/Mayaqua.h>
|
|
|
|
|
|
|
|
+#ifdef STATE_DIR
|
|
|
|
+static char exe_file_name[MAX_SIZE] = STATE_DIR "/a.out";
|
|
|
|
+static wchar_t exe_file_name_w[MAX_SIZE] = L"" STATE_DIR L"/a.out";
|
|
|
|
+#else
|
|
|
|
static char exe_file_name[MAX_SIZE] = "/tmp/a.out";
|
|
|
|
static wchar_t exe_file_name_w[MAX_SIZE] = L"/tmp/a.out";
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
static LIST *hamcore = NULL;
|
|
|
|
static IO *hamcore_io = NULL;
|
|
|
|
|
|
|
|
@@ -1038,7 +1044,7 @@
|
|
|
|
}
|
|
|
|
|
|
|
|
// If the file exist in hamcore/ directory on the local disk, read it
|
|
|
|
- GetExeDirW(exe_dir, sizeof(exe_dir));
|
|
|
|
+ GetStateDirW(exe_dir, sizeof(exe_dir));
|
|
|
|
|
|
|
|
UniFormat(tmp, sizeof(tmp), L"%s/%S/%S", exe_dir, HAMCORE_DIR_NAME, filename);
|
|
|
|
|
|
|
|
@@ -1154,7 +1160,7 @@
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
- GetExeDirW(exe_dir, sizeof(exe_dir));
|
|
|
|
+ GetStateDirW(exe_dir, sizeof(exe_dir));
|
|
|
|
UniFormat(tmp, sizeof(tmp), L"%s/%S", exe_dir, HAMCORE_FILE_NAME);
|
|
|
|
|
|
|
|
UniFormat(tmp2, sizeof(tmp2), L"%s/%S", exe_dir, HAMCORE_FILE_NAME_2);
|
|
|
|
@@ -1438,6 +1444,33 @@
|
|
|
|
GetDirNameFromFilePathW(name, size, exe_file_name_w);
|
|
|
|
}
|
|
|
|
|
|
|
|
+void GetStateDir(char *name, UINT size)
|
|
|
|
+{
|
|
|
|
+ // Validate arguments
|
|
|
|
+ if (name == NULL)
|
|
|
|
+ {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+#ifdef STATE_DIR
|
|
|
|
+ StrCpy(name, size, STATE_DIR);
|
|
|
|
+#else
|
|
|
|
+ GetExeDir(name, size)
|
|
|
|
+#endif
|
|
|
|
+}
|
|
|
|
+void GetStateDirW(wchar_t *name, UINT size)
|
|
|
|
+{
|
|
|
|
+ // Validate arguments
|
|
|
|
+ if (name == NULL)
|
|
|
|
+ {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+#ifdef STATE_DIR
|
|
|
|
+ UniStrCpy(name, size, L"" STATE_DIR L"");
|
|
|
|
+#else
|
|
|
|
+ GetExeDirW(name, size)
|
|
|
|
+#endif
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
// Get the EXE file name
|
|
|
|
void GetExeName(char *name, UINT size)
|
|
|
|
{
|
|
|
|
@@ -2389,7 +2422,7 @@
|
|
|
|
else
|
|
|
|
{
|
|
|
|
wchar_t dir[MAX_SIZE];
|
|
|
|
- GetExeDirW(dir, sizeof(dir));
|
|
|
|
+ GetStateDirW(dir, sizeof(dir));
|
|
|
|
ConbinePathW(dst, size, dir, &src[1]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Index: b/src/Mayaqua/FileIO.h
|
|
|
|
===================================================================
|
|
|
|
--- a/src/Mayaqua/FileIO.h
|
|
|
|
+++ b/src/Mayaqua/FileIO.h
|
|
|
|
@@ -349,6 +349,8 @@
|
|
|
|
void GetExeNameW(wchar_t *name, UINT size);
|
|
|
|
void GetExeDir(char *name, UINT size);
|
|
|
|
void GetExeDirW(wchar_t *name, UINT size);
|
|
|
|
+void GetStateDir(char *name, UINT size);
|
|
|
|
+void GetStateDirW(wchar_t *name, UINT size);
|
|
|
|
void BuildHamcore(char *dst_filename, char *src_dir, bool unix_only);
|
|
|
|
int CompareHamcore(void *p1, void *p2);
|
|
|
|
void InitHamcore();
|
|
|
|
Index: b/src/Mayaqua/Mayaqua.c
|
|
|
|
===================================================================
|
|
|
|
--- a/src/Mayaqua/Mayaqua.c
|
|
|
|
+++ b/src/Mayaqua/Mayaqua.c
|
|
|
|
@@ -611,7 +611,11 @@
|
|
|
|
_exit(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
+#ifndef STATE_DIR
|
|
|
|
+ // This check causes hamcorebuilder to fail in an unprivileged
|
|
|
|
+ // environment, and is unnecessary for a managed installation.
|
|
|
|
CheckUnixTempDir();
|
|
|
|
+#endif
|
|
|
|
|
|
|
|
// Initialization of Probe
|
|
|
|
InitProbe();
|
|
|
|
Index: b/src/Mayaqua/Table.c
|
|
|
|
===================================================================
|
|
|
|
--- a/src/Mayaqua/Table.c
|
|
|
|
+++ b/src/Mayaqua/Table.c
|
|
|
|
@@ -1191,7 +1191,7 @@
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
- GetExeDirW(exe, sizeof(exe));
|
|
|
|
+ GetStateDirW(exe, sizeof(exe));
|
|
|
|
UniStrCpy(hashtemp, sizeof(hashtemp), strfilename);
|
|
|
|
BinToStrW(tmp, sizeof(tmp), filehash, MD5_SIZE);
|
|
|
|
UniStrCat(hashtemp, sizeof(hashtemp), tmp);
|
|
|
|
@@ -1204,7 +1204,11 @@
|
|
|
|
UniStrLower(tmp);
|
|
|
|
|
|
|
|
#ifndef OS_WIN32
|
|
|
|
+#ifdef STATE_DIR
|
|
|
|
+ UniStrCpy(exe, sizeof(exe), L"" STATE_DIR L"");
|
|
|
|
+#else
|
|
|
|
UniStrCpy(exe, sizeof(exe), L"/tmp");
|
|
|
|
+#endif
|
|
|
|
#else // OS_WIN32
|
|
|
|
StrToUni(exe, sizeof(exe), MsGetTempDir());
|
|
|
|
#endif // OS_WIN32
|
|
|
|
Index: b/src/Mayaqua/Unix.c
|
|
|
|
===================================================================
|
|
|
|
--- a/src/Mayaqua/Unix.c
|
|
|
|
+++ b/src/Mayaqua/Unix.c
|
|
|
|
@@ -928,7 +928,7 @@
|
|
|
|
StrCpy(tmp, sizeof(tmp), instance_name);
|
|
|
|
}
|
|
|
|
|
|
|
|
- GetExeDir(dir, sizeof(dir));
|
|
|
|
+ GetStateDir(dir, sizeof(dir));
|
|
|
|
|
|
|
|
// File name generation
|
|
|
|
Format(name, sizeof(name), "%s/.%s", dir, tmp);
|
|
|
|
@@ -2260,7 +2260,7 @@
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
- GetExeDir(dir, sizeof(dir));
|
|
|
|
+ GetStateDir(dir, sizeof(dir));
|
|
|
|
|
|
|
|
GetExeName(exe_name, sizeof(exe_name));
|
|
|
|
StrCat(exe_name, sizeof(exe_name), ":pid_hash");
|
|
|
|
@@ -2305,7 +2305,7 @@
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
- GetExeDir(dir, sizeof(dir));
|
|
|
|
+ GetStateDir(dir, sizeof(dir));
|
|
|
|
|
|
|
|
GetExeName(exe_name, sizeof(exe_name));
|
|
|
|
StrCat(exe_name, sizeof(exe_name), ":pid_hash");
|
|
|
|
Index: b/src/bin/hamcore/Makefile.am
|
|
|
|
===================================================================
|
|
|
|
--- a/src/bin/hamcore/Makefile.am
|
|
|
|
+++ b/src/bin/hamcore/Makefile.am
|
|
|
|
@@ -18,12 +18,16 @@
|
|
|
|
|
|
|
|
include $(top_srcdir)/autotools/softether.am
|
|
|
|
|
|
|
|
-# This is required to use a custom build rule with -Wall and -Werror enabled.
|
|
|
|
+# An empty EXEEXT required for overrides with -Wall and -Werror enabled.
|
|
|
|
AUTOMAKE_OPTIONS = -Wno-override
|
|
|
|
EXEEXT =
|
|
|
|
+
|
|
|
|
HAMCOREBUILDER = $(top_builddir)/src/hamcorebuilder/hamcorebuilder
|
|
|
|
|
|
|
|
-sbin_PROGRAMS = hamcore.se2
|
|
|
|
+noinst_PROGRAMS = hamcore.se2
|
|
|
|
|
|
|
|
hamcore.se2$(EXEEXT): $(HAMCOREBUILDER)
|
|
|
|
$(HAMCOREBUILDER) $(top_srcdir)/src/bin/hamcore $@
|
|
|
|
+
|
|
|
|
+install-exec-local: hamcore.se2$(EXEEXT)
|
|
|
|
+ $(INSTALL_DATA) -D hamcore.se2$(EXEEXT) $(DESTDIR)$(localstatedir)/lib/softether/hamcore.se2
|