selftest: Use resolv_wrapper in the samba4 target.
[samba.git] / selftest / target / Samba4.pm
index 342de582a768385f6bedfc9aea36926764a8739e..59188947c7f39f65b5a79a0b6081dd53c6a31264 100755 (executable)
@@ -126,6 +126,12 @@ sub check_or_start($$$)
                $ENV{NSS_WRAPPER_MODULE_SO_PATH} = $env_vars->{NSS_WRAPPER_MODULE_SO_PATH};
                $ENV{NSS_WRAPPER_MODULE_FN_PREFIX} = $env_vars->{NSS_WRAPPER_MODULE_FN_PREFIX};
 
+               if (defined($env_vars->{RESOLV_WRAPPER_CONF})) {
+                       $ENV{RESOLV_WRAPPER_CONF} = $env_vars->{RESOLV_WRAPPER_CONF};
+               } else {
+                       $ENV{RESOLV_WRAPPER_HOSTS} = $env_vars->{RESOLV_WRAPPER_HOSTS};
+               }
+
                $ENV{UID_WRAPPER} = "1";
 
                $ENV{MAKE_TEST_BINARY} = Samba::bindir_path($self, "samba");
@@ -179,6 +185,11 @@ sub wait_for_start($$)
        if ($testenv_vars->{SERVER_ROLE} eq "domain controller" and not ($testenv_vars->{NETBIOS_NAME} eq "rodc")) {
            # Add hosts file for name lookups
            $ENV{NSS_WRAPPER_HOSTS} = $testenv_vars->{NSS_WRAPPER_HOSTS};
+               if (defined($testenv_vars->{RESOLV_WRAPPER_CONF})) {
+                       $ENV{RESOLV_WRAPPER_CONF} = $testenv_vars->{RESOLV_WRAPPER_CONF};
+               } else {
+                       $ENV{RESOLV_WRAPPER_HOSTS} = $testenv_vars->{RESOLV_WRAPPER_HOSTS};
+               }
 
            print "waiting for working LDAP and a RID Set to be allocated\n";
            my $ldbsearch = Samba::bindir_path($self, "ldbsearch");
@@ -460,11 +471,11 @@ EOF
        umask $oldumask;
 }
 
-sub provision_raw_prepare($$$$$$$$$$)
+sub provision_raw_prepare($$$$$$$$$$$)
 {
        my ($self, $prefix, $server_role, $hostname,
            $domain, $realm, $functional_level,
-           $password, $kdc_ipv4) = @_;
+           $password, $kdc_ipv4, $kdc_ipv6) = @_;
        my $ctx;
        my $netbiosname = uc($hostname);
 
@@ -486,8 +497,6 @@ sub provision_raw_prepare($$$$$$$$$$)
 
        $ctx->{prefix} = $prefix;
        $ctx->{prefix_abs} = $prefix_abs;
-       
-       $ctx->{dns_host_file} = "$ENV{SELFTEST_PREFIX}/dns_host_file";
 
        $ctx->{server_role} = $server_role;
        $ctx->{hostname} = $hostname;
@@ -495,6 +504,7 @@ sub provision_raw_prepare($$$$$$$$$$)
        $ctx->{swiface} = $swiface;
        $ctx->{password} = $password;
        $ctx->{kdc_ipv4} = $kdc_ipv4;
+       $ctx->{kdc_ipv6} = $kdc_ipv6;
 
 #
 # Set smbd log level here.
@@ -532,6 +542,13 @@ sub provision_raw_prepare($$$$$$$$$$)
        $ctx->{nsswrap_passwd} = "$ctx->{etcdir}/passwd";
        $ctx->{nsswrap_group} = "$ctx->{etcdir}/group";
        $ctx->{nsswrap_hosts} = "$ENV{SELFTEST_PREFIX}/hosts";
