[SCM] Samba Shared Repository - branch master updated

Andrew Tridgell tridge at samba.org
Wed Nov 24 03:35:01 MST 2010


The branch, master has been updated
       via  ea1889d wintest: added an IPv6 address, and use fully qualified hostname
      from  6ead7fb s3-libnetapi Load case tables earlier

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit ea1889d4b58e80c12de87f3987da49e4da1e9717
Author: Andrew Tridgell <tridge at samba.org>
Date:   Wed Nov 24 17:48:39 2010 +1100

    wintest: added an IPv6 address, and use fully qualified hostname
    
    this also makes the resolv.conf handling more robust
    
    Autobuild-User: Andrew Tridgell <tridge at samba.org>
    Autobuild-Date: Wed Nov 24 11:34:30 CET 2010 on sn-devel-104

-----------------------------------------------------------------------

Summary of changes:
 wintest/conf/abartlet.conf |    3 +-
 wintest/conf/tridge.conf   |    1 +
 wintest/test-s4-howto.py   |   64 +++++++++++++++++++++++++------------------
 wintest/wintest.py         |   19 +++++++++----
 4 files changed, 53 insertions(+), 34 deletions(-)


Changeset truncated at 500 lines:

diff --git a/wintest/conf/abartlet.conf b/wintest/conf/abartlet.conf
index b632c6e..3fa4501 100644
--- a/wintest/conf/abartlet.conf
+++ b/wintest/conf/abartlet.conf
@@ -19,7 +19,8 @@ INTERFACE            : virbr0:0
 # this is an additional IP that will be used for named to listen
 # on. It should not be the primary IP of the interface
 INTERFACE_IP          : 192.168.122.2
-INTERFACE_NET          : 192.168.122.2/24
+INTERFACE_IPV6        : 3ffe:ffff:0:f101::3
+INTERFACE_NET         : 192.168.122.2/24
 
 # how to run bind9
 BIND9	              : /usr/sbin/named
diff --git a/wintest/conf/tridge.conf b/wintest/conf/tridge.conf
index 1c7ed0b..a2bad63 100644
--- a/wintest/conf/tridge.conf
+++ b/wintest/conf/tridge.conf
@@ -19,6 +19,7 @@ INTERFACE             : virbr0:0
 # this is an additional IP that will be used for named to listen
 # on. It should not be the primary IP of the interface
 INTERFACE_IP	      : 10.0.0.2
+INTERFACE_IPV6        : 3ffe:ffff:0:f101::3
 INTERFACE_NET	      : 10.0.0.2/24
 
 # how to run bind9
diff --git a/wintest/test-s4-howto.py b/wintest/test-s4-howto.py
index ef4f75d..d12968c 100755
--- a/wintest/test-s4-howto.py
+++ b/wintest/test-s4-howto.py
@@ -4,7 +4,7 @@
 
 import sys, os
 import optparse
-import wintest
+import wintest, pexpect
 
 def check_prerequesites(t):
     t.info("Checking prerequesites")
@@ -13,6 +13,8 @@ def check_prerequesites(t):
         raise Exception("You must run this script as root")
     t.putenv("KRB5_CONFIG", '${PREFIX}/private/krb5.conf')
     t.run_cmd('ifconfig ${INTERFACE} ${INTERFACE_NET} up')
+    t.run_cmd('ifconfig ${INTERFACE} inet6 del ${INTERFACE_IPV6}/64', checkfail=False)
+    t.run_cmd('ifconfig ${INTERFACE} inet6 add ${INTERFACE_IPV6}/64 up')
 
 
 def build_s4(t):
@@ -33,8 +35,8 @@ def provision_s4(t, func_level="2008"):
     t.del_files(["var", "private"])
     t.run_cmd("rm -f etc/smb.conf")
     options=' --function-level=%s -d${DEBUGLEVEL}' % func_level
