s4:selftest Confirm that there isn't a listener on the ldapi:// socket
[ira/wip.git] / selftest / target / Samba4.pm
index 81ad09dbc00c0153101928c8d0882514aa62e3e6..3c0c4f5152d636b8079b76aa48e494be9f7078c5 100644 (file)
@@ -31,25 +31,27 @@ sub bindir_path($$) {
 }
 
 sub openldap_start($$$) {
-        my ($slapd_conf, $uri, $logs) = @_;
-        system("$ENV{OPENLDAP_SLAPD} -d0 -f $slapd_conf -h $uri > $logs 2>&1 &");
 }
 
 sub slapd_start($$)
 {
        my $count = 0;
        my ($self, $env_vars) = @_;
+       my $ldbsearch = $self->bindir_path("ldbsearch");
 
        my $uri = $env_vars->{LDAP_URI};
 
+       if (system("$ldbsearch -H $uri -s base -b \"\" supportedLDAPVersion > /dev/null") == 0) {
+           print "A SLAPD is still listening to $uri before we started the LDAP backend.  Aborting!";
+           return 1;
+       }
        # running slapd in the background means it stays in the same process group, so it can be
        # killed by timelimit
        if ($self->{ldap} eq "fedora-ds") {
                system("$ENV{FEDORA_DS_ROOT}/sbin/ns-slapd -D $env_vars->{FEDORA_DS_DIR} -d0 -i $env_vars->{FEDORA_DS_PIDFILE}> $env_vars->{LDAPDIR}/logs 2>&1 &");
        } elsif ($self->{ldap} eq "openldap") {
-               openldap_start($env_vars->{SLAPD_CONF}, $uri, "$env_vars->{LDAPDIR}/logs");
+               system("$ENV{OPENLDAP_SLAPD} -d0 -F $env_vars->{SLAPD_CONF_D} -h $uri > $env_vars->{LDAPDIR}/logs 2>&1 &");
        }
-       my $ldbsearch = $self->bindir_path("ldbsearch");
        while (system("$ldbsearch -H $uri -s base -b \"\" supportedLDAPVersion > /dev/null") != 0) {
                $count++;
                if ($count > 40) {
@@ -123,7 +125,16 @@ sub check_or_start($$$)
                        $optarg.= " $ENV{SAMBA_OPTIONS}";
                }
                my $samba = $self->bindir_path("samba");
-               my $ret = system("$valgrind $samba $optarg $env_vars->{CONFIGURATION} -M single -i --leak-report-full");
+
+               # allow selection of the process model using
+               # the environment varibale SAMBA_PROCESS_MODEL
+               # that allows us to change the process model for 
+               # individual machines in the build farm
+               my $model = "single";
+               if (defined($ENV{SAMBA_PROCESS_MODEL})) {
+                       $model = $ENV{SAMBA_PROCESS_MODEL};
+               }
+               my $ret = system("$valgrind $samba $optarg $env_vars->{CONFIGURATION} -M $model -i");
                if ($? == -1) {
                        print "Unable to start $samba: $ret: $!\n";
                        exit 1;
@@ -198,37 +209,26 @@ type: 0x3
 ");
 }
 
-sub mk_fedora_ds($$$)
+sub mk_fedora_ds($$)
 {
-       my ($self, $ldapdir, $configuration) = @_;
-
-       my $fedora_ds_inf = "$ldapdir/fedorads.inf";
-       my $fedora_ds_extra_ldif = "$ldapdir/fedorads-partitions.ldif";
+       my ($self, $ldapdir) = @_;
 
        #Make the subdirectory be as fedora DS would expect
        my $fedora_ds_dir = "$ldapdir/slapd-samba4";
 
        my $pidfile = "$fedora_ds_dir/logs/slapd-samba4.pid";
 
-my $dir = getcwd();
-chdir "$ENV{FEDORA_DS_ROOT}/bin" || die;
-       if (system("perl $ENV{FEDORA_DS_ROOT}/sbin/setup-ds.pl --silent --file=$fedora_ds_inf >&2") != 0) {
-            chdir $dir;
-            die("perl $ENV{FEDORA_DS_ROOT}/sbin/setup-ds.pl --silent --file=$fedora_ds_inf FAILED: $?");
-        }
-        chdir $dir || die;
-
        return ($fedora_ds_dir, $pidfile);
 }
 
-sub mk_openldap($$$)
+sub mk_openldap($$)
 {
-       my ($self, $ldapdir, $configuration) = @_;
+       my ($self, $ldapdir) = @_;
 
-       my $slapd_conf = "$ldapdir/slapd.conf";
+       my $slapd_conf_d = "$ldapdir/slapd.d";
        my $pidfile = "$ldapdir/slapd.pid";
 
-       return ($slapd_conf, $pidfile);
+       return ($slapd_conf_d, $pidfile);
 }
 
 sub mk_keyblobs($$)
@@ -783,41 +783,22 @@ sub provision($$$$$$$)
        my $ret = $self->provision_raw_step1($ctx);
 
        if (defined($self->{ldap})) {
-               my $configuration = "--configfile=$ctx->{smb_conf}";
-
-               $ret->{LDAP_URI} = $ctx->{ldap_uri};
-               push (@{$ctx->{provision_options}},"--ldap-backend=$ctx->{ldap_uri}");
-
-               push (@{$ctx->{provision_options}}, "--password=$ctx->{password}");
-
+                $ret->{LDAP_URI} = $ctx->{ldap_uri};
+               push (@{$ctx->{provision_options}}, "--ldap-backend-type=" . $self->{ldap});
                if ($self->{ldap} eq "openldap") {
-                       push (@{$ctx->{provision_options}}, "--username=samba-admin");
-                       push (@{$ctx->{provision_options}}, "--ldap-backend-type=openldap");
-
-                        system("$self->{setupdir}/provision-backend $configuration --ldap-admin-pass=$ctx->{password} --root=$ctx->{unix_name} --realm=$ctx->{realm} --domain=$ctx->{domain} --host-name=$ctx->{netbiosname} --ldap-backend-type=$self->{ldap} --nosync --ol-slapd=$ENV{OPENLDAP_SLAPD}>&2") == 0 or die("backend provision failed");
-
-                       ($ret->{SLAPD_CONF}, $ret->{OPENLDAP_PIDFILE}) = $self->mk_openldap($ctx->{ldapdir}, $configuration) or die("Unable to create openldap directories");
+                       push (@{$ctx->{provision_options}}, "--slapd-path=" . $ENV{OPENLDAP_SLAPD});
+                       ($ret->{SLAPD_CONF_D}, $ret->{OPENLDAP_PIDFILE}) = $self->mk_openldap($ctx->{ldapdir}) or die("Unable to create openldap directories");
 
                 } elsif ($self->{ldap} eq "fedora-ds") {
-                       push (@{$ctx->{provision_options}}, "--simple-bind-dn=cn=Manager,$ctx->{localbasedn}");
-                       push (@{$ctx->{provision_options}}, "--ldap-backend-type=fedora-ds");
-
-                        system("$self->{setupdir}/provision-backend $configuration --ldap-admin-pass=$ctx->{password} --root=$ctx->{unix_name} --realm=$ctx->{realm} --domain=$ctx->{domain} --host-name=$ctx->{netbiosname} --ldap-backend-type=$self->{ldap}>&2") == 0 or die("backend provision failed");
-
-                       ($ret->{FEDORA_DS_DIR}, $ret->{FEDORA_DS_PIDFILE}) = $self->mk_fedora_ds($ctx->{ldapdir}, $configuration) or die("Unable to create fedora ds directories");
-
-                       $self->slapd_start($ret) or die("couldn't start slapd");
-
+                       push (@{$ctx->{provision_options}}, "--slapd-path=" . "$ENV{FEDORA_DS_ROOT}/sbin/ns-slapd");
+                       push (@{$ctx->{provision_options}}, "--setup-ds-path=" . "$ENV{FEDORA_DS_ROOT}/sbin/setup-ds.pl");
+                       ($ret->{FEDORA_DS_DIR}, $ret->{FEDORA_DS_PIDFILE}) = $self->mk_fedora_ds($ctx->{ldapdir}) or die("Unable to create fedora ds directories");
                }
 
        }
 
        $ret = $self->provision_raw_step2($ctx, $ret);
 
-       if (defined($self->{ldap}) && ($self->{ldap} eq "fedora-ds")) {
-               $self->slapd_stop($ret) or die("couldn't stop slapd");
-       }
-
        return $ret;
 }