123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307 |
- 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>
- [Updated for 4.28 build 9669 beta - src/Mayaqua/Encrypt.c dropped IsXRevoked()
- Signed-off-by: Matthew Weber <matthew.weber@rockwellcollins.com>
- ---
- 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 ++++++--
- 11 files changed, 66 insertions(+), 14 deletions(-)
- 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
|