acl:search...
[metze/samba/wip.git] / selftest / target / Samba4.pm
index 7ac337425b4548e51758ecab17380a6d91af31eb..916f150835b25a977adce9491c3beb53ed6cc3eb 100644 (file)
@@ -424,7 +424,7 @@ sub provision_raw_prepare($$$$$$$$$$)
 {
        my ($self, $prefix, $server_role, $hostname,
            $domain, $realm, $functional_level,
-           $password, $kdc_ipv4, $use_ntvfs) = @_;
+           $password, $kdc_ipv4) = @_;
        my $ctx;
        my $netbiosname = uc($hostname);
 
@@ -456,6 +456,9 @@ sub provision_raw_prepare($$$$$$$$$$)
        $ctx->{password} = $password;
        $ctx->{kdc_ipv4} = $kdc_ipv4;
 
+#
+# Set smbd log level here.
+#
        $ctx->{server_loglevel} =$ENV{SERVER_LOG_LEVEL} || 1;
        $ctx->{username} = "Administrator";
        $ctx->{domain} = $domain;
@@ -478,6 +481,7 @@ sub provision_raw_prepare($$$$$$$$$$)
        $ctx->{privatedir} = "$prefix_abs/private";
        $ctx->{ncalrpcdir} = "$prefix_abs/ncalrpc";
        $ctx->{lockdir} = "$prefix_abs/lockdir";
+       $ctx->{logdir} = "$prefix_abs/logs";
        $ctx->{statedir} = "$prefix_abs/statedir";
        $ctx->{cachedir} = "$prefix_abs/cachedir";
        $ctx->{winbindd_socket_dir} = "$prefix_abs/winbindd_socket";
@@ -495,6 +499,7 @@ sub provision_raw_prepare($$$$$$$$$$)
        push(@{$ctx->{directories}}, $ctx->{etcdir});
        push(@{$ctx->{directories}}, $ctx->{piddir});
        push(@{$ctx->{directories}}, $ctx->{lockdir});
+       push(@{$ctx->{directories}}, $ctx->{logdir});
        push(@{$ctx->{directories}}, $ctx->{statedir});
        push(@{$ctx->{directories}}, $ctx->{cachedir});
 
@@ -520,7 +525,9 @@ sub provision_raw_prepare($$$$$$$$$$)
        if (defined($ENV{PYTHON})) {
                push (@provision_options, $ENV{PYTHON});
        }
-       push (@provision_options, "$self->{srcdir}/source4/setup/provision");
+       push (@provision_options, Samba::bindir_path($self, "samba-tool"));
+       push (@provision_options, "domain");
+       push (@provision_options, "provision");
        push (@provision_options, "--configfile=$ctx->{smb_conf}");
        push (@provision_options, "--host-name=$ctx->{hostname}");
        push (@provision_options, "--host-ip=$ctx->{ipv4}");
@@ -533,11 +540,6 @@ sub provision_raw_prepare($$$$$$$$$$)
        push (@provision_options, "--root=$ctx->{unix_name}");
        push (@provision_options, "--server-role=\"$ctx->{server_role}\"");
        push (@provision_options, "--function-level=\"$ctx->{functional_level}\"");
-       push (@provision_options, "--dns-backend=BIND9_DLZ");
-
-       if ($use_ntvfs) {
-           push (@provision_options, "--use-ntvfs");
-       }
 
        @{$ctx->{provision_options}} = @provision_options;
 
@@ -557,7 +559,7 @@ sub provision_raw_step1($$)
                warn("can't open $ctx->{smb_conf}$?");
                return undef;
        }
-       my $acl = "false";
+       my $acl = "true";
        $acl = "true" if (defined $ENV{WITH_ACL});
        print CONFFILE "
 [global]
@@ -582,12 +584,13 @@ sub provision_raw_step1($$)
        panic action = $RealBin/gdb_backtrace \%d
        wins support = yes
        server role = $ctx->{server_role}
