From 5d8719ca4a4cd51122e07daa81a54ae023821825 Mon Sep 17 00:00:00 2001 From: Hugo Hromic Date: Sat, 12 Aug 2023 19:17:31 +0100 Subject: [PATCH] enhancement(core): Add CLI arg and env variable to control openssl probing This commit implements a new CLI argument `--openssl-no-probe` with a corresponding environment variable `VECTOR_OPENSSL_NO_PROBE` to disable calling the `openssl_probe::init_ssl_cert_env_vars()` function when starting Vector. The openssl-probe functionality manipulates the `SSL_CERT_FILE` and `SSL_CERT_DIR` environment variables in the Vector process. This behavior can be problematic for users of the `exec` source, which by default inherits the environment of the Vector process. Signed-off-by: Hugo Hromic --- src/app.rs | 13 ++++++++++--- src/cli.rs | 4 ++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/app.rs b/src/app.rs index b745d831e07c3..baee7a8afc23b 100644 --- a/src/app.rs +++ b/src/app.rs @@ -180,7 +180,7 @@ impl Application { } pub fn prepare_from_opts(opts: Opts) -> Result<(Runtime, Self), ExitCode> { - init_global(); + init_global(!opts.root.openssl_no_probe); let color = opts.root.color.use_color(); @@ -191,6 +191,11 @@ impl Application { opts.root.internal_log_rate_limit, ); + // Can only log this after initializing the logging subsystem + if opts.root.openssl_no_probe { + debug!(message = "Disabled probing and configuration of root certificate locations on the system for OpenSSL."); + } + let openssl_legacy_provider = opts .root .openssl_legacy_provider @@ -420,8 +425,10 @@ impl FinishedApplication { } } -pub fn init_global() { - openssl_probe::init_ssl_cert_env_vars(); +pub fn init_global(openssl_probe: bool) { + if openssl_probe { + openssl_probe::init_ssl_cert_env_vars(); + } #[cfg(not(feature = "enterprise-tests"))] metrics::init_global().expect("metrics initialization failed"); diff --git a/src/cli.rs b/src/cli.rs index 1493e8db117e8..cd7cad7ade949 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -198,6 +198,10 @@ pub struct RootOpts { /// Load the OpenSSL legacy provider. #[arg(long, env = "VECTOR_OPENSSL_LEGACY_PROVIDER", default_value = "true")] pub openssl_legacy_provider: bool, + + /// Disable probing and configuration of root certificate locations on the system for OpenSSL. + #[arg(long, env = "VECTOR_OPENSSL_NO_PROBE", default_value = "false")] + pub openssl_no_probe: bool, } impl RootOpts {