-    options += ' --option=interfaces=${INTERFACE}'
-    options += ' --host-ip=${INTERFACE_IP} --host-ip6="::"'
+    options += ' --option=interfaces="${INTERFACE} ${INTERFACE_IPV6}"'
+    options += ' --host-ip=${INTERFACE_IP} --host-ip6=${INTERFACE_IPV6}'
     options += ' --option=bindinterfacesonly=yes'
     t.run_cmd('sbin/provision --realm=${LCREALM} --domain=${DOMAIN} --adminpass=${PASSWORD1} --server-role="domain controller"' + options)
     t.run_cmd('bin/samba-tool newuser testallowed ${PASSWORD1}')
@@ -88,16 +90,21 @@ def create_shares(t):
 
 def set_nameserver(t, nameserver):
     '''set the nameserver in resolv.conf'''
-    if not getattr(t, 'resolv_conf_backup', False):
-        t.run_cmd("mv -f /etc/resolv.conf /etc/resolv.conf.wintest-bak")
-    t.write_file("/etc/resolv.conf", '''
+    t.write_file("/etc/resolv.conf.wintest", '''
 # Generated by wintest, the Samba v Windows automated testing system
 nameserver %s
 
 # your original resolv.conf appears below:
 
 ''' % t.substitute(nameserver))
-    t.run_cmd('cat /etc/resolv.conf.wintest-bak >> /etc/resolv.conf')
+    child = t.pexpect_spawn("cat /etc/resolv.conf", crlf=False)
+    i = child.expect(['your original resolv.conf appears below:', pexpect.EOF])
+    if i == 0:
+        child.expect(pexpect.EOF)
+    contents = child.before.replace('\r', '')
+    t.write_file('/etc/resolv.conf.wintest', contents, mode='a')
+    t.write_file('/etc/resolv.conf.wintest-bak', contents)
+    t.run_cmd("mv -f /etc/resolv.conf.wintest /etc/resolv.conf")
     t.resolv_conf_backup = '/etc/resolv.conf.wintest-bak';
 
 
@@ -123,21 +130,24 @@ def restart_bind(t):
 
     nameserver = t.get_nameserver()
     if nameserver == t.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")
+        raise RuntimeError("old /etc/resolv.conf must not contain %s as a nameserver, this will create loops with the generated dns configuration" % nameserver)
     t.setvar('DNSSERVER', nameserver)
 
     t.write_file("etc/named.conf", '''
 options {
-	listen-on port 53 { ${INTERFACE_IP}; };
+	listen-on port 53 { ${INTERFACE_IP};  };
+	listen-on-v6 port 53 { ${INTERFACE_IPV6}; };
 	directory 	"${PREFIX}/var/named";
 	dump-file 	"${PREFIX}/var/named/data/cache_dump.db";
 	pid-file 	"${PREFIX}/var/named/named.pid";
         statistics-file "${PREFIX}/var/named/data/named_stats.txt";
         memstatistics-file "${PREFIX}/var/named/data/named_mem_stats.txt";
-	allow-query     { ${INTERFACE_NET}; 127.0.0.0/8; };
+	allow-query     { any; };
 	recursion yes;
-	tkey-gssapi-credential "DNS/${LCREALM}";
+	tkey-gssapi-credential "DNS/${HOSTNAME}.${LCREALM}";
 	tkey-domain "${REALM}";
+        max-cache-ttl 10;
+        max-ncache-ttl 10;
 
 	forward only;
 	forwarders {
@@ -153,7 +163,7 @@ key "rndc-key" {
  
 controls {
 	inet ${INTERFACE_IP} port 953
-	allow { 127.0.0.0/8; ${INTERFACE_NET}; } keys { "rndc-key"; };
+	allow { any; } keys { "rndc-key"; };
 };
 
 include "${PREFIX}/private/named.conf";
@@ -484,7 +494,7 @@ def join_as_dc(t, vm):
     child = t.open_telnet("${WIN_HOSTNAME}", "${WIN_DOMAIN}\\administrator", "${WIN_PASS}", set_time=True)
     t.get_ipconfig(child)
     t.retry_cmd("bin/samba-tool drs showrepl ${WIN_HOSTNAME}.${WIN_REALM} -Uadministrator%${WIN_PASS}", ['INBOUND NEIGHBORS'] )
-    t.run_cmd('bin/samba-tool join ${WIN_REALM} DC -Uadministrator%${WIN_PASS} -d${DEBUGLEVEL} --option=interfaces=${INTERFACE}')
+    t.run_cmd('bin/samba-tool join ${WIN_REALM} DC -Uadministrator%${WIN_PASS} -d${DEBUGLEVEL} --option=interfaces="${INTERFACE} ${INTERFACE_IPV6"')
     t.run_cmd('bin/samba-tool drs kcc ${WIN_HOSTNAME}.${WIN_REALM} -Uadministrator@${WIN_REALM}%${WIN_PASS}')
 
 
@@ -498,12 +508,12 @@ def test_join_as_dc(t, vm):
 
     t.info("Forcing kcc runs, and replication")
     t.run_cmd('bin/samba-tool drs kcc ${WIN_HOSTNAME}.${WIN_REALM} -Uadministrator@${WIN_REALM}%${WIN_PASS}')
-    t.run_cmd('bin/samba-tool drs kcc ${HOSTNAME} -Uadministrator@${WIN_REALM}%${WIN_PASS}')
+    t.run_cmd('bin/samba-tool drs kcc ${HOSTNAME}.${WIN_REALM} -Uadministrator@${WIN_REALM}%${WIN_PASS}')
 
     t.kinit("administrator@${WIN_REALM}", "${WIN_PASS}")
     for nc in [ '${WIN_BASEDN}', 'CN=Configuration,${WIN_BASEDN}', 'CN=Schema,CN=Configuration,${WIN_BASEDN}' ]:
-        t.cmd_contains("bin/samba-tool drs replicate ${HOSTNAME} ${WIN_HOSTNAME}.${WIN_REALM} %s -k yes" % nc, ["was successful"])
-        t.cmd_contains("bin/samba-tool drs replicate ${WIN_HOSTNAME}.${WIN_REALM} ${HOSTNAME} %s -k yes" % nc, ["was successful"])
+        t.cmd_contains("bin/samba-tool drs replicate ${HOSTNAME}.${WIN_REALM} ${WIN_HOSTNAME}.${WIN_REALM} %s -k yes" % nc, ["was successful"])
+        t.cmd_contains("bin/samba-tool drs replicate ${WIN_HOSTNAME}.${WIN_REALM} ${HOSTNAME}.${WIN_REALM} %s -k yes" % nc, ["was successful"])
 
     child.sendline("net use t: \\\\${HOSTNAME}.${WIN_REALM}\\test")
     child.expect("The command completed successfully")
@@ -525,8 +535,8 @@ def test_join_as_dc(t, vm):
     t.info("Checking if new users on windows propogate to samba")
     child.sendline("net user test3 ${PASSWORD3} /add")
     child.expect("The command completed successfully")
-    t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest3%${PASSWORD3} -k no", ['Sharename', 'IPC'])
-    t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest3%${PASSWORD3} -k yes", ['Sharename', 'IPC'])
+    t.retry_cmd("bin/smbclient -L ${HOSTNAME}.${WIN_REALM} -Utest3%${PASSWORD3} -k no", ['Sharename', 'IPC'])
+    t.retry_cmd("bin/smbclient -L ${HOSTNAME}.${WIN_REALM} -Utest3%${PASSWORD3} -k yes", ['Sharename', 'IPC'])
 
     t.info("Checking propogation of user deletion")
     t.run_cmd('bin/samba-tool user delete test2 -Uadministrator@${WIN_REALM}%${WIN_PASS}')
@@ -534,9 +544,9 @@ def test_join_as_dc(t, vm):
     child.expect("The command completed successfully")
 
     t.retry_cmd("bin/smbclient -L ${WIN_HOSTNAME}.${WIN_REALM} -Utest2%${PASSWORD2} -k no", ['LOGON_FAILURE'])
-    t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest3%${PASSWORD3} -k no", ['LOGON_FAILURE'])
+    t.retry_cmd("bin/smbclient -L ${HOSTNAME}.${WIN_REALM} -Utest3%${PASSWORD3} -k no", ['LOGON_FAILURE'])
     t.retry_cmd("bin/smbclient -L ${WIN_HOSTNAME}.${WIN_REALM} -Utest2%${PASSWORD2} -k yes", ['LOGON_FAILURE'])
-    t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest3%${PASSWORD3} -k yes", ['LOGON_FAILURE'])
+    t.retry_cmd("bin/smbclient -L ${HOSTNAME}.${WIN_REALM} -Utest3%${PASSWORD3} -k yes", ['LOGON_FAILURE'])
     t.vm_poweroff("${WIN_VM}")
 
 
@@ -553,7 +563,7 @@ def join_as_rodc(t, vm):
     child = t.open_telnet("${WIN_HOSTNAME}", "${WIN_DOMAIN}\\administrator", "${WIN_PASS}", set_time=True)
     t.get_ipconfig(child)
     t.retry_cmd("bin/samba-tool drs showrepl ${WIN_HOSTNAME}.${WIN_REALM} -Uadministrator%${WIN_PASS}", ['INBOUND NEIGHBORS'] )
-    t.run_cmd('bin/samba-tool join ${WIN_REALM} RODC -Uadministrator%${WIN_PASS} -d${DEBUGLEVEL} --option=interfaces=${INTERFACE}')
+    t.run_cmd('bin/samba-tool join ${WIN_REALM} RODC -Uadministrator%${WIN_PASS} -d${DEBUGLEVEL} --option=interfaces="${INTERFACE} ${INTERFACE_IPV6}"')
     t.run_cmd('bin/samba-tool drs kcc ${WIN_HOSTNAME}.${WIN_REALM} -Uadministrator@${WIN_REALM}%${WIN_PASS}')
 
 
@@ -566,12 +576,12 @@ def test_join_as_rodc(t, vm):
     child = t.open_telnet("${WIN_HOSTNAME}", "${WIN_DOMAIN}\\administrator", "${WIN_PASS}", set_time=True)
 
     t.info("Forcing kcc runs, and replication")
-    t.run_cmd('bin/samba-tool drs kcc ${HOSTNAME} -Uadministrator@${WIN_REALM}%${WIN_PASS}')
+    t.run_cmd('bin/samba-tool drs kcc ${HOSTNAME}.${WIN_REALM} -Uadministrator@${WIN_REALM}%${WIN_PASS}')
     t.run_cmd('bin/samba-tool drs kcc ${WIN_HOSTNAME}.${WIN_REALM} -Uadministrator@${WIN_REALM}%${WIN_PASS}')
 
     t.kinit("administrator@${WIN_REALM}", "${WIN_PASS}")
     for nc in [ '${WIN_BASEDN}', 'CN=Configuration,${WIN_BASEDN}', 'CN=Schema,CN=Configuration,${WIN_BASEDN}' ]:
-        t.cmd_contains("bin/samba-tool drs replicate ${HOSTNAME} ${WIN_HOSTNAME}.${WIN_REALM} %s -k yes" % nc, ["was successful"])
+        t.cmd_contains("bin/samba-tool drs replicate ${HOSTNAME}.${WIN_REALM} ${WIN_HOSTNAME}.${WIN_REALM} %s -k yes" % nc, ["was successful"])
 
     child.sendline("net use t: \\\\${HOSTNAME}.${WIN_REALM}\\test")
     child.expect("The command completed successfully")
@@ -595,8 +605,8 @@ def test_join_as_rodc(t, vm):
     t.info("Checking if new users on windows propogate to samba")
     child.sendline("net user test3 ${PASSWORD3} /add")
     child.expect("The command completed successfully")
-    t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest3%${PASSWORD3} -k no", ['Sharename', 'IPC'])
-    t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest3%${PASSWORD3} -k yes", ['Sharename', 'IPC'])
+    t.retry_cmd("bin/smbclient -L ${HOSTNAME}.${WIN_REALM} -Utest3%${PASSWORD3} -k no", ['Sharename', 'IPC'])
+    t.retry_cmd("bin/smbclient -L ${HOSTNAME}.${WIN_REALM} -Utest3%${PASSWORD3} -k yes", ['Sharename', 'IPC'])
 
     # should this work?
     t.info("Checking if new users propogate to windows")
@@ -606,8 +616,8 @@ def test_join_as_rodc(t, vm):
     child.sendline("net user test3 /del")
     child.expect("The command completed successfully")
 
-    t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest3%${PASSWORD3} -k no", ['LOGON_FAILURE'])
-    t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest3%${PASSWORD3} -k yes", ['LOGON_FAILURE'])
+    t.retry_cmd("bin/smbclient -L ${HOSTNAME}.${WIN_REALM} -Utest3%${PASSWORD3} -k no", ['LOGON_FAILURE'])
+    t.retry_cmd("bin/smbclient -L ${HOSTNAME}.${WIN_REALM} -Utest3%${PASSWORD3} -k yes", ['LOGON_FAILURE'])
     t.vm_poweroff("${WIN_VM}")
 
 
diff --git a/wintest/wintest.py b/wintest/wintest.py
index 81e2eda..36d0659 100644
--- a/wintest/wintest.py
+++ b/wintest/wintest.py
@@ -117,6 +117,7 @@ class wintest():
         f.close()
 
     def run_cmd(self, cmd, dir=".", show=None, output=False, checkfail=True):
+        '''run a command'''
         cmd = self.substitute(cmd)
         if isinstance(cmd, list):
             self.info('$ ' + " ".join(cmd))
@@ -133,7 +134,9 @@ class wintest():
         else:
             return subprocess.call(cmd, shell=shell, cwd=dir)
 
+
     def run_child(self, cmd, dir="."):
+        '''create a child and return the Popen handle to it'''
         cwd = os.getcwd()
         cmd = self.substitute(cmd)
         if isinstance(cmd, list):
@@ -145,7 +148,7 @@ class wintest():
         else:
             shell=True
         os.chdir(dir)
-        ret = subprocess.Popen(cmd, shell=shell)
+        ret = subprocess.Popen(cmd, shell=shell, stderr=subprocess.STDOUT)
         os.chdir(cwd)
         return ret
 
@@ -200,7 +203,7 @@ class wintest():
                 retries = retries - 1
         raise RuntimeError("Failed to find %s" % contains)
 
-    def pexpect_spawn(self, cmd, timeout=60):
+    def pexpect_spawn(self, cmd, timeout=60, crlf=True):
         '''wrapper around pexpect spawn'''
         cmd = self.substitute(cmd)
         self.info("$ " + cmd)
@@ -214,8 +217,9 @@ class wintest():
             line = self.substitute(line)
             return ret.old_expect(line, timeout=timeout)
 
-        ret.old_sendline = ret.sendline
-        ret.sendline = sendline_sub
+        if crlf:
+            ret.old_sendline = ret.sendline
+            ret.sendline = sendline_sub
         ret.old_expect = ret.expect
         ret.expect = expect_sub
 
@@ -223,8 +227,11 @@ class wintest():
 
     def get_nameserver(self):
         '''Get the current nameserver from /etc/resolv.conf'''
-        child = self.pexpect_spawn('cat /etc/resolv.conf')
-        child.expect('nameserver')
+        child = self.pexpect_spawn('cat /etc/resolv.conf', crlf=False)
+        i = child.expect(['Generated by wintest', 'nameserver'])
+        if i == 0:
+            child.expect('your original resolv.conf')
+            child.expect('nameserver')
         child.expect('\d+.\d+.\d+.\d+')
         return child.after
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list