selftest: Rework setting env variables for other forked binaries
authorTim Beale <timbeale@catalyst.net.nz>
Thu, 23 May 2019 03:47:46 +0000 (15:47 +1200)
committerAndrew Bartlett <abartlet@samba.org>
Fri, 24 May 2019 03:19:17 +0000 (03:19 +0000)
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 <timbeale@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
selftest/target/Samba3.pm
selftest/target/Samba4.pm

index 59cf8e0055d954debba0dbc844fe2bd87e3feb0d..d165588b325c7088cc664942dc483443250cfe6d 100755 (executable)
@@ -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 {
index ae0b849821db5a123441f526471f656f7baa80c2..883a8c8b585bb365e7eddf9033cf68d136ffeb01 100755 (executable)
@@ -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});