From 746e137777e559afb7851a359d56580c58231ddd Mon Sep 17 00:00:00 2001 From: Tim Beale Date: Thu, 23 May 2019 15:47:46 +1200 Subject: [PATCH] selftest: Rework setting env variables for other forked binaries Final refactor to merge the fork-and-exec code into a common function. We can now use $daemon_ctx{ENV_VARS} to customize differences between the forked binaries: - samba: add in extra env variables on top of the defaults. - dns_hub: there are no ENV variables we need to export. - winbindd/smbd: these use the defaults, so they pass through an undefined $daemon_ctx{ENV_VARS} (purely to make the code common across all 5 places). Signed-off-by: Tim Beale Reviewed-by: Andrew Bartlett --- selftest/target/Samba3.pm | 4 ++-- selftest/target/Samba4.pm | 24 ++++++++++++++---------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm index 59cf8e0055d..d165588b325 100755 --- a/selftest/target/Samba3.pm +++ b/selftest/target/Samba3.pm @@ -1343,7 +1343,7 @@ sub check_or_start($$$$$) { SocketWrapper::set_default_iface($env_vars->{SOCKET_WRAPPER_DEFAULT_IFACE}); - Samba::set_env_for_process($daemon_ctx{NAME}, $env_vars); + Samba::set_env_for_process($daemon_ctx{NAME}, $env_vars, $daemon_ctx{ENV_VARS}); if (defined($daemon_ctx{SKIP_DAEMON})) { $SIG{USR1} = $SIG{ALRM} = $SIG{INT} = $SIG{QUIT} = $SIG{TERM} = sub { @@ -1390,7 +1390,7 @@ sub check_or_start($$$$$) { SocketWrapper::set_default_iface($env_vars->{SOCKET_WRAPPER_DEFAULT_IFACE}); - Samba::set_env_for_process($daemon_ctx{NAME}, $env_vars); + Samba::set_env_for_process($daemon_ctx{NAME}, $env_vars, $daemon_ctx{ENV_VARS}); if (defined($daemon_ctx{SKIP_DAEMON})) { $SIG{USR1} = $SIG{ALRM} = $SIG{INT} = $SIG{QUIT} = $SIG{TERM} = sub { diff --git a/selftest/target/Samba4.pm b/selftest/target/Samba4.pm index ae0b849821d..883a8c8b585 100755 --- a/selftest/target/Samba4.pm +++ b/selftest/target/Samba4.pm @@ -132,12 +132,22 @@ sub check_or_start($$$) my @full_cmd = (@preargs, $binary, "-i", "--no-process-group", "--maximum-runtime=$self->{server_maxtime}", $env_vars->{CONFIGURATION}, @optargs); + + # the samba process takes some additional env variables (compared to s3) + my $samba_envs = Samba::get_env_for_process("samba", $env_vars); + $samba_envs->{RESOLV_CONF} = $env_vars->{RESOLV_CONF}; + $samba_envs->{UID_WRAPPER} = "1"; + if (defined($ENV{MITKRB5})) { + $samba_envs->{KRB5_KDC_PROFILE} = $env_vars->{MITKDC_CONFIG}; + } + my %daemon_ctx = ( NAME => "samba", BINARY_PATH => $binary, FULL_CMD => [ @full_cmd ], LOG_FILE => $env_vars->{SAMBA_TEST_LOG}, TEE_STDOUT => 1, + ENV_VARS => $samba_envs, ); print "STARTING SAMBA...\n"; @@ -151,16 +161,7 @@ sub check_or_start($$$) SocketWrapper::set_default_iface($env_vars->{SOCKET_WRAPPER_DEFAULT_IFACE}); - # setup common samba env variables - Samba::set_env_for_process($daemon_ctx{NAME}, $env_vars); - - # setup additional env variables for s4 - $ENV{RESOLV_CONF} = $env_vars->{RESOLV_CONF}; - $ENV{UID_WRAPPER} = "1"; - - if (defined($ENV{MITKRB5})) { - $ENV{KRB5_KDC_PROFILE} = $env_vars->{MITKDC_CONFIG}; - } + Samba::set_env_for_process($daemon_ctx{NAME}, $env_vars, $daemon_ctx{ENV_VARS}); $ENV{MAKE_TEST_BINARY} = $daemon_ctx{BINARY_PATH}; @@ -421,6 +422,7 @@ sub setup_dns_hub_internal($$$) LOG_FILE => $env->{DNS_HUB_LOG}, TEE_STDOUT => 1, PCAP_FILE => "$ENV{SOCKET_WRAPPER_PCAP_DIR}/env-$hostname$.pcap", + ENV_VARS => {}, ); # use a pipe for stdin in the child processes. This allows @@ -440,6 +442,8 @@ sub setup_dns_hub_internal($$$) SocketWrapper::set_default_iface($env->{SOCKET_WRAPPER_DEFAULT_IFACE}); SocketWrapper::setup_pcap($daemon_ctx{PCAP_FILE}); + Samba::set_env_for_process($daemon_ctx{NAME}, $env, $daemon_ctx{ENV_VARS}); + $ENV{MAKE_TEST_BINARY} = $daemon_ctx{BINARY_PATH}; close($env->{STDIN_PIPE}); -- 2.34.1