-       server services = +echo +dns +smb -s3fs
+       server services = +echo +smb -s3fs
         dcerpc endpoint servers = +winreg +srvsvc
        notify:inotify = false
        ldb:nosync = true
 #We don't want to pass our self-tests if the PAC code is wrong
        gensec:require_pac = true
+       log file = $ctx->{logdir}/log.\%m
        log level = $ctx->{server_loglevel}
        lanman auth = Yes
        rndc command = true
@@ -597,7 +600,7 @@ sub provision_raw_step1($$)
        dreplsrv:periodic_startup_interval = 0
        dsdb:schema update allowed = yes
 
-       passdb backend = samba4
+        vfs objects = dfs_samba4 acl_xattr fake_acls xattr_tdb streams_depot
 
        # remove this again, when our smb2 client library
        # supports signin on compound related requests
@@ -670,6 +673,7 @@ nogroup:x:65534:nobody
                LOCKDIR => $ctx->{lockdir},
                STATEDIR => $ctx->{statedir},
                CACHEDIR => $ctx->{cachedir},
+               PRIVATEDIR => $ctx->{privatedir},
                SERVERCONFFILE => $ctx->{smb_conf},
                CONFIGURATION => $configuration,
                SOCKET_WRAPPER_DEFAULT_IFACE => $ctx->{swiface},
@@ -678,7 +682,7 @@ nogroup:x:65534:nobody
                SAMBA_TEST_FIFO => "$ctx->{prefix}/samba_test.fifo",
                SAMBA_TEST_LOG => "$ctx->{prefix}/samba_test.log",
                SAMBA_TEST_LOG_POS => 0,
-               NSS_WRAPPER_WINBIND_SO_PATH => Samba::bindir_path($self, "default/nsswitch/libnss-winbind.so"),
+               NSS_WRAPPER_WINBIND_SO_PATH => Samba::nss_wrapper_winbind_so_path($self),
                 LOCAL_PATH => $ctx->{share}
        };
 
@@ -705,17 +709,30 @@ sub provision($$$$$$$$$)
 {
        my ($self, $prefix, $server_role, $hostname,
            $domain, $realm, $functional_level,
-           $password, $kdc_ipv4, $extra_smbconf_options, $extra_smbconf_shares, $use_ntvfs) = @_;
+           $password, $kdc_ipv4, $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, $use_ntvfs);
+                                              $password, $kdc_ipv4);
+
+       if (defined($extra_provision_options)) {
+               push (@{$ctx->{provision_options}}, @{$extra_provision_options});
+       } else {
+               push (@{$ctx->{provision_options}}, "--use-ntvfs");
+       }
 
        $ctx->{share} = "$ctx->{prefix_abs}/share";
        push(@{$ctx->{directories}}, "$ctx->{share}");
        push(@{$ctx->{directories}}, "$ctx->{share}/test1");
        push(@{$ctx->{directories}}, "$ctx->{share}/test2");
+
+       # precreate directories for printer drivers
+       push(@{$ctx->{directories}}, "$ctx->{share}/W32X86");
+       push(@{$ctx->{directories}}, "$ctx->{share}/x64");
+       push(@{$ctx->{directories}}, "$ctx->{share}/WIN40");
+
        my $msdfs = "no";
        $msdfs = "yes" if ($server_role eq "domain controller");
        $ctx->{smb_conf_extra_options} = "
@@ -782,7 +799,7 @@ sub provision($$$$$$$$$)
 
 [sysvol]
        path = $ctx->{statedir}/sysvol
-       read only = yes
+       read only = no
 
 [netlogon]
        path = $ctx->{statedir}/sysvol/$ctx->{dnsname}/scripts
@@ -844,7 +861,7 @@ sub provision_member($$$)
                                   "2008",
                                   "locMEMpass3",
                                   $dcvars->{SERVER_IP},
-                                  "", "", 1);
+                                  "", "", undef);
        unless ($ret) {
                return undef;
        }
