2 # Bootstrap Samba and run a number of tests against it.
3 # Copyright (C) 2005-2007 Jelmer Vernooij <jelmer@samba.org>
4 # Published under the GNU GPL, v3 or later.
10 use FindBin qw($RealBin);
15 my ($self, $binary) = @_;
17 if (defined($self->{bindir})) {
18 my $path = "$self->{bindir}/$binary";
19 -f $path or die("File $path doesn't exist");
27 my ($classname, $bindir, $srcdir) = @_;
28 my $self = { bindir => $bindir,
37 my ($self, $envvars) = @_;
39 my $smbdpid = read_pid($envvars, "smbd");
40 my $nmbdpid = read_pid($envvars, "nmbd");
41 my $winbinddpid = read_pid($envvars, "winbindd");
43 $self->stop_sig_term($smbdpid);
44 $self->stop_sig_term($nmbdpid);
45 $self->stop_sig_term($winbinddpid);
49 $self->stop_sig_kill($smbdpid);
50 $self->stop_sig_kill($nmbdpid);
51 $self->stop_sig_kill($winbinddpid);
56 sub getlog_env_app($$$)
58 my ($self, $envvars, $name) = @_;
60 my $title = "$name LOG of: $envvars->{NETBIOSNAME}\n";
63 open(LOG, "<".$envvars->{$name."_TEST_LOG"});
65 seek(LOG, $envvars->{$name."_TEST_LOG_POS"}, SEEK_SET);
69 $envvars->{$name."_TEST_LOG_POS"} = tell(LOG);
72 return "" if $out eq $title;
79 my ($self, $envvars) = @_;
82 $ret .= $self->getlog_env_app($envvars, "SMBD");
83 $ret .= $self->getlog_env_app($envvars, "NMBD");
84 $ret .= $self->getlog_env_app($envvars, "WINBINDD");
91 my ($self, $envvars) = @_;
99 my ($self, $envname, $path) = @_;
101 if ($envname eq "dc") {
102 return $self->setup_dc("$path/dc");
103 } elsif ($envname eq "secshare") {
104 return $self->setup_secshare("$path/secshare");
105 } elsif ($envname eq "ktest") {
106 return $self->setup_ktest("$path/ktest");
107 } elsif ($envname eq "secserver") {
108 if (not defined($self->{vars}->{dc})) {
109 $self->setup_dc("$path/dc");
111 return $self->setup_secserver("$path/secserver", $self->{vars}->{dc});
112 } elsif ($envname eq "member") {
113 if (not defined($self->{vars}->{dc})) {
114 $self->setup_dc("$path/dc");
116 return $self->setup_member("$path/member", $self->{vars}->{dc});
124 my ($self, $path) = @_;
126 print "PROVISIONING DC...";
134 my $vars = $self->provision($path,
140 $self->check_or_start($vars,
141 ($ENV{SMBD_MAXTIME} or 2700),
142 "yes", "yes", "yes");
144 $self->wait_for_start($vars);
146 $vars->{DC_SERVER} = $vars->{SERVER};
147 $vars->{DC_SERVER_IP} = $vars->{SERVER_IP};
148 $vars->{DC_NETBIOSNAME} = $vars->{NETBIOSNAME};
149 $vars->{DC_USERNAME} = $vars->{USERNAME};
150 $vars->{DC_PASSWORD} = $vars->{PASSWORD};
152 $self->{vars}->{dc} = $vars;
157 sub setup_member($$$)
159 my ($self, $prefix, $dcvars) = @_;
161 print "PROVISIONING MEMBER...";
163 my $member_options = "
167 my $ret = $self->provision($prefix,
173 $ret or die("Unable to provision");
175 my $net = $self->binpath("net");
177 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
178 $cmd .= "$net join $ret->{CONFIGURATION} $dcvars->{DOMAIN} member";
179 $cmd .= " -U$dcvars->{USERNAME}\%$dcvars->{PASSWORD}";
181 system($cmd) == 0 or die("Join failed\n$cmd");
183 $self->check_or_start($ret,
184 ($ENV{SMBD_MAXTIME} or 2700),
185 "yes", "yes", "yes");
187 $self->wait_for_start($ret);
189 $ret->{DC_SERVER} = $dcvars->{SERVER};
190 $ret->{DC_SERVER_IP} = $dcvars->{SERVER_IP};
191 $ret->{DC_NETBIOSNAME} = $dcvars->{NETBIOSNAME};
192 $ret->{DC_USERNAME} = $dcvars->{USERNAME};
193 $ret->{DC_PASSWORD} = $dcvars->{PASSWORD};
198 sub setup_admember($$$$)
200 my ($self, $prefix, $dcvars, $iface) = @_;
202 print "PROVISIONING S3 AD MEMBER$iface...";
204 my $member_options = "
208 my $ret = $self->provision($prefix,
209 "LOCALADMEMBER$iface",
211 "loCalMember${iface}Pass",
214 $ret or die("Unable to provision");
216 my $net = $self->binpath("net");
218 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
219 $cmd .= "selftest/gdb_run test $net join $ret->{CONFIGURATION} $dcvars->{DOMAIN} member";
220 $cmd .= " -U$dcvars->{USERNAME}\%$dcvars->{PASSWORD} -d 10 2>&1 | tee s3member-join.txt";
222 system($cmd) == 0 or die("Join failed\n$cmd");
224 $self->check_or_start($ret,
225 ($ENV{SMBD_MAXTIME} or 2700),
226 "yes", "yes", "yes");
228 $self->wait_for_start($ret);
230 $ret->{DC_SERVER} = $dcvars->{SERVER};
231 $ret->{DC_SERVER_IP} = $dcvars->{SERVER_IP};
232 $ret->{DC_NETBIOSNAME} = $dcvars->{NETBIOSNAME};
233 $ret->{DC_USERNAME} = $dcvars->{USERNAME};
234 $ret->{DC_PASSWORD} = $dcvars->{PASSWORD};
239 sub setup_secshare($$)
241 my ($self, $path) = @_;
243 print "PROVISIONING server with security=share...";
245 my $secshare_options = "
250 my $vars = $self->provision($path,
256 $self->check_or_start($vars,
257 ($ENV{SMBD_MAXTIME} or 2700),
260 $self->wait_for_start($vars);
262 $self->{vars}->{secshare} = $vars;
267 sub setup_secserver($$$)
269 my ($self, $prefix, $dcvars) = @_;
271 print "PROVISIONING server with security=server...";
273 my $secserver_options = "
275 password server = $dcvars->{SERVER_IP}
278 my $ret = $self->provision($prefix,
284 $ret or die("Unable to provision");
286 $self->check_or_start($ret,
287 ($ENV{SMBD_MAXTIME} or 2700),
290 $self->wait_for_start($ret);
292 $ret->{DC_SERVER} = $dcvars->{SERVER};
293 $ret->{DC_SERVER_IP} = $dcvars->{SERVER_IP};
294 $ret->{DC_NETBIOSNAME} = $dcvars->{NETBIOSNAME};
295 $ret->{DC_USERNAME} = $dcvars->{USERNAME};
296 $ret->{DC_PASSWORD} = $dcvars->{PASSWORD};
303 my ($self, $prefix, $dcvars) = @_;
305 print "PROVISIONING server with security=ads...";
307 my $ktest_options = "
309 realm = ktest.samba.example.com
311 username map = $prefix/lib/username.map
314 my $ret = $self->provision($prefix,
320 $ret or die("Unable to provision");
322 open(USERMAP, ">$prefix/lib/username.map") or die("Unable to open $prefix/lib/username.map");
324 $ret->{USERNAME} = KTEST\\Administrator
328 #This is the secrets.tdb created by 'net ads join' from Samba3 to a
329 #Samba4 DC with the same parameters as are being used here. The
330 #domain SID is S-1-5-21-1071277805-689288055-3486227160
332 system("cp $self->{srcdir}/source3/selftest/ktest-secrets.tdb $prefix/private/secrets.tdb");
333 chmod 0600, "$prefix/private/secrets.tdb";
335 #This uses a pre-calculated krb5 credentials cache, obtained by running Samba4 with:
336 # "--option=kdc:service ticket lifetime=239232" "--option=kdc:user ticket lifetime=239232" "--option=kdc:renewal lifetime=239232"
338 #and having in krb5.conf:
339 # ticket_lifetime = 799718400
340 # renew_lifetime = 799718400
342 # The commands for the -2 keytab where were:
343 # kinit administrator@KTEST.SAMBA.EXAMPLE.COM
344 # kvno host/localktest6@KTEST.SAMBA.EXAMPLE.COM
345 # kvno cifs/localktest6@KTEST.SAMBA.EXAMPLE.COM
346 # kvno host/LOCALKTEST6@KTEST.SAMBA.EXAMPLE.COM
347 # kvno cifs/LOCALKTEST6@KTEST.SAMBA.EXAMPLE.COM
349 # and then for the -3 keytab, I did
351 # net changetrustpw; kdestroy and the same again.
353 # This creates a credential cache with a very long lifetime (2036 at
354 # at 2011-04), and shows that running 'net changetrustpw' does not
355 # break existing logins (for the secrets.tdb method at least).
358 $ret->{KRB5_CCACHE}="FILE:$prefix/krb5_ccache";
360 system("cp $self->{srcdir}/source3/selftest/ktest-krb5_ccache-2 $prefix/krb5_ccache-2");
361 chmod 0600, "$prefix/krb5_ccache-2";
363 system("cp $self->{srcdir}/source3/selftest/ktest-krb5_ccache-3 $prefix/krb5_ccache-3");
364 chmod 0600, "$prefix/krb5_ccache-3";
366 $self->check_or_start($ret,
367 ($ENV{SMBD_MAXTIME} or 2700),
370 $self->wait_for_start($ret);
374 sub stop_sig_term($$) {
375 my ($self, $pid) = @_;
376 kill("USR1", $pid) or kill("ALRM", $pid) or warn("Unable to kill $pid: $!");
379 sub stop_sig_kill($$) {
380 my ($self, $pid) = @_;
381 kill("ALRM", $pid) or warn("Unable to kill $pid: $!");
386 my ($env_vars, $app, $pid) = @_;
388 open(PID, ">$env_vars->{PIDDIR}/timelimit.$app.pid");
395 my ($env_vars, $app) = @_;
397 open(PID, "<$env_vars->{PIDDIR}/timelimit.$app.pid");
403 sub check_or_start($$$$$) {
404 my ($self, $env_vars, $maxtime, $nmbd, $winbindd, $smbd) = @_;
406 unlink($env_vars->{NMBD_TEST_LOG});
407 print "STARTING NMBD...";
410 open STDOUT, ">$env_vars->{NMBD_TEST_LOG}";
411 open STDERR, '>&STDOUT';
413 SocketWrapper::set_default_iface($env_vars->{SOCKET_WRAPPER_DEFAULT_IFACE});
415 $ENV{WINBINDD_SOCKET_DIR} = $env_vars->{WINBINDD_SOCKET_DIR};
416 $ENV{NMBD_SOCKET_DIR} = $env_vars->{NMBD_SOCKET_DIR};
418 $ENV{NSS_WRAPPER_PASSWD} = $env_vars->{NSS_WRAPPER_PASSWD};
419 $ENV{NSS_WRAPPER_GROUP} = $env_vars->{NSS_WRAPPER_GROUP};
420 $ENV{NSS_WRAPPER_WINBIND_SO_PATH} = $env_vars->{NSS_WRAPPER_WINBIND_SO_PATH};
422 if ($nmbd ne "yes") {
423 $SIG{USR1} = $SIG{ALRM} = $SIG{INT} = $SIG{QUIT} = $SIG{TERM} = sub {
425 print("Skip nmbd received signal $signame");
432 my @optargs = ("-d0");
433 if (defined($ENV{NMBD_OPTIONS})) {
434 @optargs = split(/ /, $ENV{NMBD_OPTIONS});
437 $ENV{MAKE_TEST_BINARY} = $self->binpath("nmbd");
439 my @preargs = ($self->binpath("timelimit"), $maxtime);
440 if(defined($ENV{NMBD_VALGRIND})) {
441 @preargs = split(/ /, $ENV{NMBD_VALGRIND});
444 exec(@preargs, $self->binpath("nmbd"), "-F", "--no-process-group", "-S", "-s", $env_vars->{SERVERCONFFILE}, @optargs) or die("Unable to start nmbd: $!");
446 write_pid($env_vars, "nmbd", $pid);
449 unlink($env_vars->{WINBINDD_TEST_LOG});
450 print "STARTING WINBINDD...";
453 open STDOUT, ">$env_vars->{WINBINDD_TEST_LOG}";
454 open STDERR, '>&STDOUT';
456 SocketWrapper::set_default_iface($env_vars->{SOCKET_WRAPPER_DEFAULT_IFACE});
458 $ENV{WINBINDD_SOCKET_DIR} = $env_vars->{WINBINDD_SOCKET_DIR};
459 $ENV{NMBD_SOCKET_DIR} = $env_vars->{NMBD_SOCKET_DIR};
461 $ENV{NSS_WRAPPER_PASSWD} = $env_vars->{NSS_WRAPPER_PASSWD};
462 $ENV{NSS_WRAPPER_GROUP} = $env_vars->{NSS_WRAPPER_GROUP};
463 $ENV{NSS_WRAPPER_WINBIND_SO_PATH} = $env_vars->{NSS_WRAPPER_WINBIND_SO_PATH};
465 if ($winbindd ne "yes") {
466 $SIG{USR1} = $SIG{ALRM} = $SIG{INT} = $SIG{QUIT} = $SIG{TERM} = sub {
468 print("Skip winbindd received signal $signame");
475 my @optargs = ("-d0");
476 if (defined($ENV{WINBINDD_OPTIONS})) {
477 @optargs = split(/ /, $ENV{WINBINDD_OPTIONS});
480 $ENV{MAKE_TEST_BINARY} = $self->binpath("winbindd");
482 my @preargs = ($self->binpath("timelimit"), $maxtime);
483 if(defined($ENV{WINBINDD_VALGRIND})) {
484 @preargs = split(/ /, $ENV{WINBINDD_VALGRIND});
487 exec(@preargs, $self->binpath("winbindd"), "-F", "--no-process-group", "-s", $env_vars->{SERVERCONFFILE}, @optargs) or die("Unable to start winbindd: $!");
489 write_pid($env_vars, "winbindd", $pid);
492 unlink($env_vars->{SMBD_TEST_LOG});
493 print "STARTING SMBD...";
496 open STDOUT, ">$env_vars->{SMBD_TEST_LOG}";
497 open STDERR, '>&STDOUT';
499 SocketWrapper::set_default_iface($env_vars->{SOCKET_WRAPPER_DEFAULT_IFACE});
501 $ENV{WINBINDD_SOCKET_DIR} = $env_vars->{WINBINDD_SOCKET_DIR};
502 $ENV{NMBD_SOCKET_DIR} = $env_vars->{NMBD_SOCKET_DIR};
504 $ENV{NSS_WRAPPER_PASSWD} = $env_vars->{NSS_WRAPPER_PASSWD};
505 $ENV{NSS_WRAPPER_GROUP} = $env_vars->{NSS_WRAPPER_GROUP};
506 $ENV{NSS_WRAPPER_WINBIND_SO_PATH} = $env_vars->{NSS_WRAPPER_WINBIND_SO_PATH};
508 if ($smbd ne "yes") {
509 $SIG{USR1} = $SIG{ALRM} = $SIG{INT} = $SIG{QUIT} = $SIG{TERM} = sub {
511 print("Skip smbd received signal $signame");
518 $ENV{MAKE_TEST_BINARY} = $self->binpath("smbd");
519 my @optargs = ("-d0");
520 if (defined($ENV{SMBD_OPTIONS})) {
521 @optargs = split(/ /, $ENV{SMBD_OPTIONS});
523 my @preargs = ($self->binpath("timelimit"), $maxtime);
524 if(defined($ENV{SMBD_VALGRIND})) {
525 @preargs = split(/ /,$ENV{SMBD_VALGRIND});
527 exec(@preargs, $self->binpath("smbd"), "-F", "--no-process-group", "-s", $env_vars->{SERVERCONFFILE}, @optargs) or die("Unable to start smbd: $!");
529 write_pid($env_vars, "smbd", $pid);
535 sub provision($$$$$$)
537 my ($self, $prefix, $server, $swiface, $password, $extra_options) = @_;
540 ## setup the various environment variables we need
544 my $server_ip = "127.0.0.$swiface";
545 my $domain = "SAMBA-TEST";
547 my $unix_name = ($ENV{USER} or $ENV{LOGNAME} or `PATH=/usr/ucb:$ENV{PATH} whoami`);
550 my $unix_gids_str = $);
551 my @unix_gids = split(" ", $unix_gids_str);
553 my $prefix_abs = abs_path($prefix);
554 my $bindir_abs = abs_path($self->{bindir});
555 my $vfs_modulesdir_abs = ($ENV{VFSLIBDIR} or $bindir_abs);
559 my $shrdir="$prefix_abs/share";
562 my $libdir="$prefix_abs/lib";
565 my $piddir="$prefix_abs/pid";
568 my $privatedir="$prefix_abs/private";
569 push(@dirs,$privatedir);
571 my $lockdir="$prefix_abs/lockdir";
572 push(@dirs,$lockdir);
574 my $eventlogdir="$prefix_abs/lockdir/eventlog";
575 push(@dirs,$eventlogdir);
577 my $logdir="$prefix_abs/logs";
580 my $driver32dir="$shrdir/W32X86";
581 push(@dirs,$driver32dir);
583 my $driver64dir="$shrdir/x64";
584 push(@dirs,$driver64dir);
586 my $driver40dir="$shrdir/WIN40";
587 push(@dirs,$driver40dir);
589 my $ro_shrdir="$shrdir/root-tmp";
590 push(@dirs,$ro_shrdir);
592 my $msdfs_shrdir="$shrdir/msdfsshare";
593 push(@dirs,$msdfs_shrdir);
595 my $msdfs_deeppath="$msdfs_shrdir/deeppath";
596 push(@dirs,$msdfs_deeppath);
598 # this gets autocreated by winbindd
599 my $wbsockdir="$prefix_abs/winbindd";
600 my $wbsockprivdir="$lockdir/winbindd_privileged";
602 my $nmbdsockdir="$prefix_abs/nmbd";
603 unlink($nmbdsockdir);
606 ## create the test directory layout
608 die ("prefix_abs = ''") if $prefix_abs eq "";
609 die ("prefix_abs = '/'") if $prefix_abs eq "/";
611 mkdir($prefix_abs, 0777);
612 print "CREATE TEST ENVIRONMENT IN '$prefix'...";
613 system("rm -rf $prefix_abs/*");
614 mkdir($_, 0777) foreach(@dirs);
617 ## create ro and msdfs share layout
620 chmod 0755, $ro_shrdir;
621 my $unreadable_file = "$ro_shrdir/unreadable_file";
622 open(UNREADABLE_FILE, ">$unreadable_file") or die("Unable to open $unreadable_file");
623 close(UNREADABLE_FILE);
624 chmod 0600, $unreadable_file;
626 my $msdfs_target = "$ro_shrdir/msdfs-target";
627 open(MSDFS_TARGET, ">$msdfs_target") or die("Unable to open $msdfs_target");
629 chmod 0666, $msdfs_target;
630 symlink "msdfs:$server_ip\\ro-tmp", "$msdfs_shrdir/msdfs-src1";
631 symlink "msdfs:$server_ip\\ro-tmp", "$msdfs_shrdir/deeppath/msdfs-src2";
633 my $conffile="$libdir/server.conf";
635 my $nss_wrapper_pl = "$ENV{PERL} $self->{srcdir}/lib/nss_wrapper/nss_wrapper.pl";
636 my $nss_wrapper_passwd = "$privatedir/passwd";
637 my $nss_wrapper_group = "$privatedir/group";
639 my $mod_printer_pl = "$ENV{PERL} $self->{srcdir}/source3/script/tests/printing/modprinter.pl";
641 my @eventlog_list = ("dns server", "application");
644 ## calculate uids and gids
647 my ($max_uid, $max_gid);
648 my ($uid_nobody, $uid_root);
649 my ($gid_nobody, $gid_nogroup, $gid_root, $gid_domusers);
651 if ($unix_uid < 0xffff - 2) {
654 $max_uid = $unix_uid;
657 $uid_root = $max_uid - 1;
658 $uid_nobody = $max_uid - 2;
660 if ($unix_gids[0] < 0xffff - 3) {
663 $max_gid = $unix_gids[0];
666 $gid_nobody = $max_gid - 1;
667 $gid_nogroup = $max_gid - 2;
668 $gid_root = $max_gid - 3;
669 $gid_domusers = $max_gid - 4;
675 open(CONF, ">$conffile") or die("Unable to open $conffile");
678 netbios name = $server
679 interfaces = $server_ip/8
680 bind interfaces only = yes
681 panic action = $self->{srcdir}/selftest/gdb_backtrace %d %\$(MAKE_TEST_BINARY)
685 private dir = $privatedir
686 pid directory = $piddir
687 lock directory = $lockdir
688 log file = $logdir/log.\%m
693 name resolve order = bcast
695 state directory = $lockdir
696 cache directory = $lockdir
698 passdb backend = tdbsam
702 add user script = $nss_wrapper_pl --passwd_path $nss_wrapper_passwd --type passwd --action add --name %u --gid $gid_nogroup
703 add group script = $nss_wrapper_pl --group_path $nss_wrapper_group --type group --action add --name %g
704 add machine script = $nss_wrapper_pl --passwd_path $nss_wrapper_passwd --type passwd --action add --name %u --gid $gid_nogroup
705 add user to group script = $nss_wrapper_pl --passwd_path $nss_wrapper_passwd --type member --action add --member %u --name %g --group_path $nss_wrapper_group
706 delete user script = $nss_wrapper_pl --passwd_path $nss_wrapper_passwd --type passwd --action delete --name %u
707 delete group script = $nss_wrapper_pl --group_path $nss_wrapper_group --type group --action delete --name %g
708 delete user from group script = $nss_wrapper_pl --passwd_path $nss_wrapper_passwd --type member --action delete --member %u --name %g --group_path $nss_wrapper_group
710 addprinter command = $mod_printer_pl -a -s $conffile --
711 deleteprinter command = $mod_printer_pl -d -s $conffile --
713 eventlog list = application \"dns server\"
716 kernel change notify = no
720 printcap name = /dev/null
722 winbindd:socket dir = $wbsockdir
723 nmbd:socket dir = $nmbdsockdir
724 idmap config * : range = 100000-200000
725 winbind enum users = yes
726 winbind enum groups = yes
728 # min receivefile size = 4000
732 server signing = auto
734 smbd:sharedelay = 100000
735 # smbd:writetimeupdatedelay = 500000
739 store dos attributes = yes
741 vfs objects = $vfs_modulesdir_abs/xattr_tdb.so $vfs_modulesdir_abs/streams_depot.so
744 print command = $bindir_abs/vlp tdbfile=$lockdir/vlp.tdb print %p %s
745 lpq command = $bindir_abs/vlp tdbfile=$lockdir/vlp.tdb lpq %p
746 lp rm command = $bindir_abs/vlp tdbfile=$lockdir/vlp.tdb lprm %p %j
747 lp pause command = $bindir_abs/vlp tdbfile=$lockdir/vlp.tdb lppause %p %j
748 lp resume command = $bindir_abs/vlp tdbfile=$lockdir/vlp.tdb lpresume %p %j
749 queue pause command = $bindir_abs/vlp tdbfile=$lockdir/vlp.tdb queuepause %p
750 queue resume command = $bindir_abs/vlp tdbfile=$lockdir/vlp.tdb queueresume %p
753 ncalrpc dir = $lockdir/ncalrpc
754 rpc_server:epmapper = embedded
756 # Begin extra options
760 #Include user defined custom parameters if set
763 if (defined($ENV{INCLUDE_CUSTOM_CONF})) {
764 print CONF "\t$ENV{INCLUDE_CUSTOM_CONF}\n";
779 force user = $unix_name
783 force group = nogroup
794 hide unreadable = yes
800 hide unwriteable files = yes
817 ## create a test account
820 open(PASSWD, ">$nss_wrapper_passwd") or die("Unable to open $nss_wrapper_passwd");
821 print PASSWD "nobody:x:$uid_nobody:$gid_nobody:nobody gecos:$prefix_abs:/bin/false
822 $unix_name:x:$unix_uid:$unix_gids[0]:$unix_name gecos:$prefix_abs:/bin/false
824 if ($unix_uid != 0) {
825 print PASSWD "root:x:$uid_root:$gid_root:root gecos:$prefix_abs:/bin/false";
829 open(GROUP, ">$nss_wrapper_group") or die("Unable to open $nss_wrapper_group");
830 print GROUP "nobody:x:$gid_nobody:
831 nogroup:x:$gid_nogroup:nobody
832 $unix_name-group:x:$unix_gids[0]:
833 domusers:X:$gid_domusers:
835 if ($unix_gids[0] != 0) {
836 print GROUP "root:x:$gid_root:";
841 foreach my $evlog (@eventlog_list) {
842 my $evlogtdb = "$eventlogdir/$evlog.tdb";
843 open(EVENTLOG, ">$evlogtdb") or die("Unable to open $evlogtdb");
847 $ENV{NSS_WRAPPER_PASSWD} = $nss_wrapper_passwd;
848 $ENV{NSS_WRAPPER_GROUP} = $nss_wrapper_group;
850 open(PWD, "|".$self->binpath("smbpasswd")." -c $conffile -L -s -a $unix_name >/dev/null");
851 print PWD "$password\n$password\n";
852 close(PWD) or die("Unable to set password for test account");
856 open(HOSTS, ">>$ENV{SELFTEST_PREFIX}/dns_host_file") or die("Unable to open $ENV{SELFTEST_PREFIX}/dns_host_file");
857 print HOSTS "A $server. $server_ip
861 $ret{SERVER_IP} = $server_ip;
862 $ret{NMBD_TEST_LOG} = "$prefix/nmbd_test.log";
863 $ret{NMBD_TEST_LOG_POS} = 0;
864 $ret{WINBINDD_TEST_LOG} = "$prefix/winbindd_test.log";
865 $ret{WINBINDD_TEST_LOG_POS} = 0;
866 $ret{SMBD_TEST_LOG} = "$prefix/smbd_test.log";
867 $ret{SMBD_TEST_LOG_POS} = 0;
868 $ret{SERVERCONFFILE} = $conffile;
869 $ret{CONFIGURATION} ="-s $conffile";
870 $ret{SERVER} = $server;
871 $ret{USERNAME} = $unix_name;
872 $ret{USERID} = $unix_uid;
873 $ret{DOMAIN} = $domain;
874 $ret{NETBIOSNAME} = $server;
875 $ret{PASSWORD} = $password;
876 $ret{PIDDIR} = $piddir;
877 $ret{WINBINDD_SOCKET_DIR} = $wbsockdir;
878 $ret{WINBINDD_PRIV_PIPE_DIR} = $wbsockprivdir;
879 $ret{NMBD_SOCKET_DIR} = $nmbdsockdir;
880 $ret{SOCKET_WRAPPER_DEFAULT_IFACE} = $swiface;
881 $ret{NSS_WRAPPER_PASSWD} = $nss_wrapper_passwd;
882 $ret{NSS_WRAPPER_GROUP} = $nss_wrapper_group;
883 $ret{NSS_WRAPPER_WINBIND_SO_PATH} = $ENV{NSS_WRAPPER_WINBIND_SO_PATH};
884 $ret{LOCAL_PATH} = "$shrdir";
889 sub wait_for_start($$)
891 my ($self, $envvars) = @_;
893 # give time for nbt server to register its names
894 print "delaying for nbt name registration\n";
896 # This will return quickly when things are up, but be slow if we need to wait for (eg) SSL init
897 system($self->binpath("nmblookup") ." $envvars->{CONFIGURATION} -U $envvars->{SERVER_IP} __SAMBA__");
898 system($self->binpath("nmblookup") ." $envvars->{CONFIGURATION} __SAMBA__");
899 system($self->binpath("nmblookup") ." $envvars->{CONFIGURATION} -U 127.255.255.255 __SAMBA__");
900 system($self->binpath("nmblookup") ." $envvars->{CONFIGURATION} -U $envvars->{SERVER_IP} $envvars->{SERVER}");
901 system($self->binpath("nmblookup") ." $envvars->{CONFIGURATION} $envvars->{SERVER}");
903 # make sure smbd is also up set
904 print "wait for smbd\n";
909 $ret = system($self->binpath("smbclient") ." $envvars->{CONFIGURATION} -L $envvars->{SERVER} -U% -p 139");
914 } while ($ret != 0 && $count < 10);
916 print "SMBD failed to start up in a reasonable time (20sec)\n";
919 # Ensure we have domain users mapped.
920 system($self->binpath("net") ." $envvars->{CONFIGURATION} groupmap add rid=513 unixgroup=domusers type=domain");
922 print $self->getlog_env($envvars);