mirror of
https://github.com/abraunegg/onedrive
synced 2024-06-13 03:12:37 +02:00
Correctly handle '~' when present in 'log_dir' configuration option (#1258)
* Handle '~' when present in 'log_dir' and expand based on user and shell environment variables to ensure correct expansion.
This commit is contained in:
parent
e163d570d7
commit
66a172d13a
|
@ -10,6 +10,7 @@ final class Config
|
||||||
public string defaultSyncDir = "~/OneDrive";
|
public string defaultSyncDir = "~/OneDrive";
|
||||||
public string defaultSkipFile = "~*|.~*|*.tmp";
|
public string defaultSkipFile = "~*|.~*|*.tmp";
|
||||||
public string defaultSkipDir = "";
|
public string defaultSkipDir = "";
|
||||||
|
public string defaultLogFileDir = "/var/log/onedrive/";
|
||||||
// application set items
|
// application set items
|
||||||
public string refreshTokenFilePath = "";
|
public string refreshTokenFilePath = "";
|
||||||
public string deltaLinkFilePath = "";
|
public string deltaLinkFilePath = "";
|
||||||
|
@ -50,7 +51,7 @@ final class Config
|
||||||
stringValues["sync_dir"] = defaultSyncDir;
|
stringValues["sync_dir"] = defaultSyncDir;
|
||||||
stringValues["skip_file"] = defaultSkipFile;
|
stringValues["skip_file"] = defaultSkipFile;
|
||||||
stringValues["skip_dir"] = defaultSkipDir;
|
stringValues["skip_dir"] = defaultSkipDir;
|
||||||
stringValues["log_dir"] = "/var/log/onedrive/";
|
stringValues["log_dir"] = defaultLogFileDir;
|
||||||
stringValues["drive_id"] = "";
|
stringValues["drive_id"] = "";
|
||||||
stringValues["user_agent"] = "";
|
stringValues["user_agent"] = "";
|
||||||
boolValues["upload_only"] = false;
|
boolValues["upload_only"] = false;
|
||||||
|
|
37
src/main.d
37
src/main.d
|
@ -425,13 +425,14 @@ int main(string[] args)
|
||||||
}
|
}
|
||||||
|
|
||||||
// sync_dir environment handling to handle ~ expansion properly
|
// sync_dir environment handling to handle ~ expansion properly
|
||||||
|
bool shellEnvSet = false;
|
||||||
if ((environment.get("SHELL") == "") && (environment.get("USER") == "")){
|
if ((environment.get("SHELL") == "") && (environment.get("USER") == "")){
|
||||||
log.vdebug("sync_dir: No SHELL or USER environment variable configuration detected");
|
log.vdebug("sync_dir: No SHELL or USER environment variable configuration detected");
|
||||||
// No shell or user set, so expandTilde() will fail - usually headless system running under init.d / systemd or potentially Docker
|
// No shell or user set, so expandTilde() will fail - usually headless system running under init.d / systemd or potentially Docker
|
||||||
// Does the 'currently configured' sync_dir include a ~
|
// Does the 'currently configured' sync_dir include a ~
|
||||||
if (canFind(cfg.getValueString("sync_dir"), "~")) {
|
if (canFind(cfg.getValueString("sync_dir"), "~")) {
|
||||||
// A ~ was found
|
// A ~ was found in sync_dir
|
||||||
log.vdebug("sync_dir: A '~' was found in sync_dir, using the calculated 'homePath' to replace '~'");
|
log.vdebug("sync_dir: A '~' was found in sync_dir, using the calculated 'homePath' to replace '~' as no SHELL or USER environment variable set");
|
||||||
syncDir = cfg.homePath ~ strip(cfg.getValueString("sync_dir"), "~");
|
syncDir = cfg.homePath ~ strip(cfg.getValueString("sync_dir"), "~");
|
||||||
} else {
|
} else {
|
||||||
// No ~ found in sync_dir, use as is
|
// No ~ found in sync_dir, use as is
|
||||||
|
@ -440,6 +441,7 @@ int main(string[] args)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// A shell and user is set, expand any ~ as this will be expanded correctly if present
|
// A shell and user is set, expand any ~ as this will be expanded correctly if present
|
||||||
|
shellEnvSet = true;
|
||||||
log.vdebug("sync_dir: Getting syncDir from config value sync_dir");
|
log.vdebug("sync_dir: Getting syncDir from config value sync_dir");
|
||||||
if (canFind(cfg.getValueString("sync_dir"), "~")) {
|
if (canFind(cfg.getValueString("sync_dir"), "~")) {
|
||||||
log.vdebug("sync_dir: A '~' was found in configured sync_dir, automatically expanding as SHELL and USER environment variable is set");
|
log.vdebug("sync_dir: A '~' was found in configured sync_dir, automatically expanding as SHELL and USER environment variable is set");
|
||||||
|
@ -452,10 +454,35 @@ int main(string[] args)
|
||||||
// vdebug syncDir as set and calculated
|
// vdebug syncDir as set and calculated
|
||||||
log.vdebug("syncDir: ", syncDir);
|
log.vdebug("syncDir: ", syncDir);
|
||||||
|
|
||||||
// Configure logging if enabled
|
|
||||||
if (cfg.getValueBool("enable_logging")){
|
// Configure the logging directory if different from application default
|
||||||
// Read in a user defined log directory or use the default
|
// log_dir environment handling to handle ~ expansion properly
|
||||||
string logDir = cfg.getValueString("log_dir");
|
string logDir = cfg.getValueString("log_dir");
|
||||||
|
if (logDir != cfg.defaultLogFileDir) {
|
||||||
|
// user modified log_dir entry
|
||||||
|
// if 'log_dir' contains a '~' this needs to be expanded correctly
|
||||||
|
if (canFind(cfg.getValueString("log_dir"), "~")) {
|
||||||
|
// ~ needs to be expanded correctly
|
||||||
|
if (!shellEnvSet) {
|
||||||
|
// No shell or user set, so expandTilde() will fail - usually headless system running under init.d / systemd or potentially Docker
|
||||||
|
log.vdebug("log_dir: A '~' was found in log_dir, using the calculated 'homePath' to replace '~' as no SHELL or USER environment variable set");
|
||||||
|
logDir = cfg.homePath ~ strip(cfg.getValueString("log_dir"), "~");
|
||||||
|
} else {
|
||||||
|
// A shell and user is set, expand any ~ as this will be expanded correctly if present
|
||||||
|
log.vdebug("log_dir: A '~' was found in log_dir, using SHELL or USER environment variable to expand '~'");
|
||||||
|
logDir = expandTilde(cfg.getValueString("log_dir"));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// '~' not found in log_dir entry, use as is
|
||||||
|
logDir = cfg.getValueString("log_dir");
|
||||||
|
}
|
||||||
|
// update log_dir with normalised path, with '~' expanded correctly
|
||||||
|
cfg.setValueString("log_dir", logDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configure logging only if enabled
|
||||||
|
if (cfg.getValueBool("enable_logging")){
|
||||||
|
// Initialise using the configured logging directory
|
||||||
log.vlog("Using logfile dir: ", logDir);
|
log.vlog("Using logfile dir: ", logDir);
|
||||||
log.init(logDir);
|
log.init(logDir);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue