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 @EXPORT_OK = qw(slapd_start slapd_stop smbd_check_or_start provision);
13 use FindBin
qw($RealBin);
18 my ($conf, $uri, $loglevel) = @_;
19 # running slapd in the background means it stays in the same process group, so it can be
21 if (defined($ENV{FEDORA_DS_PREFIX})) {
22 system("$ENV{FEDORA_DS_PREFIX}/sbin/ns-slapd -D $ENV{FEDORA_DS_DIR} -d$ENV{FEDORA_DS_LOGLEVEL} > $ENV{LDAPDIR}/logs 2>&1 &");
24 my $oldpath = $ENV{PATH};
25 $ENV{PATH} = "/usr/local/sbin:/usr/sbin:/sbin:$ENV{PATH}";
26 system("slapd -d$ENV{OPENLDAP_LOGLEVEL} -f $conf -h $uri > $ENV{LDAPDIR}/logs 2>&1 &");
27 $ENV{PATH} = $oldpath;
34 if (defined($ENV{FEDORA_DS_PREFIX})) {
35 system("$ENV{LDAPDIR}/slapd-samba4/stop-slapd");
37 open(IN, "<$ENV{PIDDIR}/slapd.pid") or
38 die("unable to open slapd pid file");
44 sub smbd_check_or_start($$$$$$)
46 my ($bindir, $test_fifo, $test_log, $socket_wrapper_dir, $max_time, $conffile) = @_;
47 return 0 if ( -p $test_fifo );
49 warn("Not using socket wrapper, but also not running as root. Will not be able to listen on proper ports") unless
50 defined($socket_wrapper_dir) or $< == 0;
52 if (defined($socket_wrapper_dir)) {
53 if ( -d $socket_wrapper_dir ) {
54 unlink <$socket_wrapper_dir/*>;
56 mkdir($socket_wrapper_dir);
61 POSIX::mkfifo($test_fifo, 0700);
65 if (defined($ENV{SMBD_VALGRIND})) {
66 $valgrind = $ENV{SMBD_VALGRIND};
69 print "STARTING SMBD...";
72 open STDIN, $test_fifo;
73 open STDOUT, ">$test_log";
74 open STDERR, '>&STDOUT';
76 if (defined($max_time)) {
77 $optarg = "--maximum-runtime=$max_time ";
79 my $ret = system("$valgrind $bindir/smbd $optarg -s $conffile -M single -i --leak-report-full");
81 print "Unable to start smbd: $ret: $!\n";
85 unlink(<$socket_wrapper_dir/*>) if (defined($socket_wrapper_dir) and -d $socket_wrapper_dir);
88 print "smbd exits with status $exit\n";
89 } elsif ( $ret & 127 ) {
90 print "smbd got signal ".($ret & 127)." and exits with $exit!\n";
93 print "smbd failed with status $exit!\n";
104 # give time for nbt server to register its names
105 print "delaying for nbt name registration\n";
108 # This will return quickly when things are up, but be slow if we
109 # need to wait for (eg) SSL init
110 system("bin/nmblookup $ENV{CONFIGURATION} $ENV{SERVER}");
111 system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{SERVER}");
112 system("bin/nmblookup $ENV{CONFIGURATION} $ENV{SERVER}");
113 system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{NETBIOSNAME}");
114 system("bin/nmblookup $ENV{CONFIGURATION} $ENV{NETBIOSNAME}");
115 system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{NETBIOSNAME}");
122 print "PROVISIONING...";
123 open(IN, "$RealBin/mktestsetup.sh $prefix|") or die("Unable to setup");
125 die ("Error parsing `$_'") unless (/^([A-Z0-9a-z_]+)=(.*)$/);
132 sub provision_ldap($$)
134 my ($bindir, $setupdir) = @_;
135 system("$bindir/smbscript $setupdir/provision $ENV{PROVISION_OPTIONS} \"$ENV{PROVISION_ACI}\" --ldap-backend=$ENV{LDAP_URI}") and
136 die("LDAP PROVISIONING failed: $bindir/smbscript $setupdir/provision $ENV{PROVISION_OPTIONS} \"$ENV{PROVISION_ACI}\" --ldap-backend=$ENV{LDAP_URI}");