selftest: Test hide new files timeout
[amitay/samba.git] / selftest / target / Samba3.pm
index 73ac1c3a17e424a211fe83dacf76421d7780aa3e..569b5d695173072068f408d397afe65842f879b9 100755 (executable)
@@ -163,48 +163,28 @@ sub check_env($$)
        return 1;
 }
 
-sub setup_env($$$)
-{
-       my ($self, $envname, $path) = @_;
-
-       $ENV{ENVNAME} = $envname;
-
-       if (defined($self->{vars}->{$envname})) {
-               return $self->{vars}->{$envname};
-       }
-
-       #
-       # Avoid hitting system krb5.conf -
-       # An env that needs Kerberos will reset this to the real
-       # value.
-       #
-       $ENV{KRB5_CONFIG} = "$path/no_krb5.conf";
-
-       if ($envname eq "nt4_dc") {
-               return $self->setup_nt4_dc("$path/nt4_dc");
-       } elsif ($envname eq "nt4_dc_schannel") {
-               return $self->setup_nt4_dc_schannel("$path/nt4_dc_schannel");
-       } elsif ($envname eq "simpleserver") {
-               return $self->setup_simpleserver("$path/simpleserver");
-       } elsif ($envname eq "fileserver") {
-               return $self->setup_fileserver("$path/fileserver");
-       } elsif ($envname eq "maptoguest") {
-               return $self->setup_maptoguest("$path/maptoguest");
-       } elsif ($envname eq "ktest") {
-               return $self->setup_ktest("$path/ktest");
-       } elsif ($envname eq "nt4_member") {
-               if (not defined($self->{vars}->{nt4_dc})) {
-                       if (not defined($self->setup_nt4_dc("$path/nt4_dc"))) {
-                               return undef;
-                       }
-               }
-               return $self->setup_nt4_member("$path/nt4_member", $self->{vars}->{nt4_dc});
-       } else {
-               return "UNKNOWN";
-       }
-}
-
-sub setup_nt4_dc($$)
+# Declare the environments Samba3 makes available.
+# To be set up, they will be called as
+#   samba3->setup_$envname($self, $path, $dep_1_vars, $dep_2_vars, ...)
+%Samba3::ENV_DEPS = (
+       # name              => [dep_1, dep_2, ...],
+       nt4_dc              => [],
+       nt4_dc_schannel     => [],
+
+       simpleserver        => [],
+       fileserver          => [],
+       maptoguest          => [],
+       ktest               => [],
+
+       nt4_member          => ["nt4_dc"],
+
+       ad_member           => ["ad_dc"],
+       ad_member_rfc2307   => ["ad_dc_ntvfs"],
+       ad_member_idmap_rid => ["ad_dc"],
+       ad_member_idmap_ad  => ["ad_dc"],
+);
+
+sub setup_nt4_dc
 {
        my ($self, $path) = @_;
 
@@ -231,6 +211,7 @@ sub setup_nt4_dc($$)
        rpc_daemon:lsasd = fork
        rpc_daemon:fssd = fork
        fss: sequence timeout = 1
+       check parent directory delete on close = yes
 ";
 
        my $vars = $self->provision($path, "SAMBA-TEST",
@@ -244,6 +225,7 @@ sub setup_nt4_dc($$)
               return undef;
        }
 
+       $vars->{DOMSID} = $vars->{SAMSID};
        $vars->{DC_SERVER} = $vars->{SERVER};
        $vars->{DC_SERVER_IP} = $vars->{SERVER_IP};
        $vars->{DC_SERVER_IPV6} = $vars->{SERVER_IPV6};
@@ -251,12 +233,10 @@ sub setup_nt4_dc($$)
        $vars->{DC_USERNAME} = $vars->{USERNAME};
        $vars->{DC_PASSWORD} = $vars->{PASSWORD};
 
-       $self->{vars}->{nt4_dc} = $vars;
-
        return $vars;
 }
 
-sub setup_nt4_dc_schannel($$)
+sub setup_nt4_dc_schannel
 {
        my ($self, $path) = @_;
 
@@ -294,6 +274,7 @@ sub setup_nt4_dc_schannel($$)
               return undef;
        }
 
