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);
19 my ($bindir, $conf, $uri) = @_;
20 # running slapd in the background means it stays in the same process group, so it can be
22 if (defined($ENV{FEDORA_DS_PREFIX})) {
23 system("$ENV{FEDORA_DS_PREFIX}/sbin/ns-slapd -D $ENV{FEDORA_DS_DIR} -d$ENV{FEDORA_DS_LOGLEVEL} > $ENV{LDAPDIR}/logs 2>&1 &");
25 my $oldpath = $ENV{PATH};
26 $ENV{PATH} = "/usr/local/sbin:/usr/sbin:/sbin:$ENV{PATH}";
27 system("slapd -d$ENV{OPENLDAP_LOGLEVEL} -f $conf -h $uri > $ENV{LDAPDIR}/logs 2>&1 &");
28 $ENV{PATH} = $oldpath;
30 while (system("$bindir/ldbsearch -H $uri -s base -b \"\" supportedLDAPVersion > /dev/null") != 0) {
43 if (defined($ENV{FEDORA_DS_PREFIX})) {
44 system("$ENV{LDAPDIR}/slapd-samba4/stop-slapd");
46 open(IN, "<$ENV{PIDDIR}/slapd.pid") or
47 die("unable to open slapd pid file");
53 sub smbd_check_or_start($$$$$$)
55 my ($bindir, $test_fifo, $test_log, $socket_wrapper_dir, $max_time, $conffile) = @_;
56 return 0 if ( -p $test_fifo );
58 warn("Not using socket wrapper, but also not running as root. Will not be able to listen on proper ports") unless
59 defined($socket_wrapper_dir) or $< == 0;
61 if (defined($socket_wrapper_dir)) {
62 if ( -d $socket_wrapper_dir ) {
63 unlink <$socket_wrapper_dir/*>;
65 mkdir($socket_wrapper_dir);
70 POSIX::mkfifo($test_fifo, 0700);
74 if (defined($ENV{SMBD_VALGRIND})) {
75 $valgrind = $ENV{SMBD_VALGRIND};
78 print "STARTING SMBD...";
81 open STDIN, $test_fifo;
82 open STDOUT, ">$test_log";
83 open STDERR, '>&STDOUT';
85 if (defined($max_time)) {
86 $optarg = "--maximum-runtime=$max_time ";
88 my $ret = system("$valgrind $bindir/smbd $optarg -s $conffile -M single -i --leak-report-full");
90 print "Unable to start smbd: $ret: $!\n";
94 unlink(<$socket_wrapper_dir/*>) if (defined($socket_wrapper_dir) and -d $socket_wrapper_dir);
97 print "smbd exits with status $exit\n";
98 } elsif ( $ret & 127 ) {
99 print "smbd got signal ".($ret & 127)." and exits with $exit!\n";
102 print "smbd failed with status $exit!\n";
113 # give time for nbt server to register its names
114 print "delaying for nbt name registration\n";
116 # This will return quickly when things are up, but be slow if we
117 # need to wait for (eg) SSL init
118 system("bin/nmblookup $ENV{CONFIGURATION} $ENV{SERVER}");
119 system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{SERVER}");
120 system("bin/nmblookup $ENV{CONFIGURATION} $ENV{SERVER}");
121 system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{NETBIOSNAME}");
122 system("bin/nmblookup $ENV{CONFIGURATION} $ENV{NETBIOSNAME}");
123 system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{NETBIOSNAME}");
124 system("bin/nmblookup $ENV{CONFIGURATION} $ENV{NETBIOSNAME}");
125 system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{NETBIOSNAME}");
132 print "PROVISIONING...";
133 open(IN, "$RealBin/mktestsetup.sh $prefix|") or die("Unable to setup");
135 die ("Error parsing `$_'") unless (/^([A-Z0-9a-z_]+)=(.*)$/);
142 sub provision_ldap($$)
144 my ($bindir, $setupdir) = @_;
145 system("$bindir/smbscript $setupdir/provision $ENV{PROVISION_OPTIONS} \"$ENV{PROVISION_ACI}\" --ldap-backend=$ENV{LDAP_URI}") and
146 die("LDAP PROVISIONING failed: $bindir/smbscript $setupdir/provision $ENV{PROVISION_OPTIONS} \"$ENV{PROVISION_ACI}\" --ldap-backend=$ENV{LDAP_URI}");