+       if ($ENV{SAMBA_DNS_FAKING}) {
+               $ctx->{dns_host_file} = "$ENV{SELFTEST_PREFIX}/dns_host_file";
+               $ctx->{samba_dnsupdate} = "$ENV{SRCDIR_ABS}/source4/scripting/bin/samba_dnsupdate -s $ctx->{smb_conf} --all-interfaces --use-file=$ctx->{dns_host_file}";
+       } else {
+               $ctx->{resolv_conf} = "$ctx->{etcdir}/resolv.conf";
+               $ctx->{samba_dnsupdate} = "$ENV{SRCDIR_ABS}/source4/scripting/bin/samba_dnsupdate -s $ctx->{smb_conf}";
+       }
 
        $ctx->{tlsdir} = "$ctx->{privatedir}/tls";
 
@@ -553,6 +570,11 @@ sub provision_raw_prepare($$$$$$$$$$)
        push (@provision_options, "NSS_WRAPPER_PASSWD=\"$ctx->{nsswrap_passwd}\"");
        push (@provision_options, "NSS_WRAPPER_GROUP=\"$ctx->{nsswrap_group}\"");
        push (@provision_options, "NSS_WRAPPER_HOSTS=\"$ctx->{nsswrap_hosts}\"");
+       if (defined($ctx->{resolv_conf})) {
+               push (@provision_options, "RESOLV_WRAPPER_CONF=\"$ctx->{resolv_conf}\"");
+       } else {
+               push (@provision_options, "RESOLV_WRAPPER_HOSTS=\"$ctx->{dns_host_file}\"");
+       }
        if (defined($ENV{GDB_PROVISION})) {
                push (@provision_options, "gdb --args");
                if (!defined($ENV{PYTHON})) {
@@ -626,7 +648,6 @@ sub provision_raw_step1($$)
        winbindd privileged socket directory = $ctx->{winbindd_privileged_socket_dir}
        ntp signd socket directory = $ctx->{ntp_signd_socket_dir}
        winbind separator = /
-       name resolve order = file bcast
        interfaces = $ctx->{interfaces}
        tls dh params file = $ctx->{tlsdir}/dhparms.pem
        panic action = $RealBin/gdb_backtrace \%d
@@ -642,9 +663,8 @@ sub provision_raw_step1($$)
        log level = $ctx->{server_loglevel}
        lanman auth = Yes
        rndc command = true
-       dns update command = $ENV{SRCDIR_ABS}/source4/scripting/bin/samba_dnsupdate --all-interfaces --use-file=$ctx->{dns_host_file} -s $ctx->{smb_conf}
+       dns update command = $ctx->{samba_dnsupdate}
        spn update command = $ENV{SRCDIR_ABS}/source4/scripting/bin/samba_spnupdate -s $ctx->{smb_conf}
-       resolv:host file = $ctx->{dns_host_file}
        dreplsrv:periodic_startup_interval = 0
        dsdb:schema update allowed = yes
 
@@ -671,8 +691,11 @@ sub provision_raw_step1($$)
 
         #Default the KDC IP to the server's IP
        if (not defined($ctx->{kdc_ipv4})) {
-             $ctx->{kdc_ipv4} = $ctx->{ipv4};
-        }
+               $ctx->{kdc_ipv4} = $ctx->{ipv4};
+       }
+       if (not defined($ctx->{kdc_ipv6})) {
+               $ctx->{kdc_ipv6} = $ctx->{ipv6};
+       }
 
        Samba::mk_krb5_conf($ctx, "");
 
@@ -703,10 +726,22 @@ $ctx->{unix_name}:x:$ctx->{unix_gid}:
 
        my $hostname = lc($ctx->{hostname});
        open(HOSTS, ">>$ctx->{nsswrap_hosts}");
-       print HOSTS "$ctx->{ipv4} ${hostname}.$ctx->{dnsname} ${hostname}\n";
-       print HOSTS "$ctx->{ipv6} ${hostname}.$ctx->{dnsname} ${hostname}\n";
+       if ($hostname eq "localdc") {
+               print HOSTS "$ctx->{ipv4} ${hostname}.$ctx->{dnsname} $ctx->{dnsname} ${hostname}\n";
+               print HOSTS "$ctx->{ipv6} ${hostname}.$ctx->{dnsname} $ctx->{dnsname} ${hostname}\n";
+       } else {
+               print HOSTS "$ctx->{ipv4} ${hostname}.$ctx->{dnsname} ${hostname}\n";
+               print HOSTS "$ctx->{ipv6} ${hostname}.$ctx->{dnsname} ${hostname}\n";
+       }
        close(HOSTS);
 
+       if (defined($ctx->{resolv_conf})) {
+               open(RESOLV_CONF, ">$ctx->{resolv_conf}");
+               print RESOLV_CONF "nameserver $ctx->{kdc_ipv4}\n";
+               print RESOLV_CONF "nameserver $ctx->{kdc_ipv6}\n";
+               close(RESOLV_CONF);
+       }
+
        my $configuration = "--configfile=$ctx->{smb_conf}";
 
 #Ensure the config file is valid before we start
@@ -757,6 +792,12 @@ $ctx->{unix_name}:x:$ctx->{unix_gid}:
                 SERVER_ROLE => $ctx->{server_role}
        };
 
