wintest: enable dns forwarding for internal dns
[ddiss/samba.git] / wintest / wintest.py
index 36711d947e4d77cfc3d76ce9cb30ea73680c992c..6257fb45ddc63a2d6cbd9343c8186e071004a226 100644 (file)
@@ -325,11 +325,6 @@ nameserver %s
     def configure_bind(self, kerberos_support=False, include=None):
         self.chdir('${PREFIX}')
 
-        nameserver = self.get_nameserver()
-        if nameserver == self.getvar('INTERFACE_IP'):
-            raise RuntimeError("old /etc/resolv.conf must not contain %s as a nameserver, this will create loops with the generated dns configuration" % nameserver)
-        self.setvar('DNSSERVER', nameserver)
-
         if self.getvar('INTERFACE_IPV6'):
             ipv6_listen = 'listen-on-v6 port 53 { ${INTERFACE_IPV6}; };'
         else:
@@ -437,8 +432,6 @@ options {
         self.info("Restarting bind9")
         self.chdir('${PREFIX}')
 
-        self.set_nameserver(self.getvar('INTERFACE_IP'))
-
         self.run_cmd("mkdir -p var/named/data")
         self.run_cmd("chown -R ${BIND_USER} var/named")
 
@@ -494,9 +487,12 @@ options {
 
         while retries > 0:
             child = self.pexpect_spawn("nc -v -z -w 1 %s %u" % (hostname, port), crlf=False, timeout=1)
-            i = child.expect(['succeeded', 'failed', pexpect.EOF, pexpect.TIMEOUT])
+            child.expect([pexpect.EOF, pexpect.TIMEOUT])
+            child.close()
+            i = child.exitstatus
             if wait_for_fail:
-                if i > 0:
+                #wait for timeout or fail
+                if i == None or i > 0:
                     return
             else:
                 if i == 0:
@@ -553,7 +549,7 @@ options {
     def get_is_dc(self, child):
         '''check if a windows machine is a domain controller'''
         child.sendline("dcdiag")
-        i = child.expect(["is not a Directory Server",
+        i = child.expect(["is not a [Directory Server|DC]",
                           "is not recognized as an internal or external command",
                           "Home Server = ",
                           "passed test Replications"])
@@ -901,6 +897,14 @@ RebootOnCompletion=No
         self.parser.add_option("--prefix", type='string', default=None, help='override install prefix')
         self.parser.add_option("--sourcetree", type='string', default=None, help='override sourcetree location')
         self.parser.add_option("--nocleanup", action='store_true', default=False, help='disable cleanup code')
+        self.parser.add_option("--use-ntvfs", action='store_true', default=False, help='use NTVFS for the fileserver')
+        self.parser.add_option("--dns-backend", type="choice",
+            choices=["SAMBA_INTERNAL", "BIND9_FLATFILE", "BIND9_DLZ", "NONE"],
+            help="The DNS server backend. SAMBA_INTERNAL is the builtin name server, " \
+                 "BIND9_FLATFILE uses bind9 text database to store zone information, " \
+                 "BIND9_DLZ uses samba4 AD to store zone information (default), " \
+                 "NONE skips the DNS setup entirely (not recommended)",
+            default="BIND9_DLZ")
 
         self.opts, self.args = self.parser.parse_args()
 
@@ -913,6 +917,11 @@ RebootOnCompletion=No
 
         self.load_config(self.opts.conf)
 
+        nameserver = self.get_nameserver()
+        if nameserver == self.getvar('INTERFACE_IP'):
+            raise RuntimeError("old /etc/resolv.conf must not contain %s as a nameserver, this will create loops with the generated dns configuration" % nameserver)
+        self.setvar('DNSSERVER', nameserver)
+
         self.set_skip(self.opts.skip)
         self.set_vms(self.opts.vms)
 
@@ -934,3 +943,20 @@ RebootOnCompletion=No
             self.info('cleaning')
             self.chdir('${SOURCETREE}/' + subdir)
             self.run_cmd('make clean')
+
+        if self.opts.use_ntvfs:
+            self.setvar('USE_NTVFS', "--use-ntvfs")
+        else:
+            self.setvar('USE_NTVFS', "")
+
+        self.setvar('NAMESERVER_BACKEND', self.opts.dns_backend)
+
+        if self.opts.dns_backend == 'SAMBA_INTERNAL':
+            self.setvar('ALLOW_DNS_UPDATES', '--option=allow dns updates = True')
+            # we need recursive queries, since host expects answers with RA-bit
+            self.setvar('DNS_RECURSIVE_QUERIES', '--option=dns recursive queries = Yes')
+            self.setvar('DNS_FORWARDER', "--option=dns forwarder = %s" % nameserver)
+        else:
+            self.setvar('ALLOW_DNS_UPDATES', '')
+            self.setvar('DNS_RECURSIVE_QUERIES', '')
+            self.setvar('DNS_FORWARDER', '')