selftest: replace global with explicit environment variables
authorJamie McClymont <jamiemcclymont@catalyst.net.nz>
Fri, 8 Dec 2017 02:20:36 +0000 (15:20 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 20 Dec 2017 07:50:25 +0000 (08:50 +0100)
This patch removes setting of NSS_WRAPPER and RESOLV_WRAPPER variables globally
in Samba3.pm (because setting them persistently/globally can create hidden
ordering dependencies). Instead, they are set on subprocesses as required, which
appears to be the following two places (aside from those places where they are
already set explicitly):
* calls to createuser in provision
* calls to wbinfo --ping-dc in wait_for_start

Signed-off-by: Jamie McClymont <jamiemcclymont@catalyst.net.nz>
Reviewed-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Autobuild-User(master): Andrew Bartlett <abartlet@samba.org>
Autobuild-Date(master): Wed Dec 20 08:50:26 CET 2017 on sn-devel-144

selftest/target/Samba3.pm

index 229435dda74bf5ff37108d1096c408036aad52ac..c9888c2dca37edfcfe58ee65835d3d73080ae940 100755 (executable)
@@ -1374,10 +1374,16 @@ sub check_or_start($$$$$) {
        return $self->wait_for_start($env_vars, $nmbd, $winbindd, $smbd);
 }
 
-sub createuser($$$$)
+sub createuser($$$$$)
 {
-       my ($self, $username, $password, $conffile) = @_;
+       my ($self, $username, $password, $conffile, $env) = @_;
        my $cmd = "UID_WRAPPER_ROOT=1 " . Samba::bindir_path($self, "smbpasswd")." -c $conffile -L -s -a $username > /dev/null";
+
+       keys %$env;
+       while(my($var, $val) = each %$env) {
+               $cmd = "$var=\"$val\" $cmd";
+       }
+
        unless (open(PWD, "|$cmd")) {
            warn("Unable to set password for $username account\n$cmd");
            return undef;
@@ -1399,6 +1405,7 @@ sub provision($$$$$$$$$)
 
        my $swiface = Samba::get_interface($server);
        my %ret = ();
+       my %createuser_env = ();
        my $server_ip = "127.0.0.$swiface";
        my $server_ipv6 = sprintf("fd00:0000:0000:0000:0000:0000:5357:5f%02x", $swiface);
 
@@ -2242,21 +2249,21 @@ force_user:x:$gid_force_user:
                close(EVENTLOG);
        }
 
-       $ENV{NSS_WRAPPER_PASSWD} = $nss_wrapper_passwd;
-       $ENV{NSS_WRAPPER_GROUP} = $nss_wrapper_group;
-       $ENV{NSS_WRAPPER_HOSTS} = $nss_wrapper_hosts;
-       $ENV{NSS_WRAPPER_HOSTNAME} = "${hostname}.samba.example.com";
+       $createuser_env{NSS_WRAPPER_PASSWD} = $nss_wrapper_passwd;
+       $createuser_env{NSS_WRAPPER_GROUP} = $nss_wrapper_group;
+       $createuser_env{NSS_WRAPPER_HOSTS} = $nss_wrapper_hosts;
+       $createuser_env{NSS_WRAPPER_HOSTNAME} = "${hostname}.samba.example.com";
        if ($ENV{SAMBA_DNS_FAKING}) {
-               $ENV{RESOLV_WRAPPER_CONF} = $resolv_conf;
+               $createuser_env{RESOLV_WRAPPER_CONF} = $resolv_conf;
        } else {
-               $ENV{RESOLV_WRAPPER_HOSTS} = $dns_host_file;
+               $createuser_env{RESOLV_WRAPPER_HOSTS} = $dns_host_file;
        }
 
-       createuser($self, $unix_name, $password, $conffile) || die("Unable to create user");
-       createuser($self, "force_user", $password, $conffile) || die("Unable to create force_user");
-       createuser($self, "smbget_user", $password, $conffile) || die("Unable to create smbget_user");
-       createuser($self, "user1", $password, $conffile) || die("Unable to create user1");
-       createuser($self, "user2", $password, $conffile) || die("Unable to create user2");
+       createuser($self, $unix_name, $password, $conffile, \%createuser_env) || die("Unable to create user");
+       createuser($self, "force_user", $password, $conffile, \%createuser_env) || die("Unable to create force_user");
+       createuser($self, "smbget_user", $password, $conffile, \%createuser_env) || die("Unable to create smbget_user");
+       createuser($self, "user1", $password, $conffile, \%createuser_env) || die("Unable to create user1");
+       createuser($self, "user2", $password, $conffile, \%createuser_env) || die("Unable to create user2");
 
        open(DNS_UPDATE_LIST, ">$prefix/dns_update_list") or die("Unable to open $$prefix/dns_update_list");
        print DNS_UPDATE_LIST "A $server. $server_ip\n";
@@ -2350,9 +2357,15 @@ sub wait_for_start($$$$$)
        if ($winbindd eq "yes") {
            print "checking for winbindd\n";
            my $count = 0;
+           my $cmd = "";
+           $cmd .= "SELFTEST_WINBINDD_SOCKET_DIR='$envvars->{SELFTEST_WINBINDD_SOCKET_DIR}' ";
+           $cmd .= "NSS_WRAPPER_PASSWD='$envvars->{NSS_WRAPPER_PASSWD}' ";
+           $cmd .= "NSS_WRAPPER_GROUP='$envvars->{NSS_WRAPPER_GROUP}' ";
+           $cmd .= Samba::bindir_path($self, "wbinfo") . " --ping-dc";
+
            do {
-               $ret = system("SELFTEST_WINBINDD_SOCKET_DIR=" . $envvars->{SELFTEST_WINBINDD_SOCKET_DIR} . " " . Samba::bindir_path($self, "wbinfo") . " --ping-dc");
                if ($ret != 0) {
+                   $ret = system($cmd);
                    sleep(1);
                }
                $count++;