+       if (defined($ctx->{resolv_conf})) {
+               $ret->{RESOLV_WRAPPER_CONF} = $ctx->{resolv_conf};
+       } else {
+               $ret->{RESOLV_WRAPPER_HOSTS} = $ctx->{dns_host_file};
+       }
+
        return $ret;
 }
 
@@ -776,17 +817,17 @@ sub provision_raw_step2($$$)
        return $ret;
 }
 
-sub provision($$$$$$$$$)
+sub provision($$$$$$$$$$)
 {
        my ($self, $prefix, $server_role, $hostname,
            $domain, $realm, $functional_level,
-           $password, $kdc_ipv4, $extra_smbconf_options, $extra_smbconf_shares,
+           $password, $kdc_ipv4, $kdc_ipv6, $extra_smbconf_options, $extra_smbconf_shares,
            $extra_provision_options) = @_;
 
        my $ctx = $self->provision_raw_prepare($prefix, $server_role,
                                               $hostname,
                                               $domain, $realm, $functional_level,
-                                              $password, $kdc_ipv4);
+                                              $password, $kdc_ipv4, $kdc_ipv6);
 
        if (defined($extra_provision_options)) {
                push (@{$ctx->{provision_options}}, @{$extra_provision_options});
@@ -955,6 +996,7 @@ rpc_server:tcpip = no
                                   "2008",
                                   "locMEMpass3",
                                   $dcvars->{SERVER_IP},
+                                  $dcvars->{SERVER_IPV6},
                                   $extra_smb_conf, "", undef);
        unless ($ret) {
                return undef;
@@ -963,6 +1005,11 @@ rpc_server:tcpip = no
        my $samba_tool =  Samba::bindir_path($self, "samba-tool");
        my $cmd = "";
        $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
+       if (defined($ret->{RESOLV_WRAPPER_CONF})) {
+               $cmd .= "RESOLV_WRAPPER_CONF=\"$ret->{RESOLV_WRAPPER_CONF}\" ";
+       } else {
+               $cmd .= "RESOLV_WRAPPER_HOSTS=\"$ret->{RESOLV_WRAPPER_HOSTS}\" ";
+       }
        $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
        $cmd .= "$samba_tool domain join $ret->{CONFIGURATION} $dcvars->{REALM} member";
        $cmd .= " -U$dcvars->{DC_USERNAME}\%$dcvars->{DC_PASSWORD}";
@@ -1024,6 +1071,7 @@ sub provision_rpc_proxy($$$)
                                   "2008",
                                   "locRPCproxypass4",
                                   $dcvars->{SERVER_IP},
+                                  $dcvars->{SERVER_IPV6},
                                   $extra_smbconf_options, "", undef);
 
        unless ($ret) {
@@ -1035,6 +1083,11 @@ sub provision_rpc_proxy($$$)
        # The joind runs in the context of the rpc_proxy/member for now
        my $cmd = "";
        $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
+       if (defined($ret->{RESOLV_WRAPPER_CONF})) {
+               $cmd .= "RESOLV_WRAPPER_CONF=\"$ret->{RESOLV_WRAPPER_CONF}\" ";
+       } else {
+               $cmd .= "RESOLV_WRAPPER_HOSTS=\"$ret->{RESOLV_WRAPPER_HOSTS}\" ";
+       }
        $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
        $cmd .= "$samba_tool domain join $ret->{CONFIGURATION} $dcvars->{REALM} member";
        $cmd .= " -U$dcvars->{DC_USERNAME}\%$dcvars->{DC_PASSWORD}";
@@ -1099,7 +1152,8 @@ sub provision_promoted_dc($$$)
                                               "samba.example.com",
                                               "2008",
                                               $dcvars->{PASSWORD},
-                                              $dcvars->{SERVER_IP});
+                                              $dcvars->{SERVER_IP},
+                                              $dcvars->{SERVER_IPV6});
 
        push (@{$ctx->{provision_options}}, "--use-ntvfs");
 