@@ -909,7 +926,7 @@ sub provision_rpc_proxy($$$)
                                   "2008",
                                   "locRPCproxypass4",
                                   $dcvars->{SERVER_IP},
-                                  $extra_smbconf_options, "", 1);
+                                  $extra_smbconf_options, "", undef);
 
        unless ($ret) {
                return undef;
@@ -981,7 +998,9 @@ sub provision_promoted_vampire_dc($$$)
                                               "samba.example.com",
                                               "2008",
                                               $dcvars->{PASSWORD},
-                                              $dcvars->{SERVER_IP}, 1);
+                                              $dcvars->{SERVER_IP});
+
+       push (@{$ctx->{provision_options}}, "--use-ntvfs");
 
        $ctx->{smb_conf_extra_options} = "
        max xmit = 32K
@@ -1053,7 +1072,9 @@ sub provision_vampire_dc($$$)
                                               "samba.example.com",
                                               "2008",
                                               $dcvars->{PASSWORD},
-                                              $dcvars->{SERVER_IP}, 1);
+                                              $dcvars->{SERVER_IP});
+
+       push (@{$ctx->{provision_options}}, "--use-ntvfs");
 
        $ctx->{smb_conf_extra_options} = "
        max xmit = 32K
@@ -1112,7 +1133,9 @@ sub provision_subdom_dc($$$)
                                               "sub.samba.example.com",
                                               "2008",
                                               $dcvars->{PASSWORD},
-                                              undef, 1);
+                                              undef);
+
+       push (@{$ctx->{provision_options}}, "--use-ntvfs");
 
        $ctx->{smb_conf_extra_options} = "
        max xmit = 32K
@@ -1168,8 +1191,7 @@ sub provision_dc($$)
        my ($self, $prefix) = @_;
 
        print "PROVISIONING DC...";
-        my $extra_conf_options = "netbios aliases = localDC1-a
-allow dns updates = True";
+        my $extra_conf_options = "netbios aliases = localDC1-a";
        my $ret = $self->provision($prefix,
                                   "domain controller",
                                   "localdc",
@@ -1177,7 +1199,7 @@ allow dns updates = True";
                                   "samba.example.com",
                                   "2008",
                                   "locDCpass1",
-                                  undef, $extra_conf_options, "", 1);
+                                  undef, $extra_conf_options, "", undef);
 
        return undef unless(defined $ret);
        unless($self->add_wins_config("$prefix/private")) {
@@ -1206,7 +1228,7 @@ sub provision_fl2000dc($$)
                                   "samba2000.example.com",
                                   "2000",
                                   "locDCpass5",
-                                  undef, "", "", 1);
+                                  undef, "", "", undef);
 
        unless($self->add_wins_config("$prefix/private")) {
                warn("Unable to add wins configuration");
@@ -1228,7 +1250,7 @@ sub provision_fl2003dc($$)
                                   "samba2003.example.com",
                                   "2003",
                                   "locDCpass6",
-                                  undef, "", "", 1);
+                                  undef, "allow dns updates = nonsecure and secure", "", undef);
 
        unless($self->add_wins_config("$prefix/private")) {
                warn("Unable to add wins configuration");
@@ -1250,7 +1272,7 @@ sub provision_fl2008r2dc($$)
                                   "samba2008R2.example.com",
                                   "2008_R2",
                                   "locDCpass7",
-                                  undef, "", "", 1);
+                                  undef, "", "", undef);
 
        unless ($self->add_wins_config("$prefix/private")) {
                warn("Unable to add wins configuration");
@@ -1273,11 +1295,13 @@ sub provision_rodc($$$)
                                               "samba.example.com",
                                               "2008",
                                               $dcvars->{PASSWORD},
-                                              $dcvars->{SERVER_IP}, 1);
+                                              $dcvars->{SERVER_IP});
        unless ($ctx) {
                return undef;
        }
 
+       push (@{$ctx->{provision_options}}, "--use-ntvfs");
+
        $ctx->{share} = "$ctx->{prefix_abs}/share";
        push(@{$ctx->{directories}}, "$ctx->{share}");
 
