diff options
-rw-r--r-- | .devcontainer/devcontainer.json | 11 | ||||
-rw-r--r-- | .github/workflows/core_build.yml | 4 | ||||
-rw-r--r-- | .github/workflows/core_matrix_build.yml | 4 | ||||
-rw-r--r-- | src/common/Utilities/StartProcess.cpp | 21 | ||||
-rw-r--r-- | src/common/Utilities/StartProcess.h | 5 | ||||
-rw-r--r-- | src/server/database/Updater/DBUpdater.cpp | 10 |
6 files changed, 31 insertions, 24 deletions
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index ed955ab619..15221f1aa5 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -3,12 +3,11 @@ "name": "ac-dev-server", // Update the 'dockerComposeFile' list if you have more compose files or use different names. - // The .devcontainer/docker-compose.yml file contains any overrides you need/want to make. - "dockerComposeFile": [ - "../docker-compose.yml", - "../docker-compose.override.yml", // needed until this issue will be solved: https://github.com/microsoft/vscode-remote-release/issues/1080 - "docker-compose.yml" - ], + // set an empty array to automatically solve + // the docker-compose files (including the .override.yml) + // https://github.com/microsoft/vscode-remote-release/issues/1080#issuecomment-824213014 + // it requires vscode 1.57+ + "dockerComposeFile": [], // The 'service' property is the name of the service for the container that VS Code should // use. Update this value and .devcontainer/docker-compose.yml to the real service name. "service": "ac-dev-server", diff --git a/.github/workflows/core_build.yml b/.github/workflows/core_build.yml index 93cad079dd..7c43a1bb7c 100644 --- a/.github/workflows/core_build.yml +++ b/.github/workflows/core_build.yml @@ -42,7 +42,9 @@ jobs: run: bash bin/acore-db-pendings - name: Build run: source ./apps/ci/ci-compile.sh - - name: Dry run + - name: Dry run authserver + run: source ./apps/ci/ci-dry-run.sh authserver + - name: Dry run worldserver run: source ./apps/ci/ci-dry-run.sh worldserver - name: Check startup errors run: source ./apps/ci/ci-error-check.sh diff --git a/.github/workflows/core_matrix_build.yml b/.github/workflows/core_matrix_build.yml index 5852c6c17b..a0f4d47f93 100644 --- a/.github/workflows/core_matrix_build.yml +++ b/.github/workflows/core_matrix_build.yml @@ -50,7 +50,9 @@ jobs: run: bash bin/acore-db-pendings - name: Build run: source ./apps/ci/ci-compile.sh - - name: Dry run + - name: Dry run authserver + run: source ./apps/ci/ci-dry-run.sh authserver + - name: Dry run worldserver run: source ./apps/ci/ci-dry-run.sh worldserver - name: Check startup errors run: source ./apps/ci/ci-error-check.sh diff --git a/src/common/Utilities/StartProcess.cpp b/src/common/Utilities/StartProcess.cpp index 7fbe053a8d..1da7817f41 100644 --- a/src/common/Utilities/StartProcess.cpp +++ b/src/common/Utilities/StartProcess.cpp @@ -70,7 +70,7 @@ namespace Acore static int CreateChildProcess(T waiter, std::string const& executable, std::vector<std::string> const& argsVector, std::string const& logger, std::string const& input, - bool secure) + bool secure, boost::process::environment envVariables = boost::this_process::environment()) { ipstream outStream; ipstream errStream; @@ -97,7 +97,7 @@ namespace Acore return child{ exe = std::filesystem::absolute(executable).string(), args = argsVector, - env = environment(boost::this_process::environment()), + env = environment(envVariables), std_in = inputFile.get(), std_out = outStream, std_err = errStream @@ -109,7 +109,7 @@ namespace Acore return child{ exe = std::filesystem::absolute(executable).string(), args = argsVector, - env = environment(boost::this_process::environment()), + env = environment(envVariables), std_in = boost::process::close, std_out = outStream, std_err = errStream @@ -144,7 +144,7 @@ namespace Acore } int StartProcess(std::string const& executable, std::vector<std::string> const& args, - std::string const& logger, std::string input_file, bool secure) + std::string const& logger, std::string input_file, bool secure, boost::process::environment env) { return CreateChildProcess([](child& c) -> int { @@ -157,7 +157,7 @@ namespace Acore { return EXIT_FAILURE; } - }, executable, args, logger, input_file, secure); + }, executable, args, logger, input_file, secure, env); } class AsyncProcessResultImplementation @@ -168,6 +168,7 @@ namespace Acore std::string const logger; std::string const input_file; bool const is_secure; + boost::process::environment envVariables; std::atomic<bool> was_terminated; @@ -177,10 +178,10 @@ namespace Acore public: explicit AsyncProcessResultImplementation(std::string executable_, std::vector<std::string> args_, std::string logger_, std::string input_file_, - bool secure) + bool secure, boost::process::environment env) : executable(std::move(executable_)), args(std::move(args_)), logger(std::move(logger_)), input_file(input_file_), - is_secure(secure), was_terminated(false) { } + is_secure(secure), envVariables(env), was_terminated(false) { } AsyncProcessResultImplementation(AsyncProcessResultImplementation const&) = delete; AsyncProcessResultImplementation& operator= (AsyncProcessResultImplementation const&) = delete; @@ -209,7 +210,7 @@ namespace Acore my_child.reset(); return was_terminated ? EXIT_FAILURE : exitCode; - }, executable, args, logger, input_file, is_secure); + }, executable, args, logger, input_file, is_secure, envVariables); } void SetFuture(std::future<int> result_) @@ -245,10 +246,10 @@ namespace Acore std::shared_ptr<AsyncProcessResult> StartAsyncProcess(std::string executable, std::vector<std::string> args, - std::string logger, std::string input_file, bool secure) + std::string logger, std::string input_file, bool secure, boost::process::native_environment env) { auto handle = std::make_shared<AsyncProcessResultImplementation>( - std::move(executable), std::move(args), std::move(logger), std::move(input_file), secure); + std::move(executable), std::move(args), std::move(logger), std::move(input_file), secure, env); handle->SetFuture(std::async(std::launch::async, [handle] { return handle->StartProcess(); })); return handle; diff --git a/src/common/Utilities/StartProcess.h b/src/common/Utilities/StartProcess.h index 6b564cb9e1..f0d5d97818 100644 --- a/src/common/Utilities/StartProcess.h +++ b/src/common/Utilities/StartProcess.h @@ -23,6 +23,7 @@ #include <memory> #include <string> #include <vector> +#include <boost/process/environment.hpp> namespace Acore { @@ -34,7 +35,7 @@ namespace Acore /// Note that most executables expect it's name as the first argument. AC_COMMON_API int StartProcess(std::string const& executable, std::vector<std::string> const& args, std::string const& logger, std::string input_file = "", - bool secure = false); + bool secure = false, boost::process::environment env = boost::this_process::environment()); /// Platform and library independent representation /// of asynchronous process results @@ -58,7 +59,7 @@ namespace Acore /// Note that most executables expect it's name as the first argument. AC_COMMON_API std::shared_ptr<AsyncProcessResult> StartAsyncProcess(std::string executable, std::vector<std::string> args, std::string logger, std::string input_file = "", - bool secure = false); + bool secure = false, boost::process::environment env = boost::this_process::environment()); /// Searches for the given executable in the PATH variable /// and returns a non-empty string when it was found. diff --git a/src/server/database/Updater/DBUpdater.cpp b/src/server/database/Updater/DBUpdater.cpp index d4f45c2972..e1a1518f14 100644 --- a/src/server/database/Updater/DBUpdater.cpp +++ b/src/server/database/Updater/DBUpdater.cpp @@ -447,9 +447,6 @@ void DBUpdater<T>::ApplyFile(DatabaseWorkerPool<T>& pool, std::string const& hos args.emplace_back("-h" + host); args.emplace_back("-u" + user); - if (!password.empty()) - args.emplace_back("-p" + password); - // Check if we want to connect through ip or socket (Unix only) #ifdef _WIN32 @@ -499,9 +496,14 @@ void DBUpdater<T>::ApplyFile(DatabaseWorkerPool<T>& pool, std::string const& hos if (!database.empty()) args.emplace_back(database); + auto env = boost::process::environment(); + + if (!password.empty()) + env["MYSQL_PWD"]=password; + // Invokes a mysql process which doesn't leak credentials to logs int const ret = Acore::StartProcess(DBUpdaterUtil::GetCorrectedMySQLExecutable(), args, - "sql.updates", "", true); + "sql.updates", "", true, env); if (ret != EXIT_SUCCESS) { |