@@ -1125,6 +1179,11 @@ sub provision_promoted_dc($$$)
        my $samba_tool =  Samba::bindir_path($self, "samba-tool");
        my $cmd = "";
        $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
+       if (defined($ret->{RESOLV_WRAPPER_CONF})) {
+               $cmd .= "RESOLV_WRAPPER_CONF=\"$ret->{RESOLV_WRAPPER_CONF}\" ";
+       } else {
+               $cmd .= "RESOLV_WRAPPER_HOSTS=\"$ret->{RESOLV_WRAPPER_HOSTS}\" ";
+       }
        $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
        $cmd .= "$samba_tool domain join $ret->{CONFIGURATION} $dcvars->{REALM} MEMBER --realm=$dcvars->{REALM}";
        $cmd .= " -U$dcvars->{DC_USERNAME}\%$dcvars->{DC_PASSWORD}";
@@ -1175,7 +1234,8 @@ sub provision_vampire_dc($$$)
                                               "samba.example.com",
                                               "2008",
                                               $dcvars->{PASSWORD},
-                                              $dcvars->{SERVER_IP});
+                                              $dcvars->{SERVER_IP},
+                                              $dcvars->{SERVER_IPV6});
 
        push (@{$ctx->{provision_options}}, "--use-ntvfs");
 
@@ -1201,6 +1261,11 @@ sub provision_vampire_dc($$$)
        my $samba_tool =  Samba::bindir_path($self, "samba-tool");
        my $cmd = "";
        $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
+       if (defined($ret->{RESOLV_WRAPPER_CONF})) {
+               $cmd .= "RESOLV_WRAPPER_CONF=\"$ret->{RESOLV_WRAPPER_CONF}\" ";
+       } else {
+               $cmd .= "RESOLV_WRAPPER_HOSTS=\"$ret->{RESOLV_WRAPPER_HOSTS}\" ";
+       }
        $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
        $cmd .= "$samba_tool domain join $ret->{CONFIGURATION} $dcvars->{REALM} DC --realm=$dcvars->{REALM}";
        $cmd .= " -U$dcvars->{DC_USERNAME}\%$dcvars->{DC_PASSWORD} --domain-critical-only";
@@ -1277,6 +1342,11 @@ sub provision_subdom_dc($$$)
        my $samba_tool =  Samba::bindir_path($self, "samba-tool");
        my $cmd = "";
        $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
