mirror of
https://github.com/SoftEtherVPN/SoftEtherVPN.git
synced 2025-06-28 03:45:08 +03:00
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.
This commit is contained in:
parent
070e32986e
commit
7bcb2d135b
@ -27,6 +27,7 @@ AM_CFLAGS = \
|
||||
-I$(top_srcdir)/src \
|
||||
-I$(top_srcdir)/src/Mayaqua \
|
||||
-I$(top_srcdir)/src/Cedar \
|
||||
-DSTATE_DIR='"@localstatedir@/lib/softether"' \
|
||||
-DUNIX \
|
||||
-DUNIX_LINUX \
|
||||
-D_REENTRANT \
|
||||
|
@ -10319,7 +10319,7 @@ void SiReadLocalLogFile(SERVER *s, char *filepath, UINT offset, RPC_READ_LOG_FIL
|
||||
|
||||
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
|
||||
|
@ -512,7 +512,7 @@ bool CheckFileSystem()
|
||||
UINT i;
|
||||
|
||||
GetExeName(exe, sizeof(exe));
|
||||
GetExeDir(exe_dir, sizeof(exe_dir));
|
||||
GetStateDir(exe_dir, sizeof(exe_dir));
|
||||
|
||||
ok = false;
|
||||
dirs = EnumDir(exe_dir);
|
||||
@ -537,7 +537,11 @@ bool CheckFileSystem()
|
||||
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");
|
||||
|
@ -493,7 +493,7 @@ ERASER *NewEraser(LOG *log, UINT64 min_size)
|
||||
|
||||
e = ZeroMalloc(sizeof(ERASER));
|
||||
|
||||
GetExeDir(dir, sizeof(dir));
|
||||
GetStateDir(dir, sizeof(dir));
|
||||
|
||||
e->Log = log;
|
||||
e->MinFreeSpace = min_size;
|
||||
|
@ -1038,7 +1038,7 @@ LIST *EnumLogFile(char *hubname)
|
||||
hubname = NULL;
|
||||
}
|
||||
|
||||
GetExeDir(exe_dir, sizeof(exe_dir));
|
||||
GetStateDir(exe_dir, sizeof(exe_dir));
|
||||
|
||||
// Enumerate in the server_log
|
||||
if (hubname == NULL)
|
||||
@ -1112,7 +1112,7 @@ void EnumLogFileDir(LIST *o, char *dirname)
|
||||
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);
|
||||
|
@ -564,7 +564,7 @@ bool IsXRevoked(X *x)
|
||||
return false;
|
||||
}
|
||||
|
||||
GetExeDir(dirname, sizeof(dirname));
|
||||
GetStateDir(dirname, sizeof(dirname));
|
||||
|
||||
// Search the CRL file
|
||||
t = EnumDir(dirname);
|
||||
|
@ -107,8 +107,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;
|
||||
|
||||
@ -1023,7 +1029,7 @@ BUF *ReadHamcore(char *name)
|
||||
}
|
||||
|
||||
// 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);
|
||||
|
||||
@ -1139,7 +1145,7 @@ void InitHamcore()
|
||||
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);
|
||||
@ -1423,6 +1429,33 @@ void GetExeDirW(wchar_t *name, UINT size)
|
||||
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)
|
||||
{
|
||||
@ -2374,7 +2407,7 @@ void InnerFilePathW(wchar_t *dst, UINT size, wchar_t *src)
|
||||
else
|
||||
{
|
||||
wchar_t dir[MAX_SIZE];
|
||||
GetExeDirW(dir, sizeof(dir));
|
||||
GetStateDirW(dir, sizeof(dir));
|
||||
ConbinePathW(dst, size, dir, &src[1]);
|
||||
}
|
||||
}
|
||||
|
@ -334,6 +334,8 @@ void GetExeName(char *name, UINT size);
|
||||
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();
|
||||
|
@ -596,7 +596,11 @@ void InitMayaqua(bool memcheck, bool debug, int argc, char **argv)
|
||||
_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();
|
||||
|
@ -1176,7 +1176,7 @@ void GenerateUnicodeCacheFileName(wchar_t *name, UINT size, wchar_t *strfilename
|
||||
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);
|
||||
@ -1189,7 +1189,11 @@ void GenerateUnicodeCacheFileName(wchar_t *name, UINT size, wchar_t *strfilename
|
||||
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
|
||||
|
@ -913,7 +913,7 @@ void *UnixNewSingleInstance(char *instance_name)
|
||||
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);
|
||||
@ -2245,7 +2245,7 @@ void UnixGenPidFileName(char *name, UINT size)
|
||||
return;
|
||||
}
|
||||
|
||||
GetExeDir(dir, sizeof(dir));
|
||||
GetStateDir(dir, sizeof(dir));
|
||||
|
||||
GetExeName(exe_name, sizeof(exe_name));
|
||||
StrCat(exe_name, sizeof(exe_name), ":pid_hash");
|
||||
@ -2290,7 +2290,7 @@ void UnixGenCtlFileName(char *name, UINT size)
|
||||
return;
|
||||
}
|
||||
|
||||
GetExeDir(dir, sizeof(dir));
|
||||
GetStateDir(dir, sizeof(dir));
|
||||
|
||||
GetExeName(exe_name, sizeof(exe_name));
|
||||
StrCat(exe_name, sizeof(exe_name), ":pid_hash");
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user