+       $vars->{DOMSID} = $vars->{SAMSID};
        $vars->{DC_SERVER} = $vars->{SERVER};
        $vars->{DC_SERVER_IP} = $vars->{SERVER_IP};
        $vars->{DC_SERVER_IPV6} = $vars->{SERVER_IPV6};
@@ -301,12 +282,10 @@ sub setup_nt4_dc_schannel($$)
        $vars->{DC_USERNAME} = $vars->{USERNAME};
        $vars->{DC_PASSWORD} = $vars->{PASSWORD};
 
-       $self->{vars}->{nt4_dc_schannel} = $vars;
-
        return $vars;
 }
 
-sub setup_nt4_member($$$)
+sub setup_nt4_member
 {
        my ($self, $prefix, $nt4_dc_vars) = @_;
        my $count = 0;
@@ -345,7 +324,8 @@ sub setup_nt4_member($$$)
        }
 
        my $net = Samba::bindir_path($self, "net");
-       my $cmd = "";
+       # Add hosts file for name lookups
+       my $cmd = "NSS_WRAPPER_HOSTS='$ret->{NSS_WRAPPER_HOSTS}' ";
        $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
        $cmd .= "SELFTEST_WINBINDD_SOCKET_DIR=\"$ret->{SELFTEST_WINBINDD_SOCKET_DIR}\" ";
        $cmd .= "$net rpc join $ret->{CONFIGURATION} $nt4_dc_vars->{DOMAIN} member";
@@ -356,7 +336,8 @@ sub setup_nt4_member($$$)
            return undef;
        }
 
-       my $cmd = "";
+       # Add hosts file for name lookups
+       my $cmd = "NSS_WRAPPER_HOSTS='$ret->{NSS_WRAPPER_HOSTS}' ";
        $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
        $cmd .= "SELFTEST_WINBINDD_SOCKET_DIR=\"$ret->{SELFTEST_WINBINDD_SOCKET_DIR}\" ";
        $cmd .= "$net $ret->{CONFIGURATION} primarytrust dumpinfo | grep -q 'REDACTED SECRET VALUES'";
@@ -370,6 +351,7 @@ sub setup_nt4_member($$$)
               return undef;
        }
 
+       $ret->{DOMSID} = $nt4_dc_vars->{DOMSID};
        $ret->{DC_SERVER} = $nt4_dc_vars->{SERVER};
        $ret->{DC_SERVER_IP} = $nt4_dc_vars->{SERVER_IP};
        $ret->{DC_SERVER_IPV6} = $nt4_dc_vars->{SERVER_IPV6};
@@ -380,7 +362,7 @@ sub setup_nt4_member($$$)
        return $ret;
 }
 