+       if (defined($ret->{RESOLV_WRAPPER_CONF})) {
+               $cmd .= "RESOLV_WRAPPER_CONF=\"$ret->{RESOLV_WRAPPER_CONF}\" ";
+       } else {
+               $cmd .= "RESOLV_WRAPPER_HOSTS=\"$ret->{RESOLV_WRAPPER_HOSTS}\" ";
+       }
        $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
        $cmd .= "$samba_tool domain join $ret->{CONFIGURATION} $ctx->{dnsname} subdomain ";
        $cmd .= "--parent-domain=$dcvars->{REALM} -U$dcvars->{DC_USERNAME}\@$dcvars->{REALM}\%$dcvars->{DC_PASSWORD}";
@@ -1317,7 +1387,11 @@ sub provision_dc($$)
                                   "samba.example.com",
                                   "2008",
                                   "locDCpass1",
-                                  undef, $extra_conf_options, "", undef);
+                                  undef,
+                                  undef,
+                                  $extra_conf_options,
+                                  "",
+                                  undef);
 
        return undef unless(defined $ret);
        unless($self->add_wins_config("$prefix/private")) {
@@ -1340,7 +1414,7 @@ sub provision_fl2000dc($$)
 {
        my ($self, $prefix) = @_;
 
-       print "PROVISIONING DC...";
+       print "PROVISIONING DC WITH FOREST LEVEL 2000...";
        my $ret = $self->provision($prefix,
                                   "domain controller",
                                   "dc5",
@@ -1348,7 +1422,11 @@ sub provision_fl2000dc($$)
                                   "samba2000.example.com",
                                   "2000",
                                   "locDCpass5",
-                                  undef, "", "", undef);
+                                  undef,
+                                  undef,
+                                  "",
+                                  "",
+                                  undef);
 
        unless($self->add_wins_config("$prefix/private")) {
                warn("Unable to add wins configuration");
@@ -1362,7 +1440,7 @@ sub provision_fl2003dc($$)
 {
        my ($self, $prefix) = @_;
 
-       print "PROVISIONING DC...";
+       print "PROVISIONING DC WITH FOREST LEVEL 2003...";
         my $extra_conf_options = "allow dns updates = nonsecure and secure";
        my $ret = $self->provision($prefix,
                                   "domain controller",
@@ -1371,7 +1449,11 @@ sub provision_fl2003dc($$)
                                   "samba2003.example.com",
                                   "2003",
                                   "locDCpass6",
-                                  undef, $extra_conf_options, "", undef);
+                                  undef,
+                                  undef,
+                                  $extra_conf_options,
+                                  "",
+                                  undef);
 
        unless (defined $ret) {
                return undef;
@@ -1414,7 +1496,7 @@ sub provision_fl2008r2dc($$)
 {
        my ($self, $prefix) = @_;
 
-       print "PROVISIONING DC...";
+       print "PROVISIONING DC WITH FOREST LEVEL 2008r2...";
        my $ret = $self->provision($prefix,
                                   "domain controller",
                                   "dc7",
@@ -1422,7 +1504,11 @@ sub provision_fl2008r2dc($$)
                                   "samba2008R2.example.com",
                                   "2008_R2",
                                   "locDCpass7",
-                                  undef, "", "", undef);
+                                  undef,
+                                  undef,
+                                  "",
+                                  "",
+                                  undef);
 
        unless ($self->add_wins_config("$prefix/private")) {
                warn("Unable to add wins configuration");
@@ -1445,7 +1531,8 @@ sub provision_rodc($$$)
                                               "samba.example.com",
                                               "2008",
                                               $dcvars->{PASSWORD},
-                                              $dcvars->{SERVER_IP});
+                                              $dcvars->{SERVER_IP},
+                                              $dcvars->{SERVER_IPV6});
        unless ($ctx) {
                return undef;
        }
@@ -1484,6 +1571,11 @@ sub provision_rodc($$$)
        my $samba_tool =  Samba::bindir_path($self, "samba-tool");
        my $cmd = "";
        $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
+       if (defined($ret->{RESOLV_WRAPPER_CONF})) {
+               $cmd .= "RESOLV_WRAPPER_CONF=\"$ret->{RESOLV_WRAPPER_CONF}\" ";
+       } else {
+               $cmd .= "RESOLV_WRAPPER_HOSTS=\"$ret->{RESOLV_WRAPPER_HOSTS}\" ";
+       }
        $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
        $cmd .= "$samba_tool domain join $ret->{CONFIGURATION} $dcvars->{REALM} RODC";
        $cmd .= " -U$dcvars->{DC_USERNAME}\%$dcvars->{DC_PASSWORD}";
@@ -1498,6 +1590,7 @@ sub provision_rodc($$$)
        # so that use the RODC as kdc and test
        # the proxy code
        $ctx->{kdc_ipv4} = $ret->{SERVER_IP};
+       $ctx->{kdc_ipv6} = $ret->{SERVER_IPV6};
        Samba::mk_krb5_conf($ctx);
 
        $ret->{RODC_DC_SERVER} = $ret->{SERVER};
@@ -1613,8 +1706,11 @@ sub provision_plugin_s4_dc($$)
                                   "plugindc.samba.example.com",
                                   "2008",
                                   "locDCpass1",
-                                  undef, $extra_smbconf_options,
-                                   $extra_smbconf_shares, undef);
+                                  undef,
+                                  undef,
+                                  $extra_smbconf_options,
+                                  $extra_smbconf_shares,
+                                  undef);
 
        return undef unless(defined $ret);
        unless($self->add_wins_config("$prefix/private")) {
@@ -1647,7 +1743,10 @@ sub provision_chgdcpass($$)
                                   "chgdcpassword.samba.example.com",
                                   "2008",
                                   "chgDCpass1",
-                                  undef, $extra_conf_options, "",
+                                  undef,
+                                  undef,
+                                  $extra_conf_options,
+                                  "",
                                   $extra_provision_options);
 
        return undef unless(defined $ret);