@@ -1347,6 +1371,7 @@ sub provision_plugin_s4_dc($$)
 
        my $bindir_abs = abs_path($self->{bindir});
        my $lockdir="$prefix_abs/lockdir";
+        my $conffile="$prefix_abs/etc/smb.conf";
 
        my $extra_smbconf_options = "
         server services = -smb +s3fs
@@ -1359,21 +1384,23 @@ sub provision_plugin_s4_dc($$)
        printing = bsd
        printcap name = /dev/null
 
-       max protocol = SMB2
+       max protocol = SMB3
        read only = no
        server signing = auto
 
        smbd:sharedelay = 100000
        smbd:writetimeupdatedelay = 500000
-       create mask = 755
+       create mask = 0777
+       directory mask = 0777
        dos filemode = yes
 
-        vfs objects = dfs_samba4 acl_xattr fake_acls xattr_tdb streams_depot
-
         dcerpc endpoint servers = -winreg -srvsvc
 
        printcap name = /dev/null
 
+       addprinter command = $ENV{SRCDIR_ABS}/source3/script/tests/printing/modprinter.pl -a -s $conffile --
+       deleteprinter command = $ENV{SRCDIR_ABS}/source3/script/tests/printing/modprinter.pl -d -s $conffile --
+
        printing = vlp
        print command = $bindir_abs/vlp tdbfile=$lockdir/vlp.tdb print %p %s
        lpq command = $bindir_abs/vlp tdbfile=$lockdir/vlp.tdb lpq %p
@@ -1403,6 +1430,26 @@ sub provision_plugin_s4_dc($$)
 [hideunread]
        copy = tmp
        hide unreadable = yes
+
+[durable]
+       copy = tmp
+       kernel share modes = no
+       kernel oplocks = no
+       posix locking = no
+
+[print\$]
+       copy = tmp
+
+[print1]
+       copy = tmp
+       printable = yes
+
+[print2]
+       copy = print1
+[print3]
+       copy = print1
+[lp]
+       copy = print1
 ";
 
        print "PROVISIONING PLUGIN S4 DC...";
@@ -1414,7 +1461,7 @@ sub provision_plugin_s4_dc($$)
                                   "2008",
                                   "locDCpass1",
                                   undef, $extra_smbconf_options,
-                                   $extra_smbconf_shares, 0);
+                                   $extra_smbconf_shares, undef);
 
        return undef unless(defined $ret);
        unless($self->add_wins_config("$prefix/private")) {
@@ -1436,6 +1483,8 @@ sub provision_chgdcpass($$)
        my ($self, $prefix) = @_;
 
        print "PROVISIONING CHGDCPASS...";
+       my $extra_provision_options = undef;
+       push (@{$extra_provision_options}, "--dns-backend=BIND9_DLZ");
        my $ret = $self->provision($prefix,
                                   "domain controller",
                                   "chgdcpass",
@@ -1443,13 +1492,22 @@ sub provision_chgdcpass($$)
                                   "chgdcpassword.samba.example.com",
                                   "2008",
                                   "chgDCpass1",
-                                  undef, "", "", 1);
+                                  undef, "server services = -dns", "",
+                                  $extra_provision_options);
 
        return undef unless(defined $ret);
        unless($self->add_wins_config("$prefix/private")) {
                warn("Unable to add wins configuration");
                return undef;
        }
+       
+       # Remove secrets.tdb from this environment to test that we still start up
+       # on systems without the new matching secrets.tdb records
+       unless (unlink("$ret->{PRIVATEDIR}/secrets.tdb")) {
+               warn("Unable to remove $ret->{PRIVATEDIR}/secrets.tdb added during provision");
+               return undef;
+       }
+           
        $ret->{DC_SERVER} = $ret->{SERVER};
        $ret->{DC_SERVER_IP} = $ret->{SERVER_IP};
        $ret->{DC_NETBIOSNAME} = $ret->{NETBIOSNAME};