Changeset 988 for vendor/current/wintest


Ignore:
Timestamp:
Nov 24, 2016, 1:14:11 PM (9 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: update vendor to version 4.4.3

Location:
vendor/current/wintest
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • vendor/current/wintest/conf/abartlet.conf

    r740 r988  
    1717# interfaces to create
    1818INTERFACE            : virbr0:0
     19NAMED_INTERFACE            : virbr0:1
    1920
    2021# this is an additional IP that will be used for named to listen
    21 # on. It should not be the primary IP of the interface
    22 INTERFACE_IP          : 192.168.122.2
    23 INTERFACE_NET         : 192.168.122.2/24
     22# on. It should not be the primary IP of the interface.  We need one
     23# for BIND (which redirects to the other hosts) and one for Samba,
     24# which might be running our own DNS
     25
     26INTERFACE_IP          : 192.168.122.3
     27INTERFACE_NET         : 192.168.122.3/24
     28NAMED_INTERFACE_IP          : 192.168.122.2
     29NAMED_INTERFACE_NET         : 192.168.122.2/24
    2430
    2531# how to run bind9
     
    3945
    4046# a Windows7 VM
    41 WINDOWS7_HOSTNAME     : Windows7-1
    42 WINDOWS7_VM           : Windows7-1
    43 WINDOWS7_SNAPSHOT     : 1290389594
     47WINDOWS7_HOSTNAME     : Windows7-3
     48WINDOWS7_VM           : Windows7-3
     49WINDOWS7_SNAPSHOT     : 1329351855
    4450WINDOWS7_USER         : administrator
    4551WINDOWS7_PASS         : penguin
     
    4854WINXP_HOSTNAME        : WinXP-1
    4955WINXP_VM              : WinXP-1
    50 WINXP_SNAPSHOT        : 1290386227
     56WINXP_SNAPSHOT        : 1329361864
    5157WINXP_USER            : administrator
    5258WINXP_PASS            : penguin
     
    5864W2K8R2A_DOMAIN        : 2008R2HOWTO
    5965W2K8R2A_PASS          : penguin12#
    60 W2K8R2A_SNAPSHOT      : 1291076421
    61 W2K8R2A_IP            : 192.168.122.108
     66W2K8R2A_SNAPSHOT      : 1329218595
     67W2K8R2A_IP            : 192.168.122.57
    6268
    6369# this w2k8r2 VM will become a DC in the samba domain
    64 W2K8R2B_HOSTNAME      : Win2008R2-1
    65 W2K8R2B_VM            : Win2008R2-1
     70W2K8R2B_HOSTNAME      : Win2008R2-7
     71W2K8R2B_VM            : Win2008R2-7
    6672W2K8R2B_PASS          : penguin12#
    67 W2K8R2B_SNAPSHOT      : 1291077001
     73W2K8R2B_SNAPSHOT      : 1329964204
    6874
    6975# this w2k8r2 VM will become a RODC in the samba domain
    70 W2K8R2C_HOSTNAME      : Win2008R2-4
    71 W2K8R2C_VM            : Win2008R2-4
     76W2K8R2C_HOSTNAME      : Win2008R2-6
     77W2K8R2C_VM            : Win2008R2-6
    7278W2K8R2C_PASS          : penguin12#
    73 W2K8R2C_SNAPSHOT      : 1291076693
     79W2K8R2C_SNAPSHOT      : 1329785556
    7480
    7581# Samba will join this w2k3 VM as a DC
     
    7985W2K3A_DOMAIN          : 2003HOWTO
    8086W2K3A_PASS            : penguin
    81 W2K3A_SNAPSHOT        : 1297901741
     87W2K3A_SNAPSHOT        : 1314652035
    8288W2K3A_IP              : 192.168.122.91
    8389
    8490# this w2k3 VM will become a DC in the samba domain
    85 W2K3B_HOSTNAME        : Win2003R2-1
    86 W2K3B_VM              : Win2003R2-1
     91W2K3B_HOSTNAME        : Win2003R2-4
     92W2K3B_VM              : Win2003R2-4
    8793W2K3B_PASS            : penguin
    88 W2K3B_SNAPSHOT        : 1297901376
    89 W2K3B_IP              : 192.168.122.155
     94W2K3B_SNAPSHOT        : 1331186260
     95W2K3B_IP              : 192.168.122.164
    9096
    9197# this w2k3 VM will become a member in the samba domain
    92 W2K3C_HOSTNAME        : Win2003-1
    93 W2K3C_VM              : Win2003-1
     98W2K3C_HOSTNAME        : Win2003R2-3
     99W2K3C_VM              : Win2003R2-3
    94100W2K3C_PASS            : penguin
    95 W2K3C_SNAPSHOT        : 1297900649
    96 W2K3C_IP              : 192.168.122.38
     101W2K3C_SNAPSHOT        : 1329451062
     102W2K3C_IP              : 192.168.122.162
    97103
    98104
  • vendor/current/wintest/test-s3.py

    r740 r988  
    4444    t.info('Testing wbinfo')
    4545    t.chdir('${PREFIX}')
    46     t.cmd_contains("bin/wbinfo --version", ["Version 3."])
     46    t.cmd_contains("bin/wbinfo --version", ["Version 4."])
    4747    t.cmd_contains("bin/wbinfo -p", ["Ping to winbindd succeeded"])
    4848    t.retry_cmd("bin/wbinfo --online-status",
     
    7171                 "challenge/response password authentication succeeded"])
    7272
     73    t.retry_cmd("bin/wbinfo --krb5auth=${WIN_DOMAIN}/administrator%${WIN_PASS}",
     74                ["succeeded"])
     75
    7376
    7477def test_smbclient(t):
    7578    t.info('Testing smbclient')
    76     t.chdir('${PREFIX}')
    77     t.cmd_contains("bin/smbclient --version", ["Version 3."])
    78     t.cmd_contains('bin/smbclient -L ${INTERFACE_IP} -U%', ["Domain=[${WIN_DOMAIN}]", "test", "IPC$", "Samba 3."],
     79    smbclient = t.getvar("smbclient")
     80    t.chdir('${PREFIX}')
     81    t.cmd_contains("%s --version" % (smbclient), ["Version 4."])
     82    t.cmd_contains('%s -L ${INTERFACE_IP} -U%%' % (smbclient), ["Domain=[${WIN_DOMAIN}]", "test", "IPC$", "Samba 4."],
    7983                   casefold=True)
    80     child = t.pexpect_spawn('bin/smbclient //${HOSTNAME}.${WIN_REALM}/test -Uroot@${WIN_REALM}%${PASSWORD2}')
     84    child = t.pexpect_spawn('%s //${HOSTNAME}.${WIN_REALM}/test -Uroot@${WIN_REALM}%%${PASSWORD2}' % (smbclient))
    8185    child.expect("smb:")
    8286    child.sendline("dir")
     
    8993    child.sendline("rmdir testdir")
    9094
    91     child = t.pexpect_spawn('bin/smbclient //${HOSTNAME}.${WIN_REALM}/test -Uroot@${WIN_REALM}%${PASSWORD2} -k')
     95    child = t.pexpect_spawn('%s //${HOSTNAME}.${WIN_REALM}/test -Uroot@${WIN_REALM}%%${PASSWORD2} -k' % (smbclient))
    9296    child.expect("smb:")
    9397    child.sendline("dir")
     
    100104    child.sendline("rmdir testdir")
    101105
    102 
    103106def create_shares(t):
    104107    t.info("Adding test shares")
    105108    t.chdir('${PREFIX}')
    106     t.write_file("lib/smb.conf", '''
     109    t.write_file("etc/smb.conf", '''
    107110[test]
    108111       path = ${PREFIX}/test
     
    124127    t.get_ipconfig(child)
    125128    t.del_files(["var", "private"])
    126     t.write_file("lib/smb.conf", '''
     129    t.write_file("etc/smb.conf", '''
    127130[global]
    128131        netbios name = ${HOSTNAME}
     
    157160                 ['${HOSTNAME}.${WIN_REALM} has address'])
    158161
    159 
    160 def test_join_as_member(t, vm):
    161     '''test the domain join'''
    162     t.setwinvars(vm)
    163     t.info('Testing join as member')
     162def create_root_account(t, vm):
     163    t.setwinvars(vm)
     164    t.info("Creating 'root' account for testing Samba3 member server")
    164165    t.chdir('${PREFIX}')
    165166    t.run_cmd('bin/net ads user add root -Uadministrator%${WIN_PASS}')
     
    173174    child.sendline("user edit disabled root no")
    174175    child.expect("Set root's disabled flag")
     176
     177def test_join_as_member(t, vm):
     178    '''test the domain join'''
     179    t.setwinvars(vm)
     180    t.info('Testing join as member')
     181    t.chdir('${PREFIX}')
    175182    test_wbinfo(t)
    176183    test_smbclient(t)
     
    180187    '''basic s3 testing'''
    181188
    182     t.setvar("SAMBA_VERSION", "Version 3")
     189    t.setvar("SAMBA_VERSION", "Version 4")
     190    t.setvar("smbclient", "bin/smbclient")
    183191    t.check_prerequesites()
    184192    set_libpath(t)
     
    209217        create_shares(t)
    210218        start_s3(t)
     219        create_root_account(t, "W2K8R2A")
    211220        test_join_as_member(t, "W2K8R2A")
    212221
     
    229238        t.test_remote_smbclient('WINDOWS7', "%s@%s" % (dom_username, dom_realm), dom_password, args="-k")
    230239        t.test_remote_smbclient('WINDOWS7', "%s@%s" % (dom_username, dom_realm), dom_password, args="-k --option=clientusespnegoprincipal=yes")
     240        t.test_net_use('WINDOWS7', dom_realm, t.getvar("W2K8R2A_DOMAIN"), 'root', '${PASSWORD2}')
    231241
    232242    if t.have_var('WINXP_VM') and t.have_var('W2K8R2A_VM') and not t.skip("join_winxp_2008r2"):
     
    247257        t.test_remote_smbclient('WINXP', "%s@%s" % (dom_username, dom_realm), dom_password, args="-k")
    248258        t.test_remote_smbclient('WINXP', "%s@%s" % (dom_username, dom_realm), dom_password, args="-k --clientusespnegoprincipal=yes")
     259        t.test_net_use('WINXP', dom_realm, t.getvar("W2K8R2A_DOMAIN"), 'root', '${PASSWORD2}')
    249260
    250261    t.info("S3 test: All OK")
  • vendor/current/wintest/test-s4-howto.py

    r740 r988  
    2626    t.del_files(["var", "private"])
    2727    t.run_cmd("rm -f etc/smb.conf")
    28     provision=['sbin/provision',
     28    provision=['bin/samba-tool',
     29               'domain',
     30               'provision',
    2931               '--realm=${LCREALM}',
    3032               '--domain=${DOMAIN}',
     
    3638               '--host-ip=${INTERFACE_IP}',
    3739               '--option=bind interfaces only=yes',
    38                '--option=rndc command=${RNDC} -c${PREFIX}/etc/rndc.conf']
     40               '--option=rndc command=${RNDC} -c${PREFIX}/etc/rndc.conf',
     41               '--dns-backend=${NAMESERVER_BACKEND}',
     42               '${DNS_FORWARDER}']
     43    if t.getvar('USE_NTVFS'):
     44        provision.append('${USE_NTVFS}')
     45
    3946    if t.getvar('INTERFACE_IPV6'):
    4047        provision.append('--host-ip6=${INTERFACE_IPV6}')
    4148    t.run_cmd(provision)
    42     t.run_cmd('bin/samba-tool newuser testallowed ${PASSWORD1}')
    43     t.run_cmd('bin/samba-tool newuser testdenied ${PASSWORD1}')
     49    t.run_cmd('bin/samba-tool user add testallowed ${PASSWORD1}')
     50    t.run_cmd('bin/samba-tool user add testdenied ${PASSWORD1}')
    4451    t.run_cmd('bin/samba-tool group addmembers "Allowed RODC Password Replication Group" testallowed')
    4552
     
    5158    t.run_cmd('killall -9 -q samba smbd nmbd winbindd', checkfail=False)
    5259    t.run_cmd(['sbin/samba',
    53              '--option', 'panic action=gnome-terminal -e "gdb --pid %PID%"'])
     60             '--option', 'panic action=gnome-terminal -e "gdb --pid %d"', '--option', 'max protocol=nt1'])
    5461    t.port_wait("${INTERFACE_IP}", 139)
    5562
     
    5764    '''test smbclient against localhost'''
    5865    t.info('Testing smbclient')
    59     t.chdir('${PREFIX}')
    60     t.cmd_contains("bin/smbclient --version", ["Version 4.0"])
    61     t.retry_cmd('bin/smbclient -L ${INTERFACE_IP} -U%', ["netlogon", "sysvol", "IPC Service"])
    62     child = t.pexpect_spawn('bin/smbclient //${INTERFACE_IP}/netlogon -Uadministrator%${PASSWORD1}')
     66    smbclient = t.getvar("smbclient")
     67    t.chdir('${PREFIX}')
     68    t.cmd_contains("%s --version" % (smbclient), ["Version 4.1"])
     69    t.retry_cmd('%s -L ${INTERFACE_IP} -U%%' % (smbclient), ["netlogon", "sysvol", "IPC Service"])
     70    child = t.pexpect_spawn('%s //${INTERFACE_IP}/netlogon -Uadministrator%%${PASSWORD1}' % (smbclient))
    6371    child.expect("smb:")
    6472    child.sendline("dir")
     
    112120    t.chdir('${PREFIX}')
    113121    t.run_cmd("sbin/samba_dnsupdate --fail-immediately")
    114     t.rndc_cmd("flush")
     122    if not t.getvar('NAMESERVER_BACKEND') == 'SAMBA_INTERNAL':
     123        t.rndc_cmd("flush")
    115124
    116125
     
    123132def test_winjoin(t, vm):
    124133    t.info("Checking the windows join is OK")
     134    smbclient = t.getvar("smbclient")
    125135    t.chdir('${PREFIX}')
    126136    t.port_wait("${WIN_IP}", 139)
    127     t.retry_cmd('bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -Uadministrator@${LCREALM}%${PASSWORD1}', ["C$", "IPC$", "Sharename"], retries=100)
     137    t.retry_cmd('%s -L ${WIN_HOSTNAME}.${LCREALM} -Uadministrator@${LCREALM}%%${PASSWORD1}' % (smbclient), ["C$", "IPC$", "Sharename"], retries=100)
    128138    t.cmd_contains("host -t A ${WIN_HOSTNAME}.${LCREALM}.", ['has address'])
    129     t.cmd_contains('bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -Utestallowed@${LCREALM}%${PASSWORD1}', ["C$", "IPC$", "Sharename"])
    130     t.cmd_contains('bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -k no -Utestallowed@${LCREALM}%${PASSWORD1}', ["C$", "IPC$", "Sharename"])
    131     t.cmd_contains('bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -k yes -Utestallowed@${LCREALM}%${PASSWORD1}', ["C$", "IPC$", "Sharename"])
     139    t.cmd_contains('%s -L ${WIN_HOSTNAME}.${LCREALM} -Utestallowed@${LCREALM}%%${PASSWORD1}' % (smbclient), ["C$", "IPC$", "Sharename"])
     140    t.cmd_contains('%s -L ${WIN_HOSTNAME}.${LCREALM} -k no -Utestallowed@${LCREALM}%%${PASSWORD1}' % (smbclient), ["C$", "IPC$", "Sharename"])
     141    t.cmd_contains('%s -L ${WIN_HOSTNAME}.${LCREALM} -k yes -Utestallowed@${LCREALM}%%${PASSWORD1}' % (smbclient), ["C$", "IPC$", "Sharename"])
    132142    child = t.open_telnet("${WIN_HOSTNAME}", "${DOMAIN}\\administrator", "${PASSWORD1}")
    133143    child.sendline("net use t: \\\\${HOSTNAME}.${LCREALM}\\test")
     
    165175    child.expect("C:")
    166176    child.sendline("dcpromo /answer:answers.txt")
    167     i = child.expect(["You must restart this computer", "failed", "Active Directory Domain Services was not installed", "C:"], timeout=120)
     177    i = child.expect(["You must restart this computer", "failed", "Active Directory Domain Services was not installed", "C:"], timeout=240)
    168178    if i == 1 or i == 2:
    169179        child.sendline("echo off")
     
    179189    '''test that dcpromo worked'''
    180190    t.info("Checking the dcpromo join is OK")
     191    smbclient = t.getvar("smbclient")
    181192    t.chdir('${PREFIX}')
    182193    t.port_wait("${WIN_IP}", 139)
    183     t.retry_cmd("host -t A ${WIN_HOSTNAME}.${LCREALM}. ${INTERFACE_IP}",
     194    t.retry_cmd("host -t A ${WIN_HOSTNAME}.${LCREALM}. ${NAMED_INTERFACE_IP}",
    184195                ['${WIN_HOSTNAME}.${LCREALM} has address'],
    185196                retries=30, delay=10, casefold=True)
    186     t.retry_cmd('bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -Uadministrator@${LCREALM}%${PASSWORD1}', ["C$", "IPC$", "Sharename"])
     197    t.retry_cmd('%s -L ${WIN_HOSTNAME}.${LCREALM} -Uadministrator@${LCREALM}%%${PASSWORD1}' % (smbclient), ["C$", "IPC$", "Sharename"])
    187198    t.cmd_contains("host -t A ${WIN_HOSTNAME}.${LCREALM}.", ['has address'])
    188     t.cmd_contains('bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -Utestallowed@${LCREALM}%${PASSWORD1}', ["C$", "IPC$", "Sharename"])
     199    t.cmd_contains('%s -L ${WIN_HOSTNAME}.${LCREALM} -Utestallowed@${LCREALM}%%${PASSWORD1}' % (smbclient), ["C$", "IPC$", "Sharename"])
    189200
    190201    t.cmd_contains("bin/samba-tool drs kcc ${HOSTNAME}.${LCREALM} -Uadministrator@${LCREALM}%${PASSWORD1}", ['Consistency check', 'successful'])
     
    260271
    261272    t.info("Checking if new users propogate to windows")
    262     t.retry_cmd('bin/samba-tool newuser test2 ${PASSWORD2}', ["created successfully"])
    263     t.retry_cmd("bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -Utest2%${PASSWORD2} -k no", ['Sharename', 'Remote IPC'])
    264     t.retry_cmd("bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -Utest2%${PASSWORD2} -k yes", ['Sharename', 'Remote IPC'])
     273    t.retry_cmd('bin/samba-tool user add test2 ${PASSWORD2}', ["created successfully"])
     274    t.retry_cmd("%s -L ${WIN_HOSTNAME}.${LCREALM} -Utest2%%${PASSWORD2} -k no" % (smbclient), ['Sharename', 'Remote IPC'])
     275    t.retry_cmd("%s -L ${WIN_HOSTNAME}.${LCREALM} -Utest2%%${PASSWORD2} -k yes" % (smbclient), ['Sharename', 'Remote IPC'])
    265276
    266277    t.info("Checking if new users on windows propogate to samba")
     
    273284        time.sleep(2)
    274285
    275     t.retry_cmd("bin/smbclient -L ${HOSTNAME}.${LCREALM} -Utest3%${PASSWORD3} -k no", ['Sharename', 'IPC'])
    276     t.retry_cmd("bin/smbclient -L ${HOSTNAME}.${LCREALM} -Utest3%${PASSWORD3} -k yes", ['Sharename', 'IPC'])
     286    t.retry_cmd("%s -L ${HOSTNAME}.${LCREALM} -Utest3%%${PASSWORD3} -k no" % (smbclient), ['Sharename', 'IPC'])
     287    t.retry_cmd("%s -L ${HOSTNAME}.${LCREALM} -Utest3%%${PASSWORD3} -k yes" % (smbclient), ['Sharename', 'IPC'])
    277288
    278289    t.info("Checking propogation of user deletion")
     
    281292    child.expect("The command completed successfully")
    282293
    283     t.retry_cmd("bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -Utest2%${PASSWORD2} -k no", ['LOGON_FAILURE'])
    284     t.retry_cmd("bin/smbclient -L ${HOSTNAME}.${LCREALM} -Utest3%${PASSWORD3} -k no", ['LOGON_FAILURE'])
    285     t.retry_cmd("bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -Utest2%${PASSWORD2} -k yes", ['LOGON_FAILURE'])
    286     t.retry_cmd("bin/smbclient -L ${HOSTNAME}.${LCREALM} -Utest3%${PASSWORD3} -k yes", ['LOGON_FAILURE'])
     294    t.retry_cmd("%s -L ${WIN_HOSTNAME}.${LCREALM} -Utest2%%${PASSWORD2} -k no" % (smbclient), ['LOGON_FAILURE'])
     295    t.retry_cmd("%s -L ${HOSTNAME}.${LCREALM} -Utest3%%${PASSWORD3} -k no" % (smbclient), ['LOGON_FAILURE'])
     296    t.retry_cmd("%s -L ${WIN_HOSTNAME}.${LCREALM} -Utest2%%${PASSWORD2} -k yes" % (smbclient), ['LOGON_FAILURE'])
     297    t.retry_cmd("%s -L ${HOSTNAME}.${LCREALM} -Utest3%%${PASSWORD3} -k yes" % (smbclient), ['LOGON_FAILURE'])
    287298    t.vm_poweroff("${WIN_VM}")
    288299
     
    339350    '''test the RODC dcpromo worked'''
    340351    t.info("Checking the w2k8 RODC join is OK")
     352    smbclient = t.getvar("smbclient")
    341353    t.chdir('${PREFIX}')
    342354    t.port_wait("${WIN_IP}", 139)
    343355    child = t.open_telnet("${WIN_HOSTNAME}", "${DOMAIN}\\administrator", "${PASSWORD1}", set_time=True)
    344356    child.sendline("ipconfig /registerdns")
    345     t.retry_cmd('bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -Uadministrator@${LCREALM}%${PASSWORD1}', ["C$", "IPC$", "Sharename"])
     357    t.retry_cmd('%s -L ${WIN_HOSTNAME}.${LCREALM} -Uadministrator@${LCREALM}%%${PASSWORD1}' % (smbclient), ["C$", "IPC$", "Sharename"])
    346358    t.cmd_contains("host -t A ${WIN_HOSTNAME}.${LCREALM}.", ['has address'])
    347     t.cmd_contains('bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -Utestallowed@${LCREALM}%${PASSWORD1}', ["C$", "IPC$", "Sharename"])
     359    t.cmd_contains('%s -L ${WIN_HOSTNAME}.${LCREALM} -Utestallowed@${LCREALM}%%${PASSWORD1}' % (smbclient), ["C$", "IPC$", "Sharename"])
    348360    child.sendline("net use t: \\\\${HOSTNAME}.${LCREALM}\\test")
    349361    child.expect("The command completed successfully")
     
    374386
    375387    t.info("Checking if new users are available on windows")
    376     t.run_cmd('bin/samba-tool newuser test2 ${PASSWORD2}')
    377     t.retry_cmd("bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -Utest2%${PASSWORD2} -k yes", ['Sharename', 'Remote IPC'])
     388    t.run_cmd('bin/samba-tool user add test2 ${PASSWORD2}')
     389    t.retry_cmd("%s -L ${WIN_HOSTNAME}.${LCREALM} -Utest2%%${PASSWORD2} -k yes" % (smbclient), ['Sharename', 'Remote IPC'])
    378390    t.retry_cmd("bin/samba-tool drs replicate ${WIN_HOSTNAME}.${LCREALM} ${HOSTNAME}.${LCREALM} ${BASEDN}", ["was successful"])
    379     t.retry_cmd("bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -Utest2%${PASSWORD2} -k no", ['Sharename', 'Remote IPC'])
     391    t.retry_cmd("%s -L ${WIN_HOSTNAME}.${LCREALM} -Utest2%%${PASSWORD2} -k no" % (smbclient), ['Sharename', 'Remote IPC'])
    380392    t.run_cmd('bin/samba-tool user delete test2 -Uadministrator@${LCREALM}%${PASSWORD1}')
    381     t.retry_cmd("bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -Utest2%${PASSWORD2} -k yes", ['LOGON_FAILURE'])
    382     t.retry_cmd("bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -Utest2%${PASSWORD2} -k no", ['LOGON_FAILURE'])
     393    t.retry_cmd("%s -L ${WIN_HOSTNAME}.${LCREALM} -Utest2%%${PASSWORD2} -k yes" % (smbclient), ['LOGON_FAILURE'])
     394    t.retry_cmd("%s -L ${WIN_HOSTNAME}.${LCREALM} -Utest2%%${PASSWORD2} -k no" % (smbclient), ['LOGON_FAILURE'])
    383395    t.vm_poweroff("${WIN_VM}")
    384396
     
    386398def prep_join_as_dc(t, vm):
    387399    '''start VM and shutdown Samba in preperation to join a windows domain as a DC'''
    388     t.info("Starting VMs for joining ${WIN_VM} as a second DC using samba-tool join DC")
     400    t.info("Starting VMs for joining ${WIN_VM} as a second DC using samba-tool domain join DC")
    389401    t.chdir('${PREFIX}')
    390402    t.run_cmd('killall -9 -q samba smbd nmbd winbindd', checkfail=False)
    391     t.rndc_cmd('flush')
     403    if not t.getvar('NAMESERVER_BACKEND') == 'SAMBA_INTERNAL':
     404        t.rndc_cmd('flush')
    392405    t.run_cmd("rm -rf etc/smb.conf private")
    393406    child = t.open_telnet("${WIN_HOSTNAME}", "${WIN_DOMAIN}\\administrator", "${WIN_PASS}", set_time=True)
     
    397410    '''join a windows domain as a DC'''
    398411    t.setwinvars(vm)
    399     t.info("Joining ${WIN_VM} as a second DC using samba-tool join DC")
     412    t.info("Joining ${WIN_VM} as a second DC using samba-tool domain join DC")
    400413    t.port_wait("${WIN_IP}", 389)
    401414    t.retry_cmd("host -t SRV _ldap._tcp.${WIN_REALM} ${WIN_IP}", ['has SRV record'] )
    402415
    403416    t.retry_cmd("bin/samba-tool drs showrepl ${WIN_HOSTNAME}.${WIN_REALM} -Uadministrator%${WIN_PASS}", ['INBOUND NEIGHBORS'] )
    404     t.run_cmd('bin/samba-tool join ${WIN_REALM} DC -Uadministrator%${WIN_PASS} -d${DEBUGLEVEL} --option=interfaces=${INTERFACE}')
     417    t.run_cmd('bin/samba-tool domain join ${WIN_REALM} DC -Uadministrator%${WIN_PASS} -d${DEBUGLEVEL} --option=interfaces=${INTERFACE}')
    405418    t.run_cmd('bin/samba-tool drs kcc ${WIN_HOSTNAME}.${WIN_REALM} -Uadministrator@${WIN_REALM}%${WIN_PASS}')
    406419
     
    409422    '''test the join of a windows domain as a DC'''
    410423    t.info("Checking the DC join is OK")
    411     t.chdir('${PREFIX}')
    412     t.retry_cmd('bin/smbclient -L ${HOSTNAME}.${WIN_REALM} -Uadministrator@${WIN_REALM}%${WIN_PASS}', ["C$", "IPC$", "Sharename"])
     424    smbclient = t.getvar("smbclient")
     425    t.chdir('${PREFIX}')
     426    t.retry_cmd('%s -L ${HOSTNAME}.${WIN_REALM} -Uadministrator@${WIN_REALM}%%${WIN_PASS}' % (smbclient), ["C$", "IPC$", "Sharename"])
    413427    t.cmd_contains("host -t A ${HOSTNAME}.${WIN_REALM}.", ['has address'])
    414428    child = t.open_telnet("${WIN_HOSTNAME}", "${WIN_DOMAIN}\\administrator", "${WIN_PASS}", set_time=True)
     
    422436        t.cmd_contains("bin/samba-tool drs replicate ${HOSTNAME}.${WIN_REALM} ${WIN_HOSTNAME}.${WIN_REALM} %s -k yes" % nc, ["was successful"])
    423437        t.cmd_contains("bin/samba-tool drs replicate ${WIN_HOSTNAME}.${WIN_REALM} ${HOSTNAME}.${WIN_REALM} %s -k yes" % nc, ["was successful"])
     438
     439    child.sendline("ipconfig /flushdns")
     440    child.expect("Successfully flushed")
    424441
    425442    retries = 10
     
    443460
    444461    t.info("Checking if new users propogate to windows")
    445     t.retry_cmd('bin/samba-tool newuser test2 ${PASSWORD2}', ["created successfully"])
    446     t.retry_cmd("bin/smbclient -L ${WIN_HOSTNAME}.${WIN_REALM} -Utest2%${PASSWORD2} -k no", ['Sharename', 'Remote IPC'])
    447     t.retry_cmd("bin/smbclient -L ${WIN_HOSTNAME}.${WIN_REALM} -Utest2%${PASSWORD2} -k yes", ['Sharename', 'Remote IPC'])
     462    t.retry_cmd('bin/samba-tool user add test2 ${PASSWORD2}', ["created successfully"])
     463    t.retry_cmd("%s -L ${WIN_HOSTNAME}.${WIN_REALM} -Utest2%%${PASSWORD2} -k no" % (smbclient), ['Sharename', 'Remote IPC'])
     464    t.retry_cmd("%s -L ${WIN_HOSTNAME}.${WIN_REALM} -Utest2%%${PASSWORD2} -k yes" % (smbclient), ['Sharename', 'Remote IPC'])
    448465
    449466    t.info("Checking if new users on windows propogate to samba")
    450467    child.sendline("net user test3 ${PASSWORD3} /add")
    451468    child.expect("The command completed successfully")
    452     t.retry_cmd("bin/smbclient -L ${HOSTNAME}.${WIN_REALM} -Utest3%${PASSWORD3} -k no", ['Sharename', 'IPC'])
    453     t.retry_cmd("bin/smbclient -L ${HOSTNAME}.${WIN_REALM} -Utest3%${PASSWORD3} -k yes", ['Sharename', 'IPC'])
     469    t.retry_cmd("%s -L ${HOSTNAME}.${WIN_REALM} -Utest3%%${PASSWORD3} -k no" % (smbclient), ['Sharename', 'IPC'])
     470    t.retry_cmd("%s -L ${HOSTNAME}.${WIN_REALM} -Utest3%%${PASSWORD3} -k yes" % (smbclient), ['Sharename', 'IPC'])
    454471
    455472    t.info("Checking propogation of user deletion")
     
    458475    child.expect("The command completed successfully")
    459476
    460     t.retry_cmd("bin/smbclient -L ${WIN_HOSTNAME}.${WIN_REALM} -Utest2%${PASSWORD2} -k no", ['LOGON_FAILURE'])
    461     t.retry_cmd("bin/smbclient -L ${HOSTNAME}.${WIN_REALM} -Utest3%${PASSWORD3} -k no", ['LOGON_FAILURE'])
    462     t.retry_cmd("bin/smbclient -L ${WIN_HOSTNAME}.${WIN_REALM} -Utest2%${PASSWORD2} -k yes", ['LOGON_FAILURE'])
    463     t.retry_cmd("bin/smbclient -L ${HOSTNAME}.${WIN_REALM} -Utest3%${PASSWORD3} -k yes", ['LOGON_FAILURE'])
     477    t.retry_cmd("%s -L ${WIN_HOSTNAME}.${WIN_REALM} -Utest2%%${PASSWORD2} -k no" % (smbclient), ['LOGON_FAILURE'])
     478    t.retry_cmd("%s -L ${HOSTNAME}.${WIN_REALM} -Utest3%%${PASSWORD3} -k no" % (smbclient), ['LOGON_FAILURE'])
     479    t.retry_cmd("%s -L ${WIN_HOSTNAME}.${WIN_REALM} -Utest2%%${PASSWORD2} -k yes" % (smbclient), ['LOGON_FAILURE'])
     480    t.retry_cmd("%s -L ${HOSTNAME}.${WIN_REALM} -Utest3%%${PASSWORD3} -k yes" % (smbclient), ['LOGON_FAILURE'])
     481
     482    t.run_cmd('bin/samba-tool domain demote -Uadministrator@${WIN_REALM}%${WIN_PASS}')
     483
    464484    t.vm_poweroff("${WIN_VM}")
    465485
     
    468488    '''join a windows domain as a RODC'''
    469489    t.setwinvars(vm)
    470     t.info("Joining ${WIN_VM} as a RODC using samba-tool join DC")
     490    t.info("Joining ${WIN_VM} as a RODC using samba-tool domain join DC")
    471491    t.port_wait("${WIN_IP}", 389)
    472492    t.retry_cmd("host -t SRV _ldap._tcp.${WIN_REALM} ${WIN_IP}", ['has SRV record'] )
    473493    t.retry_cmd("bin/samba-tool drs showrepl ${WIN_HOSTNAME}.${WIN_REALM} -Uadministrator%${WIN_PASS}", ['INBOUND NEIGHBORS'] )
    474     t.run_cmd('bin/samba-tool join ${WIN_REALM} RODC -Uadministrator%${WIN_PASS} -d${DEBUGLEVEL} --option=interfaces=${INTERFACE}')
     494    t.run_cmd('bin/samba-tool domain join ${WIN_REALM} RODC -Uadministrator%${WIN_PASS} -d${DEBUGLEVEL} --option=interfaces=${INTERFACE}')
    475495    t.run_cmd('bin/samba-tool drs kcc ${WIN_HOSTNAME}.${WIN_REALM} -Uadministrator@${WIN_REALM}%${WIN_PASS}')
    476496
     
    479499    '''test a windows domain RODC join'''
    480500    t.info("Checking the RODC join is OK")
    481     t.chdir('${PREFIX}')
    482     t.retry_cmd('bin/smbclient -L ${HOSTNAME}.${WIN_REALM} -Uadministrator@${WIN_REALM}%${WIN_PASS}', ["C$", "IPC$", "Sharename"])
     501    smbclient = t.getvar("smbclient")
     502    t.chdir('${PREFIX}')
     503    t.retry_cmd('%s -L ${HOSTNAME}.${WIN_REALM} -Uadministrator@${WIN_REALM}%%${WIN_PASS}' % (smbclient), ["C$", "IPC$", "Sharename"])
    483504    t.cmd_contains("host -t A ${HOSTNAME}.${WIN_REALM}.", ['has address'])
    484505    child = t.open_telnet("${WIN_HOSTNAME}", "${WIN_DOMAIN}\\administrator", "${WIN_PASS}", set_time=True)
     
    521542    child.sendline("net user test3 ${PASSWORD3} /add")
    522543    child.expect("The command completed successfully")
    523     t.retry_cmd("bin/smbclient -L ${HOSTNAME}.${WIN_REALM} -Utest3%${PASSWORD3} -k no", ['Sharename', 'IPC'])
    524     t.retry_cmd("bin/smbclient -L ${HOSTNAME}.${WIN_REALM} -Utest3%${PASSWORD3} -k yes", ['Sharename', 'IPC'])
     544    t.retry_cmd("%s -L ${HOSTNAME}.${WIN_REALM} -Utest3%%${PASSWORD3} -k no" % (smbclient), ['Sharename', 'IPC'])
     545    t.retry_cmd("%s -L ${HOSTNAME}.${WIN_REALM} -Utest3%%${PASSWORD3} -k yes" % (smbclient), ['Sharename', 'IPC'])
    525546
    526547    # should this work?
    527548    t.info("Checking if new users propogate to windows")
    528     t.cmd_contains('bin/samba-tool newuser test2 ${PASSWORD2}', ['No RID Set DN'])
     549    t.cmd_contains('bin/samba-tool user add test2 ${PASSWORD2}', ['No RID Set DN'])
    529550
    530551    t.info("Checking propogation of user deletion")
     
    532553    child.expect("The command completed successfully")
    533554
    534     t.retry_cmd("bin/smbclient -L ${HOSTNAME}.${WIN_REALM} -Utest3%${PASSWORD3} -k no", ['LOGON_FAILURE'])
    535     t.retry_cmd("bin/smbclient -L ${HOSTNAME}.${WIN_REALM} -Utest3%${PASSWORD3} -k yes", ['LOGON_FAILURE'])
     555    t.retry_cmd("%s -L ${HOSTNAME}.${WIN_REALM} -Utest3%%${PASSWORD3} -k no" % (smbclient), ['LOGON_FAILURE'])
     556    t.retry_cmd("%s -L ${HOSTNAME}.${WIN_REALM} -Utest3%%${PASSWORD3} -k yes" % (smbclient), ['LOGON_FAILURE'])
    536557    t.vm_poweroff("${WIN_VM}")
    537558
     
    541562
    542563    t.setvar("SAMBA_VERSION", "Version 4")
     564    t.setvar("smbclient", "bin/smbclient4")
    543565    t.check_prerequesites()
    544566
     
    550572    if not t.skip("stop_bind"):
    551573        t.stop_bind()
     574
    552575    if not t.skip("stop_vms"):
    553576        t.stop_vms()
     
    568591    if not t.skip("smbclient"):
    569592        test_smbclient(t)
     593
    570594    if not t.skip("configure_bind2"):
    571595        t.configure_bind(kerberos_support=True, include='${PREFIX}/private/named.conf')
    572596    if not t.skip("start_bind"):
    573597        t.start_bind()
     598
    574599    if not t.skip("dns"):
    575600        test_dns(t)
     
    658683
    659684    if t.have_vm('W2K3A') and not t.skip("join_w2k3"):
     685        t.start_winvm("W2K3A")
    660686        prep_join_as_dc(t, "W2K3A")
    661687        t.run_dcpromo_as_first_dc("W2K3A", func_level='2003')
  • vendor/current/wintest/wintest.py

    r740 r988  
    2626            self.run_cmd('ifconfig ${INTERFACE} inet6 del ${INTERFACE_IPV6}/64', checkfail=False)
    2727            self.run_cmd('ifconfig ${INTERFACE} inet6 add ${INTERFACE_IPV6}/64 up')
     28
     29        self.run_cmd('ifconfig ${NAMED_INTERFACE} ${NAMED_INTERFACE_NET} up')
     30        if self.getvar('NAMED_INTERFACE_IPV6'):
     31            self.run_cmd('ifconfig ${NAMED_INTERFACE} inet6 del ${NAMED_INTERFACE_IPV6}/64', checkfail=False)
     32            self.run_cmd('ifconfig ${NAMED_INTERFACE} inet6 add ${NAMED_INTERFACE_IPV6}/64 up')
    2833
    2934    def stop_vms(self):
     
    326331        self.chdir('${PREFIX}')
    327332
    328         nameserver = self.get_nameserver()
    329         if nameserver == self.getvar('INTERFACE_IP'):
    330             raise RuntimeError("old /etc/resolv.conf must not contain %s as a nameserver, this will create loops with the generated dns configuration" % nameserver)
    331         self.setvar('DNSSERVER', nameserver)
    332 
    333         if self.getvar('INTERFACE_IPV6'):
    334             ipv6_listen = 'listen-on-v6 port 53 { ${INTERFACE_IPV6}; };'
     333        if self.getvar('NAMED_INTERFACE_IPV6'):
     334            ipv6_listen = 'listen-on-v6 port 53 { ${NAMED_INTERFACE_IPV6}; };'
    335335        else:
    336336            ipv6_listen = ''
     
    339339        if not kerberos_support:
    340340            self.setvar("NAMED_TKEY_OPTION", "")
    341         else:
     341        elif self.getvar('NAMESERVER_BACKEND') != 'SAMBA_INTERNAL':
    342342            if self.named_supports_gssapi_keytab():
    343343                self.setvar("NAMED_TKEY_OPTION",
     
    351351            self.putenv('KEYTAB_FILE', '${PREFIX}/private/dns.keytab')
    352352            self.putenv('KRB5_KTNAME', '${PREFIX}/private/dns.keytab')
    353 
    354         if include:
     353        else:
     354            self.setvar("NAMED_TKEY_OPTION", "")
     355
     356        if include and self.getvar('NAMESERVER_BACKEND') != 'SAMBA_INTERNAL':
    355357            self.setvar("NAMED_INCLUDE", 'include "%s";' % include)
    356358        else:
     
    361363        self.write_file("etc/named.conf", '''
    362364options {
    363         listen-on port 53 { ${INTERFACE_IP};  };
     365        listen-on port 53 { ${NAMED_INTERFACE_IP};  };
    364366        ${BIND_LISTEN_IPV6}
    365367        directory       "${PREFIX}/var/named";
     
    387389
    388390controls {
    389         inet ${INTERFACE_IP} port 953
     391        inet ${NAMED_INTERFACE_IP} port 953
    390392        allow { any; } keys { "rndc-key"; };
    391393};
     
    393395${NAMED_INCLUDE}
    394396''')
     397       
     398        if self.getvar('NAMESERVER_BACKEND') == 'SAMBA_INTERNAL':
     399              self.write_file('etc/named.conf',
     400                         '''
     401zone "%s" IN {
     402      type forward;
     403      forward only;
     404      forwarders {
     405         %s;
     406      };
     407};
     408''' % (self.getvar('LCREALM'), self.getvar('INTERFACE_IP')),
     409                     mode='a')
     410         
    395411
    396412        # add forwarding for the windows domains
    397413        domains = self.get_domains()
     414
    398415        for d in domains:
    399416            self.write_file('etc/named.conf',
     
    419436options {
    420437        default-key "rndc-key";
    421         default-server  ${INTERFACE_IP};
     438        default-server  ${NAMED_INTERFACE_IP};
    422439        default-port 953;
    423440};
     
    428445        '''Stop our private BIND from listening and operating'''
    429446        self.rndc_cmd("stop", checkfail=False)
    430         self.port_wait("${INTERFACE_IP}", 53, wait_for_fail=True)
     447        self.port_wait("${NAMED_INTERFACE_IP}", 53, wait_for_fail=True)
    431448
    432449        self.run_cmd("rm -rf var/named")
     
    438455        self.chdir('${PREFIX}')
    439456
    440         self.set_nameserver(self.getvar('INTERFACE_IP'))
     457        self.set_nameserver(self.getvar('NAMED_INTERFACE_IP'))
    441458
    442459        self.run_cmd("mkdir -p var/named/data")
     
    445462        self.bind_child = self.run_child("${BIND9} -u ${BIND_USER} -n 1 -c ${PREFIX}/etc/named.conf -g")
    446463
    447         self.port_wait("${INTERFACE_IP}", 53)
     464        self.port_wait("${NAMED_INTERFACE_IP}", 53)
    448465        self.rndc_cmd("flush")
    449466
     
    492509    def port_wait(self, hostname, port, retries=200, delay=3, wait_for_fail=False):
    493510        '''wait for a host to come up on the network'''
    494         self.retry_cmd("nc -v -z -w 1 %s %u" % (hostname, port), ['succeeded'],
    495                        retries=retries, delay=delay, wait_for_fail=wait_for_fail)
     511
     512        while retries > 0:
     513            child = self.pexpect_spawn("nc -v -z -w 1 %s %u" % (hostname, port), crlf=False, timeout=1)
     514            child.expect([pexpect.EOF, pexpect.TIMEOUT])
     515            child.close()
     516            i = child.exitstatus
     517            if wait_for_fail:
     518                #wait for timeout or fail
     519                if i == None or i > 0:
     520                    return
     521            else:
     522                if i == 0:
     523                    return
     524
     525            time.sleep(delay)
     526            retries -= 1
     527            self.info("retrying (retries=%u delay=%u)" % (retries, delay))
     528
     529        raise RuntimeError("gave up waiting for %s:%d" % (hostname, port))
    496530
    497531    def run_net_time(self, child):
     
    532566        self.setvar('WIN_SUBNET_MASK', child.after)
    533567        child.expect('Default Gateway')
    534         child.expect('\d+.\d+.\d+.\d+')
    535         self.setvar('WIN_DEFAULT_GATEWAY', child.after)
    536         child.expect("C:")
     568        i = child.expect(['\d+.\d+.\d+.\d+', "C:"])
     569        if i == 0:
     570            self.setvar('WIN_DEFAULT_GATEWAY', child.after)
     571            child.expect("C:")
    537572
    538573    def get_is_dc(self, child):
    539574        '''check if a windows machine is a domain controller'''
    540575        child.sendline("dcdiag")
    541         i = child.expect(["is not a Directory Server",
     576        i = child.expect(["is not a [Directory Server|DC]",
    542577                          "is not recognized as an internal or external command",
    543578                          "Home Server = ",
     
    564599
    565600    def set_noexpire(self, child, username):
    566         '''Ensure this user's password does not expire'''
     601        """Ensure this user's password does not expire"""
    567602        child.sendline('wmic useraccount where name="%s" set PasswordExpires=FALSE' % username)
    568603        child.expect("update successful")
     
    572607        '''remove the annoying telnet restrictions'''
    573608        child.sendline('tlntadmn config maxconn=1024')
    574         child.expect("The settings were successfully updated")
     609        child.expect(["The settings were successfully updated", "Access is denied"])
    575610        child.expect("C:")
    576611
     
    578613        '''remove the annoying firewall'''
    579614        child.sendline('netsh advfirewall set allprofiles state off')
    580         i = child.expect(["Ok", "The following command was not found: advfirewall set allprofiles state off"])
     615        i = child.expect(["Ok", "The following command was not found: advfirewall set allprofiles state off", "The requested operation requires elevation", "Access is denied"])
    581616        child.expect("C:")
    582617        if i == 1:
    583618            child.sendline('netsh firewall set opmode mode = DISABLE profile = ALL')
    584             i = child.expect(["Ok", "The following command was not found"])
     619            i = child.expect(["Ok", "The following command was not found", "Access is denied"])
    585620            if i != 0:
    586621                self.info("Firewall disable failed - ignoring")
     
    588623
    589624    def set_dns(self, child):
    590         child.sendline('netsh interface ip set dns "${WIN_NIC}" static ${INTERFACE_IP} primary')
     625        child.sendline('netsh interface ip set dns "${WIN_NIC}" static ${NAMED_INTERFACE_IP} primary')
    591626        i = child.expect(['C:', pexpect.EOF, pexpect.TIMEOUT], timeout=5)
    592627        if i > 0:
     
    644679        set_route = False
    645680        set_dns = False
     681        set_telnetclients = True
     682        start_telnet = True
    646683        if self.getvar('WIN_IP'):
    647684            ip = self.getvar('WIN_IP')
     
    667704            child.sendline(password)
    668705            i = child.expect(["C:",
     706                              "TelnetClients",
    669707                              "Denying new connections due to the limit on number of connections",
    670708                              "No more connections are allowed to telnet server",
     
    673711                              "Connection refused",
    674712                              pexpect.EOF])
     713            if i == 1:
     714                if set_telnetclients:
     715                    self.run_cmd('bin/net rpc group add TelnetClients -S $WIN_IP -U$WIN_USER%$WIN_PASS')
     716                    self.run_cmd('bin/net rpc group addmem TelnetClients "authenticated users" -S $WIN_IP -U$WIN_USER%$WIN_PASS')
     717                    child.close()
     718                    retries -= 1
     719                    set_telnetclients = False
     720                    self.info("retrying (retries=%u delay=%u)" % (retries, delay))
     721                    continue
     722                else:
     723                    raise RuntimeError("Failed to connect with telnet due to missing TelnetClients membership")
     724
     725            if i == 6:
     726                # This only works if it is installed and enabled, but not started.  Not entirely likely, but possible
     727                self.run_cmd('bin/net rpc service start TlntSvr -S $WIN_IP -U$WIN_USER%$WIN_PASS')
     728                child.close()
     729                start_telnet = False
     730                retries -= 1
     731                self.info("retrying (retries=%u delay=%u)" % (retries, delay))
     732                continue
     733
    675734            if i != 0:
    676735                child.close()
     
    805864        child.expect("C:")
    806865        child.sendline("dcpromo /answer:answers.txt")
    807         i = child.expect(["You must restart this computer", "failed", "Active Directory Domain Services was not installed", "C:"], timeout=240)
     866        i = child.expect(["You must restart this computer", "failed", "Active Directory Domain Services was not installed", "C:", pexpect.TIMEOUT], timeout=240)
    808867        if i == 1 or i == 2:
    809868            raise Exception("dcpromo failed")
     869        if i == 4: # timeout
     870            child = self.open_telnet("${WIN_HOSTNAME}", "administrator", "${WIN_PASS}")
     871
    810872        child.sendline("shutdown -r -t 0")
    811873        self.port_wait("${WIN_IP}", 139, wait_for_fail=True)
    812874        self.port_wait("${WIN_IP}", 139)
    813         self.retry_cmd("host -t SRV _ldap._tcp.${WIN_REALM} ${WIN_IP}", ['has SRV record'] )
     875
     876        child = self.open_telnet("${WIN_HOSTNAME}", "administrator", "${WIN_PASS}")
     877        # Check if we became a DC by now
     878        if not self.get_is_dc(child):
     879            raise Exception("dcpromo failed (and wasn't a DC even after rebooting)")
     880        # Give DNS registration a kick
     881        child.sendline("ipconfig /registerdns")
     882
     883        self.retry_cmd("host -t SRV _ldap._tcp.${WIN_REALM} ${WIN_IP}", ['has SRV record'], retries=60, delay=5 )
    814884
    815885
     
    825895        '''join a windows box to a domain'''
    826896        child = self.open_telnet("${WIN_HOSTNAME}", "${WIN_USER}", "${WIN_PASS}", set_time=True, set_ip=True, set_noexpire=True)
    827         child.sendline("ipconfig /flushdns")
    828         child.expect("C:")
    829         child.sendline("netdom join ${WIN_HOSTNAME} /Domain:%s /UserD:%s /PasswordD:%s" % (domain, username, password))
    830         child.expect("The command completed successfully")
     897        retries = 5
     898        while retries > 0:
     899            child.sendline("ipconfig /flushdns")
     900            child.expect("C:")
     901            child.sendline("netdom join ${WIN_HOSTNAME} /Domain:%s /UserD:%s /PasswordD:%s" % (domain, username, password))
     902            i = child.expect(["The command completed successfully",
     903                             "The specified domain either does not exist or could not be contacted."], timeout=120)
     904            if i == 0:
     905                break
     906            time.sleep(10)
     907            retries -= 1
     908
    831909        child.expect("C:")
    832910        child.sendline("shutdown /r -t 0")
     
    843921        self.info('Testing smbclient')
    844922        self.chdir('${PREFIX}')
    845         self.cmd_contains("bin/smbclient --version", ["${SAMBA_VERSION}"])
    846         self.retry_cmd('bin/smbclient -L ${WIN_HOSTNAME} -U%s%%%s %s' % (username, password, args), ["IPC"])
     923        smbclient = self.getvar("smbclient")
     924        self.cmd_contains("%s --version" % (smbclient), ["${SAMBA_VERSION}"])
     925        self.retry_cmd('%s -L ${WIN_HOSTNAME} -U%s%%%s %s' % (smbclient, username, password, args), ["IPC"], retries=60, delay=5)
     926
     927    def test_net_use(self, vm, realm, domain, username, password):
     928        self.setwinvars(vm)
     929        self.info('Testing net use against Samba3 member')
     930        child = self.open_telnet("${WIN_HOSTNAME}", "%s\\%s" % (domain, username), password)
     931        child.sendline("net use t: \\\\${HOSTNAME}.%s\\test" % realm)
     932        child.expect("The command completed successfully")
    847933
    848934
     
    858944        self.parser.add_option("--sourcetree", type='string', default=None, help='override sourcetree location')
    859945        self.parser.add_option("--nocleanup", action='store_true', default=False, help='disable cleanup code')
     946        self.parser.add_option("--use-ntvfs", action='store_true', default=False, help='use NTVFS for the fileserver')
     947        self.parser.add_option("--dns-backend", type="choice",
     948            choices=["SAMBA_INTERNAL", "BIND9_FLATFILE", "BIND9_DLZ", "NONE"],
     949            help="The DNS server backend. SAMBA_INTERNAL is the builtin name server (default), " \
     950                 "BIND9_FLATFILE uses bind9 text database to store zone information, " \
     951                 "BIND9_DLZ uses samba4 AD to store zone information, " \
     952                 "NONE skips the DNS setup entirely (not recommended)",
     953            default="SAMBA_INTERNAL")
    860954
    861955        self.opts, self.args = self.parser.parse_args()
     
    869963
    870964        self.load_config(self.opts.conf)
     965
     966        nameserver = self.get_nameserver()
     967        if nameserver == self.getvar('NAMED_INTERFACE_IP'):
     968            raise RuntimeError("old /etc/resolv.conf must not contain %s as a nameserver, this will create loops with the generated dns configuration" % nameserver)
     969        self.setvar('DNSSERVER', nameserver)
    871970
    872971        self.set_skip(self.opts.skip)
     
    891990            self.chdir('${SOURCETREE}/' + subdir)
    892991            self.run_cmd('make clean')
     992
     993        if self.opts.use_ntvfs:
     994            self.setvar('USE_NTVFS', "--use-ntvfs")
     995        else:
     996            self.setvar('USE_NTVFS', "")
     997
     998        self.setvar('NAMESERVER_BACKEND', self.opts.dns_backend)
     999
     1000        self.setvar('DNS_FORWARDER', "--option=dns forwarder=%s" % nameserver)
Note: See TracChangeset for help on using the changeset viewer.