@@ -1945,7 +2044,12 @@ sub setup_vampire_dc($$$)
                # for vampired partitions
                my $samba_tool =  Samba::bindir_path($self, "samba-tool");
                my $cmd = "";
-               $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$env->{SOCKET_WRAPPER_DEFAULT_IFACE}\"";
+               $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$env->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
+               if (defined($env->{RESOLV_WRAPPER_CONF})) {
+                       $cmd .= "RESOLV_WRAPPER_CONF=\"$env->{RESOLV_WRAPPER_CONF}\" ";
+               } else {
+                       $cmd .= "RESOLV_WRAPPER_HOSTS=\"$env->{RESOLV_WRAPPER_HOSTS}\" ";
+               }
                $cmd .= " KRB5_CONFIG=\"$env->{KRB5_CONFIG}\"";
                $cmd .= " $samba_tool drs kcc $env->{DC_SERVER}";
                $cmd .= " $env->{CONFIGURATION}";
@@ -1958,7 +2062,13 @@ sub setup_vampire_dc($$$)
                # as 'vampired' dc may add data in its local replica
                # we need to synchronize data between DCs
                my $base_dn = "DC=".join(",DC=", split(/\./, $dc_vars->{REALM}));
-               $cmd = "SOCKET_WRAPPER_DEFAULT_IFACE=\"$env->{SOCKET_WRAPPER_DEFAULT_IFACE}\"";
+               $cmd = "";
+               $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$env->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
+               if (defined($env->{RESOLV_WRAPPER_CONF})) {
+                       $cmd .= "RESOLV_WRAPPER_CONF=\"$env->{RESOLV_WRAPPER_CONF}\" ";
+               } else {
+                       $cmd .= "RESOLV_WRAPPER_HOSTS=\"$env->{RESOLV_WRAPPER_HOSTS}\" ";
+               }
                $cmd .= " KRB5_CONFIG=\"$env->{KRB5_CONFIG}\"";
                $cmd .= " $samba_tool drs replicate $env->{DC_SERVER} $env->{SERVER}";
                $cmd .= " $dc_vars->{CONFIGURATION}";