HACK selftest s3member admember...
[metze/samba/wip.git] / selftest / target / Samba3.pm
index 6eeae21b6af274c8df11f24bb7d0d92424486fb9..8d59bb2690e190e03f4553dfde63f7655b803282 100644 (file)
@@ -24,8 +24,10 @@ sub binpath($$)
 }
 
 sub new($$) {
-       my ($classname, $bindir) = @_;
-       my $self = { bindir => $bindir };
+       my ($classname, $bindir, $srcdir) = @_;
+       my $self = { bindir => $bindir,
+                    srcdir => $srcdir
+       };
        bless $self;
        return $self;
 }
@@ -98,6 +100,8 @@ sub setup_env($$$)
        
        if ($envname eq "dc") {
                return $self->setup_dc("$path/dc");
+       } elsif ($envname eq "secshare") {
+               return $self->setup_secshare("$path/secshare");
        } elsif ($envname eq "member") {
                if (not defined($self->{vars}->{dc})) {
                        $self->setup_dc("$path/dc");
@@ -132,6 +136,12 @@ sub setup_dc($$)
 
        $self->wait_for_start($vars);
 
+       $vars->{DC_SERVER} = $vars->{SERVER};
+       $vars->{DC_SERVER_IP} = $vars->{SERVER_IP};
+       $vars->{DC_NETBIOSNAME} = $vars->{NETBIOSNAME};
+       $vars->{DC_USERNAME} = $vars->{USERNAME};
+       $vars->{DC_PASSWORD} = $vars->{PASSWORD};
+
        $self->{vars}->{dc} = $vars;
 
        return $vars;
@@ -178,9 +188,73 @@ sub setup_member($$$)
        return $ret;
 }
 
-sub stop($)
+sub setup_admember($$$$)
 {
-       my ($self) = @_;
+       my ($self, $prefix, $dcvars, $iface) = @_;
+
+       print "PROVISIONING S3 AD MEMBER$iface...";
+
+       my $member_options = "
+       security = domain
+       server signing = on
+";
+       my $ret = $self->provision($prefix,
+                                  "LOCALADMEMBER$iface",
+                                  $iface,
+                                  "loCalMember${iface}Pass",
+                                  $member_options);
+
+       $ret or die("Unable to provision");
+
+       my $net = $self->binpath("net");
+       my $cmd = "";
+       $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
+       $cmd .= "selftest/gdb_run test $net join $ret->{CONFIGURATION} $dcvars->{DOMAIN} member";
+       $cmd .= " -U$dcvars->{USERNAME}\%$dcvars->{PASSWORD} -d 10 2>&1 | tee s3member-join.txt";
+
+       system($cmd) == 0 or die("Join failed\n$cmd");
+
+       $self->check_or_start($ret,
+                             ($ENV{SMBD_MAXTIME} or 2700),
+                              "yes", "yes", "yes");
+
+       $self->wait_for_start($ret);
+
+       $ret->{DC_SERVER} = $dcvars->{SERVER};
+       $ret->{DC_SERVER_IP} = $dcvars->{SERVER_IP};
+       $ret->{DC_NETBIOSNAME} = $dcvars->{NETBIOSNAME};
+       $ret->{DC_USERNAME} = $dcvars->{USERNAME};
+       $ret->{DC_PASSWORD} = $dcvars->{PASSWORD};
+
+       return $ret;
+}
+
+sub setup_secshare($$)
+{
+       my ($self, $path) = @_;
+
+       print "PROVISIONING server with security=share...";
+
+       my $secshare_options = "
+       security = share
+       lanman auth = yes
+";
+
+       my $vars = $self->provision($path,
+                                   "LOCALSHARE4",
+                                   4,
+                                   "local4pass",
+                                   $secshare_options);
+
+       $self->check_or_start($vars,
+                             ($ENV{SMBD_MAXTIME} or 2700),
+                              "yes", "no", "yes");
+
+       $self->wait_for_start($vars);
+
+       $self->{vars}->{secshare} = $vars;
+
+       return $vars;
 }
 
 sub stop_sig_term($$) {
@@ -225,6 +299,7 @@ sub check_or_start($$$$$) {
                SocketWrapper::set_default_iface($env_vars->{SOCKET_WRAPPER_DEFAULT_IFACE});
 
                $ENV{WINBINDD_SOCKET_DIR} = $env_vars->{WINBINDD_SOCKET_DIR};
+               $ENV{NMBD_SOCKET_DIR} = $env_vars->{NMBD_SOCKET_DIR};
 
                $ENV{NSS_WRAPPER_PASSWD} = $env_vars->{NSS_WRAPPER_PASSWD};
                $ENV{NSS_WRAPPER_GROUP} = $env_vars->{NSS_WRAPPER_GROUP};
@@ -252,7 +327,7 @@ sub check_or_start($$$$$) {
                        @preargs = split(/ /, $ENV{NMBD_VALGRIND});
                }
 
-               exec(@preargs, $self->binpath("nmbd"), "-F", "--no-process-group", "-s", $env_vars->{SERVERCONFFILE}, @optargs) or die("Unable to start nmbd: $!");
+               exec(@preargs, $self->binpath("nmbd"), "-F", "--no-process-group", "-S", "-s", $env_vars->{SERVERCONFFILE}, @optargs) or die("Unable to start nmbd: $!");
        }
        write_pid($env_vars, "nmbd", $pid);
        print "DONE\n";
@@ -267,6 +342,7 @@ sub check_or_start($$$$$) {
                SocketWrapper::set_default_iface($env_vars->{SOCKET_WRAPPER_DEFAULT_IFACE});
 
                $ENV{WINBINDD_SOCKET_DIR} = $env_vars->{WINBINDD_SOCKET_DIR};
+               $ENV{NMBD_SOCKET_DIR} = $env_vars->{NMBD_SOCKET_DIR};
 
                $ENV{NSS_WRAPPER_PASSWD} = $env_vars->{NSS_WRAPPER_PASSWD};
                $ENV{NSS_WRAPPER_GROUP} = $env_vars->{NSS_WRAPPER_GROUP};
@@ -309,6 +385,7 @@ sub check_or_start($$$$$) {
                SocketWrapper::set_default_iface($env_vars->{SOCKET_WRAPPER_DEFAULT_IFACE});
 
                $ENV{WINBINDD_SOCKET_DIR} = $env_vars->{WINBINDD_SOCKET_DIR};
+               $ENV{NMBD_SOCKET_DIR} = $env_vars->{NMBD_SOCKET_DIR};
 
                $ENV{NSS_WRAPPER_PASSWD} = $env_vars->{NSS_WRAPPER_PASSWD};
                $ENV{NSS_WRAPPER_GROUP} = $env_vars->{NSS_WRAPPER_GROUP};
@@ -361,6 +438,7 @@ sub provision($$$$$$)
 
        my $prefix_abs = abs_path($prefix);
        my $bindir_abs = abs_path($self->{bindir});
+       my $vfs_modulesdir_abs = ($ENV{VFSLIBDIR} or $bindir_abs);
 
        my @dirs = ();
 
@@ -391,6 +469,9 @@ sub provision($$$$$$)
        my $driver64dir="$shrdir/x64";
        push(@dirs,$driver64dir);
 
+       my $driver40dir="$shrdir/WIN40";
+       push(@dirs,$driver40dir);
+
        my $ro_shrdir="$shrdir/root-tmp";
        push(@dirs,$ro_shrdir);
 
@@ -404,6 +485,9 @@ sub provision($$$$$$)
        my $wbsockdir="$prefix_abs/winbindd";
        my $wbsockprivdir="$lockdir/winbindd_privileged";
 
+       my $nmbdsockdir="$prefix_abs/nmbd";
+       unlink($nmbdsockdir);
+
        ## 
        ## create the test directory layout
        ##
@@ -434,11 +518,11 @@ sub provision($$$$$$)
 
        my $conffile="$libdir/server.conf";
 
-       my $nss_wrapper_pl = "$ENV{PERL} $RealBin/../lib/nss_wrapper/nss_wrapper.pl";
+       my $nss_wrapper_pl = "$ENV{PERL} $self->{srcdir}/lib/nss_wrapper/nss_wrapper.pl";
        my $nss_wrapper_passwd = "$privatedir/passwd";
        my $nss_wrapper_group = "$privatedir/group";
 
-       my $mod_printer_pl = "$ENV{PERL} $RealBin/../source3/script/tests/printing/modprinter.pl";
+       my $mod_printer_pl = "$ENV{PERL} $self->{srcdir}/source3/script/tests/printing/modprinter.pl";
 
        my @eventlog_list = ("dns server", "application");
 
@@ -448,7 +532,7 @@ sub provision($$$$$$)
 
        my ($max_uid, $max_gid);
        my ($uid_nobody, $uid_root);
-       my ($gid_nobody, $gid_nogroup, $gid_root);
+       my ($gid_nobody, $gid_nogroup, $gid_root, $gid_domusers);
 
        if ($unix_uid < 0xffff - 2) {
                $max_uid = 0xffff;
@@ -468,6 +552,7 @@ sub provision($$$$$$)
        $gid_nobody = $max_gid - 1;
        $gid_nogroup = $max_gid - 2;
        $gid_root = $max_gid - 3;
+       $gid_domusers = $max_gid - 4;
 
        ##
        ## create conffile
@@ -479,7 +564,7 @@ sub provision($$$$$$)
        netbios name = $server
        interfaces = $server_ip/8
        bind interfaces only = yes
-       panic action = $RealBin/gdb_backtrace %d %\$(MAKE_TEST_BINARY)
+       panic action = $self->{srcdir}/selftest/gdb_backtrace %d %\$(MAKE_TEST_BINARY)
 
        workgroup = $domain
 
@@ -519,6 +604,7 @@ sub provision($$$$$$)
        printcap name = /dev/null
 
        winbindd:socket dir = $wbsockdir
+       nmbd:socket dir = $nmbdsockdir
        idmap uid = 100000-200000
        idmap gid = 100000-200000
        winbind enum users = yes
@@ -526,7 +612,10 @@ sub provision($$$$$$)
 
 #      min receivefile size = 4000
 
+       max protocol = SMB2
        read only = no
+       server signing = auto
+
        smbd:sharedelay = 100000
 #      smbd:writetimeupdatedelay = 500000
        map hidden = no
@@ -534,7 +623,7 @@ sub provision($$$$$$)
        map readonly = no
        store dos attributes = yes
        create mask = 755
-       vfs objects = $bindir_abs/xattr_tdb.so $bindir_abs/streams_depot.so
+       vfs objects = $vfs_modulesdir_abs/xattr_tdb.so $vfs_modulesdir_abs/streams_depot.so
 
        printing = vlp
        print command = $bindir_abs/vlp tdbfile=$lockdir/vlp.tdb print %p %s
@@ -546,6 +635,8 @@ sub provision($$$$$$)
        queue resume command = $bindir_abs/vlp tdbfile=$lockdir/vlp.tdb queueresume %p
        lpq cache time = 0
 
+       rpc_server:epmapper = embedded
+
        # Begin extra options
        $extra_options
        # End extra options
@@ -560,6 +651,21 @@ sub provision($$$$$$)
        print CONF "
 [tmp]
        path = $shrdir
+[tmpguest]
+       path = $shrdir
+        guest ok = yes
+[guestonly]
+       path = $shrdir
+        guest only = yes
+        guest ok = yes
+[forceuser]
+       path = $shrdir
+        force user = $unix_name
+        guest ok = yes
+[forcegroup]
+       path = $shrdir
+        force group = nogroup
+        guest ok = yes
 [ro-tmp]
        path = $ro_shrdir
        guest ok = yes
@@ -584,7 +690,7 @@ sub provision($$$$$$)
        copy = print1
 [print3]
        copy = print1
-[print4]
+[lp]
        copy = print1
 [print\$]
        copy = tmp
@@ -608,6 +714,7 @@ $unix_name:x:$unix_uid:$unix_gids[0]:$unix_name gecos:$prefix_abs:/bin/false
        print GROUP "nobody:x:$gid_nobody:
 nogroup:x:$gid_nogroup:nobody
 $unix_name-group:x:$unix_gids[0]:
+domusers:X:$gid_domusers:
 ";
        if ($unix_gids[0] != 0) {
                print GROUP "root:x:$gid_root:";
@@ -628,9 +735,6 @@ $unix_name-group:x:$unix_gids[0]:
        print PWD "$password\n$password\n";
        close(PWD) or die("Unable to set password for test account");
 
-       delete $ENV{NSS_WRAPPER_PASSWD};
-       delete $ENV{NSS_WRAPPER_GROUP};
-
        print "DONE\n";
 
        $ret{SERVER_IP} = $server_ip;
@@ -651,6 +755,7 @@ $unix_name-group:x:$unix_gids[0]:
        $ret{PIDDIR} = $piddir;
        $ret{WINBINDD_SOCKET_DIR} = $wbsockdir;
        $ret{WINBINDD_PRIV_PIPE_DIR} = $wbsockprivdir;
+       $ret{NMBD_SOCKET_DIR} = $nmbdsockdir;
        $ret{SOCKET_WRAPPER_DEFAULT_IFACE} = $swiface;
        $ret{NSS_WRAPPER_PASSWD} = $nss_wrapper_passwd;
        $ret{NSS_WRAPPER_GROUP} = $nss_wrapper_group;
@@ -678,6 +783,9 @@ sub wait_for_start($$)
        system($self->binpath("smbclient") ." $envvars->{CONFIGURATION} -L $envvars->{SERVER_IP} -U% -p 139 | head -2");
        system($self->binpath("smbclient") ." $envvars->{CONFIGURATION} -L $envvars->{SERVER_IP} -U% -p 139 | head -2");
 
+       # Ensure we have domain users mapped.
+       system($self->binpath("net") ." $envvars->{CONFIGURATION} groupmap add rid=513 unixgroup=domusers type=domain");
+
        print $self->getlog_env($envvars);
 }