-sub setup_admember($$$$)
+sub setup_ad_member
 {
        my ($self, $prefix, $dcvars) = @_;
 
@@ -452,6 +434,7 @@ sub setup_admember($$$$)
        close(USERMAP);
        $ret->{DOMAIN} = $dcvars->{DOMAIN};
        $ret->{REALM} = $dcvars->{REALM};
+       $ret->{DOMSID} = $dcvars->{DOMSID};
 
        my $ctx;
        $ctx = {};
@@ -467,7 +450,8 @@ sub setup_admember($$$$)
        $ret->{KRB5_CONFIG} = $ctx->{krb5_conf};
 
        my $net = Samba::bindir_path($self, "net");
-       my $cmd = "";
+       # Add hosts file for name lookups
+       my $cmd = "NSS_WRAPPER_HOSTS='$ret->{NSS_WRAPPER_HOSTS}' ";
        $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
        if (defined($ret->{RESOLV_WRAPPER_CONF})) {
                $cmd .= "RESOLV_WRAPPER_CONF=\"$ret->{RESOLV_WRAPPER_CONF}\" ";
@@ -500,13 +484,10 @@ sub setup_admember($$$$)
        $ret->{DC_USERNAME} = $dcvars->{USERNAME};
        $ret->{DC_PASSWORD} = $dcvars->{PASSWORD};
 
-       # Special case, this is called from Samba4.pm but needs to use the Samba3 check_env and get_log_env
-       $ret->{target} = $self;
-
        return $ret;
 }
 
-sub setup_admember_rfc2307($$$$)
+sub setup_ad_member_rfc2307
 {
        my ($self, $prefix, $dcvars) = @_;
 
@@ -547,6 +528,7 @@ sub setup_admember_rfc2307($$$$)
        close(USERMAP);
        $ret->{DOMAIN} = $dcvars->{DOMAIN};
        $ret->{REALM} = $dcvars->{REALM};
+       $ret->{DOMSID} = $dcvars->{DOMSID};
 
        my $ctx;
        my $prefix_abs = abs_path($prefix);
@@ -563,7 +545,8 @@ sub setup_admember_rfc2307($$$$)
        $ret->{KRB5_CONFIG} = $ctx->{krb5_conf};
 
        my $net = Samba::bindir_path($self, "net");
-       my $cmd = "";
+       # Add hosts file for name lookups
+       my $cmd = "NSS_WRAPPER_HOSTS='$ret->{NSS_WRAPPER_HOSTS}' ";
        $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
        if (defined($ret->{RESOLV_WRAPPER_CONF})) {
                $cmd .= "RESOLV_WRAPPER_CONF=\"$ret->{RESOLV_WRAPPER_CONF}\" ";
@@ -596,13 +579,10 @@ sub setup_admember_rfc2307($$$$)
        $ret->{DC_USERNAME} = $dcvars->{USERNAME};
        $ret->{DC_PASSWORD} = $dcvars->{PASSWORD};
 
-       # Special case, this is called from Samba4.pm but needs to use the Samba3 check_env and get_log_env
-       $ret->{target} = $self;
-
        return $ret;
 }
 
-sub setup_ad_member_idmap_rid($$$$)
+sub setup_ad_member_idmap_rid
 {
        my ($self, $prefix, $dcvars) = @_;
 
@@ -635,6 +615,7 @@ sub setup_ad_member_idmap_rid($$$$)
        close(USERMAP);
        $ret->{DOMAIN} = $dcvars->{DOMAIN};
        $ret->{REALM} = $dcvars->{REALM};
+       $ret->{DOMSID} = $dcvars->{DOMSID};
 
        my $ctx;
        my $prefix_abs = abs_path($prefix);
@@ -651,7 +632,8 @@ sub setup_ad_member_idmap_rid($$$$)
        $ret->{KRB5_CONFIG} = $ctx->{krb5_conf};
 
        my $net = Samba::bindir_path($self, "net");
-       my $cmd = "";
+       # Add hosts file for name lookups
+       my $cmd = "NSS_WRAPPER_HOSTS='$ret->{NSS_WRAPPER_HOSTS}' ";
        $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
        if (defined($ret->{RESOLV_WRAPPER_CONF})) {
                $cmd .= "RESOLV_WRAPPER_CONF=\"$ret->{RESOLV_WRAPPER_CONF}\" ";
@@ -684,13 +666,10 @@ sub setup_ad_member_idmap_rid($$$$)
        $ret->{DC_USERNAME} = $dcvars->{USERNAME};
        $ret->{DC_PASSWORD} = $dcvars->{PASSWORD};
 
-       # Special case, this is called from Samba4.pm but needs to use the Samba3 check_env and get_log_env
-       $ret->{target} = $self;
-
        return $ret;
 }
 
-sub setup_ad_member_idmap_ad($$$$)
+sub setup_ad_member_idmap_ad
 {
        my ($self, $prefix, $dcvars) = @_;
 
@@ -724,6 +703,7 @@ sub setup_ad_member_idmap_ad($$$$)
        close(USERMAP);
        $ret->{DOMAIN} = $dcvars->{DOMAIN};
        $ret->{REALM} = $dcvars->{REALM};
+       $ret->{DOMSID} = $dcvars->{DOMSID};
 
        my $ctx;
        my $prefix_abs = abs_path($prefix);
@@ -740,7 +720,8 @@ sub setup_ad_member_idmap_ad($$$$)
        $ret->{KRB5_CONFIG} = $ctx->{krb5_conf};
 
        my $net = Samba::bindir_path($self, "net");
-       my $cmd = "";
+       # Add hosts file for name lookups
+       my $cmd = "NSS_WRAPPER_HOSTS='$ret->{NSS_WRAPPER_HOSTS}' ";
        $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
        if (defined($ret->{RESOLV_WRAPPER_CONF})) {
                $cmd .= "RESOLV_WRAPPER_CONF=\"$ret->{RESOLV_WRAPPER_CONF}\" ";
@@ -773,13 +754,10 @@ sub setup_ad_member_idmap_ad($$$$)
        $ret->{DC_USERNAME} = $dcvars->{USERNAME};
        $ret->{DC_PASSWORD} = $dcvars->{PASSWORD};
 
-       # Special case, this is called from Samba4.pm but needs to use the Samba3 check_env and get_log_env
-       $ret->{target} = $self;
-
        return $ret;
 }
 
-sub setup_simpleserver($$)
+sub setup_simpleserver
 {
        my ($self, $path) = @_;
 
@@ -790,13 +768,58 @@ sub setup_simpleserver($$)
        my $simpleserver_options = "
        lanman auth = yes
        ntlm auth = yes
-       vfs objects = xattr_tdb streams_depot time_audit full_audit
+       vfs objects = xattr_tdb streams_depot
        change notify = no
        smb encrypt = off
 
-       full_audit:syslog = no
-       full_audit:success = none
-       full_audit:failure = none
+[vfs_aio_pthread]
+       path = $prefix_abs/share
+       read only = no
+       vfs objects = aio_pthread
+       aio_pthread:aio open = yes
+       smbd:async dosmode = no
+
+[vfs_aio_pthread_async_dosmode_default1]
+       path = $prefix_abs/share
+       read only = no
+       vfs objects = aio_pthread
+       store dos attributes = yes
+       aio_pthread:aio open = yes
+       smbd:async dosmode = yes
+
+[vfs_aio_pthread_async_dosmode_default2]
+       path = $prefix_abs/share
+       read only = no
+       vfs objects = aio_pthread xattr_tdb
+       store dos attributes = yes
+       aio_pthread:aio open = yes
+       smbd:async dosmode = yes
+
+[vfs_aio_pthread_async_dosmode_force_sync1]
+       path = $prefix_abs/share
+       read only = no
+       vfs objects = aio_pthread
+       store dos attributes = yes
+       aio_pthread:aio open = yes
+       smbd:async dosmode = yes
+       # This simulates non linux systems
+       smbd:force sync user path safe threadpool = yes
+       smbd:force sync user chdir safe threadpool = yes
+       smbd:force sync root path safe threadpool = yes
+       smbd:force sync root chdir safe threadpool = yes
+
+[vfs_aio_pthread_async_dosmode_force_sync2]
+       path = $prefix_abs/share
+       read only = no
+       vfs objects = aio_pthread xattr_tdb
+       store dos attributes = yes
+       aio_pthread:aio open = yes
+       smbd:async dosmode = yes
+       # This simulates non linux systems
+       smbd:force sync user path safe threadpool = yes
+       smbd:force sync user chdir safe threadpool = yes
+       smbd:force sync root path safe threadpool = yes
+       smbd:force sync root chdir safe threadpool = yes
 
 [vfs_aio_fork]
        path = $prefix_abs/share
@@ -815,6 +838,10 @@ sub setup_simpleserver($$)
        path = $prefix_abs/share
        vfs objects =
        smb encrypt = desired
+
+[hidenewfiles]
+       path = $prefix_abs/share
+       hide new files timeout = 5
 ";
 
        my $vars = $self->provision($path, "WORKGROUP",
@@ -828,12 +855,10 @@ sub setup_simpleserver($$)
               return undef;
        }
 
-       $self->{vars}->{simpleserver} = $vars;
-
        return $vars;
 }
 
-sub setup_fileserver($$)
+sub setup_fileserver
 {
        my ($self, $path) = @_;
        my $prefix_abs = abs_path($path);
@@ -866,6 +891,9 @@ sub setup_fileserver($$)
        push(@dirs, "$dfree_share_dir/subdir2");
        push(@dirs, "$dfree_share_dir/subdir3");
 
+       my $quotadir_dir="$share_dir/quota";
+       push(@dirs, $quotadir_dir);
+
        my $valid_users_sharedir="$share_dir/valid_users";
        push(@dirs,$valid_users_sharedir);
 
@@ -892,6 +920,8 @@ sub setup_fileserver($$)
        usershare allow guests = yes
        usershare prefix allow list = $usershare_sharedir
 
+       get quota command = $prefix_abs/getset_quota.py
+       set quota command = $prefix_abs/getset_quota.py
 [lowercase]
        path = $lower_case_share_dir
        comment = smb username is [%U]
@@ -960,7 +990,6 @@ sub setup_fileserver($$)
               return undef;
        }
 
-       $self->{vars}->{fileserver} = $vars;
 
        mkdir($_, 0777) foreach(@dirs);
 
@@ -1012,7 +1041,7 @@ sub setup_fileserver($$)
        return $vars;
 }
 
-sub setup_ktest($$$)
+sub setup_ktest
 {
        my ($self, $prefix) = @_;
 
@@ -1067,6 +1096,8 @@ $ret->{USERNAME} = KTEST\\Administrator
 #This is the secrets.tdb created by 'net ads join' from Samba3 to a
 #Samba4 DC with the same parameters as are being used here.  The
 #domain SID is S-1-5-21-1071277805-689288055-3486227160
+       $ret->{SAMSID} = "S-1-5-21-1911091480-1468226576-2729736297";
+       $ret->{DOMSID} = "S-1-5-21-1071277805-689288055-3486227160";
 
        system("cp $self->{srcdir}/source3/selftest/ktest-secrets.tdb $prefix/private/secrets.tdb");
        chmod 0600, "$prefix/private/secrets.tdb";
@@ -1116,7 +1147,7 @@ $ret->{USERNAME} = KTEST\\Administrator
        return $ret;
 }
 
-sub setup_maptoguest($$)
+sub setup_maptoguest
 {
        my ($self, $path) = @_;
 
@@ -1138,8 +1169,6 @@ ntlm auth = yes
               return undef;
        }
 
-       $self->{vars}->{s3maptoguest} = $vars;
-
        return $vars;
 }
 
@@ -1404,6 +1433,7 @@ sub provision($$$$$$$$$)
        ## setup the various environment variables we need
        ##
 
+       my $samsid = Samba::random_domain_sid();
        my $swiface = Samba::get_interface($server);
        my %ret = ();
        my %createuser_env = ();
@@ -1742,7 +1772,11 @@ sub provision($$$$$$$$$)
        dos filemode = yes
        strict rename = yes
        strict sync = yes
-       vfs objects = acl_xattr fake_acls xattr_tdb streams_depot
+       vfs objects = acl_xattr fake_acls xattr_tdb streams_depot time_audit full_audit
+
+       full_audit:syslog = no
+       full_audit:success = none
+       full_audit:failure = none
 
        printing = vlp
        print command = $bindir_abs/vlp tdbfile=$lockdir/vlp.tdb print %p %s
@@ -1929,6 +1963,16 @@ sub provision($$$$$$$$$)
 
 [vfs_fruit]
        path = $shrdir
+       vfs objects = catia fruit streams_xattr acl_xattr xattr_tdb
+       fruit:resource = file
+       fruit:metadata = netatalk
+       fruit:locking = netatalk
+       fruit:encoding = native
+       fruit:veto_appledouble = no
+
+[vfs_fruit_xattr]
+       path = $shrdir
+        # This is used by vfs.fruit tests that require real fs xattr
        vfs objects = catia fruit streams_xattr acl_xattr
        fruit:resource = file
        fruit:metadata = netatalk
@@ -1938,34 +1982,52 @@ sub provision($$$$$$$$$)
 
 [vfs_fruit_metadata_stream]
        path = $shrdir
-       vfs objects = fruit streams_xattr acl_xattr
+       vfs objects = fruit streams_xattr acl_xattr xattr_tdb
        fruit:resource = file
        fruit:metadata = stream
        fruit:veto_appledouble = no
 
 [vfs_fruit_stream_depot]
        path = $shrdir
-       vfs objects = fruit streams_depot acl_xattr
+       vfs objects = fruit streams_depot acl_xattr xattr_tdb
        fruit:resource = stream
        fruit:metadata = stream
        fruit:veto_appledouble = no
 
 [vfs_wo_fruit]
        path = $shrdir
-       vfs objects = streams_xattr acl_xattr
+       vfs objects = streams_xattr acl_xattr xattr_tdb
 
 [vfs_wo_fruit_stream_depot]
        path = $shrdir
-       vfs objects = streams_depot acl_xattr
+       vfs objects = streams_depot acl_xattr xattr_tdb
 
 [vfs_fruit_timemachine]
        path = $shrdir
-       vfs objects = fruit streams_xattr acl_xattr
+       vfs objects = fruit streams_xattr acl_xattr xattr_tdb
        fruit:resource = file
        fruit:metadata = stream
        fruit:time machine = yes
        fruit:time machine max size = 32K
 
+[vfs_fruit_wipe_intentionally_left_blank_rfork]
+       path = $shrdir
+       vfs objects = fruit streams_xattr acl_xattr xattr_tdb
+       fruit:resource = file
+       fruit:metadata = stream
+       fruit:wipe_intentionally_left_blank_rfork = true
+       fruit:delete_empty_adfiles = false
+       fruit:veto_appledouble = no
+
+[vfs_fruit_delete_empty_adfiles]
+       path = $shrdir
+       vfs objects = fruit streams_xattr acl_xattr xattr_tdb
+       fruit:resource = file
+       fruit:metadata = stream
+       fruit:wipe_intentionally_left_blank_rfork = true
+       fruit:delete_empty_adfiles = true
+       fruit:veto_appledouble = no
+
 [badname-tmp]
        path = $badnames_shrdir
        guest ok = yes
@@ -2130,11 +2192,21 @@ sub provision($$$$$$$$$)
        vfs objects = acl_xattr fake_acls xattr_tdb fake_dfq
        admin users = $unix_name
        include = $dfqconffile
+[dfq_cache]
+       path = $shrdir/dfree
+       vfs objects = acl_xattr fake_acls xattr_tdb fake_dfq
+       admin users = $unix_name
+       include = $dfqconffile
+       dfree cache time = 60
 [dfq_owner]
        path = $shrdir/dfree
        vfs objects = acl_xattr fake_acls xattr_tdb fake_dfq
        inherit owner = yes
        include = $dfqconffile
+[quotadir]
+       path = $shrdir/quota
+       admin users = $unix_name
+
 [acl_xattr_ign_sysacl_posix]
        copy = tmp
        acl_xattr:ignore system acls = yes
@@ -2163,6 +2235,10 @@ sub provision($$$$$$$$$)
        kernel oplocks = yes
        vfs objects = streams_xattr xattr_tdb
 
+[streams_xattr]
+       copy = tmp
+       vfs objects = streams_xattr xattr_tdb
+
 [compound_find]
        copy = tmp
        smbd:find async delay usec = 10000
@@ -2170,9 +2246,37 @@ sub provision($$$$$$$$$)
        copy = tmp
        vfs objects = error_inject
        include = $libdir/error_inject.conf
+
+[delay_inject]
+       copy = tmp
+       vfs objects = delay_inject
+       kernel share modes = no
+       kernel oplocks = no
+       posix locking = no
+       include = $libdir/delay_inject.conf
+
+[aio_delay_inject]
+       copy = tmp
+       vfs objects = delay_inject
+       delay_inject:pread_send = 2000
+       delay_inject:pwrite_send = 2000
+
+[delete_readonly]
+       path = $prefix_abs/share
+       delete readonly = yes
        ";
        close(CONF);
 
+       my $net = Samba::bindir_path($self, "net");
+       my $cmd = "";
+       $cmd .= "SMB_CONF_PATH=\"$conffile\" ";
+       $cmd .= "$net setlocalsid $samsid";
+
+       if (system($cmd) != 0) {
+           warn("Join failed\n$cmd");
+           return undef;
+       }
+
        unless (open(DFQCONF, ">$dfqconffile")) {
                warn("Unable to open $dfqconffile");
                return undef;
@@ -2263,9 +2367,9 @@ force_user:x:$gid_force_user:
        $createuser_env{NSS_WRAPPER_HOSTS} = $nss_wrapper_hosts;
        $createuser_env{NSS_WRAPPER_HOSTNAME} = "${hostname}.samba.example.com";
        if ($ENV{SAMBA_DNS_FAKING}) {
-               $createuser_env{RESOLV_WRAPPER_CONF} = $resolv_conf;
-       } else {
                $createuser_env{RESOLV_WRAPPER_HOSTS} = $dns_host_file;
+       } else {
+               $createuser_env{RESOLV_WRAPPER_CONF} = $resolv_conf;
        }
 
        createuser($self, $unix_name, $password, $conffile, \%createuser_env) || die("Unable to create user");
@@ -2296,6 +2400,7 @@ force_user:x:$gid_force_user:
        $ret{USERNAME} = $unix_name;
        $ret{USERID} = $unix_uid;
        $ret{DOMAIN} = $domain;
+       $ret{SAMSID} = $samsid;
        $ret{NETBIOSNAME} = $server;
        $ret{PASSWORD} = $password;
        $ret{PIDDIR} = $piddir;
@@ -2411,6 +2516,9 @@ sub wait_for_start($$$$$)
        $netcmd .= "NSS_WRAPPER_GROUP='$envvars->{NSS_WRAPPER_GROUP}' ";
        $netcmd .= Samba::bindir_path($self, "net") ." $envvars->{CONFIGURATION} ";
 
+       $cmd = $netcmd . "groupmap delete ntgroup=domusers";
+       $ret = system($cmd);
+
        $cmd = $netcmd . "groupmap add rid=513 unixgroup=domusers type=domain";
        $ret = system($cmd);
        if ($ret != 0) {
@@ -2418,6 +2526,9 @@ sub wait_for_start($$$$$)
                return 1;
        }
 
+       $cmd = $netcmd . "groupmap delete ntgroup=domadmins";
+       $ret = system($cmd);
+
        $cmd = $netcmd . "groupmap add rid=512 unixgroup=domadmins type=domain";
        $ret = system($cmd);
        if ($ret != 0) {
@@ -2425,6 +2536,9 @@ sub wait_for_start($$$$$)
                return 1;
        }
 
+       $cmd = $netcmd . "groupmap delete ntgroup=everyone";
+       $ret = system($cmd);
+
        $cmd = $netcmd . "groupmap add sid=S-1-1-0 unixgroup=everyone type=builtin";
        $ret = system($cmd);
        if ($ret != 0) {
@@ -2455,6 +2569,8 @@ sub wait_for_start($$$$$)
        }
        if ($create_builtin_users eq "yes") {
            $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, "net") . " $envvars->{CONFIGURATION} ";
            $cmd .= "sam createbuiltingroup Users";
            $ret = system($cmd);
@@ -2463,8 +2579,16 @@ sub wait_for_start($$$$$)
                teardown_env($self, $envvars);
                return 0;
            }
-           system(Samba::bindir_path($self, "net") . " $envvars->{CONFIGURATION} cache del IDMAP/SID2XID/S-1-5-32-545");
-           $ret = system("SELFTEST_WINBINDD_SOCKET_DIR=" . $envvars->{SELFTEST_WINBINDD_SOCKET_DIR} . " " . Samba::bindir_path($self, "wbinfo") . " --sid-to-gid=S-1-5-32-545");
+
+           $cmd = Samba::bindir_path($self, "net") . " $envvars->{CONFIGURATION} ";
+           $cmd .= "cache del IDMAP/SID2XID/S-1-5-32-545";
+           system($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") . " --sid-to-gid=S-1-5-32-545";
+           $ret = system($cmd);
            if ($ret != 0) {
                print "Missing \"BUILTIN\\Users\", did net sam createbuiltingroup Users fail?\n";
                teardown_env($self, $envvars);