my ($self, $env_vars, $process_model) = @_;
my $STDIN_READER;
- return 0 if $self->check_env($env_vars);
+ my $env_ok = $self->check_env($env_vars);
+ if ($env_ok) {
+ return $env_vars->{SAMBA_PID};
+ }
# use a pipe for stdin in the child processes. This allows
# those processes to monitor the pipe for EOF to ensure they
}
$ENV{UID_WRAPPER} = "1";
+ $ENV{UID_WRAPPER_ROOT} = "1";
$ENV{MAKE_TEST_BINARY} = Samba::bindir_path($self, "samba");
my @preargs = ();
exec(@preargs, Samba::bindir_path($self, "samba"), "-M", $process_model, "-i", "--maximum-runtime=$self->{server_maxtime}", $env_vars->{CONFIGURATION}, @optargs) or die("Unable to start samba: $!");
}
$env_vars->{SAMBA_PID} = $pid;
- print "DONE\n";
+ print "DONE ($pid)\n";
close($STDIN_READER);
+ if ($self->wait_for_start($env_vars) != 0) {
+ warn("Samba $pid failed to start up");
+ return undef;
+ }
+
return $pid;
}
sub wait_for_start($$)
{
my ($self, $testenv_vars) = @_;
- my $ret;
+ my $ret = 0;
+
+ if (not $self->check_env($testenv_vars)) {
+ warn("unable to confirm Samba $testenv_vars->{SAMBA_PID} is running");
+ return -1;
+ }
+
# give time for nbt server to register its names
print "delaying for nbt name registration\n";
sleep 2;
while (system("$ldbsearch -H ldap://$testenv_vars->{SERVER} -U$testenv_vars->{USERNAME}%$testenv_vars->{PASSWORD} -s base -b \"$rid_set_dn\" rIDAllocationPool > /dev/null") != 0) {
$count++;
if ($count > 40) {
- $ret = 1;
+ $ret = -1;
last;
}
sleep(1);
$ctx->{smb_conf_extra_options} = "";
my @provision_options = ();
+ push (@provision_options, "KRB5_CONFIG=\"$ctx->{krb5_config}\"");
push (@provision_options, "NSS_WRAPPER_PASSWD=\"$ctx->{nsswrap_passwd}\"");
push (@provision_options, "NSS_WRAPPER_GROUP=\"$ctx->{nsswrap_group}\"");
push (@provision_options, "NSS_WRAPPER_HOSTS=\"$ctx->{nsswrap_hosts}\"");
}
my $testallowed_account = "testallowed";
- my $samba_tool_cmd = Samba::bindir_path($self, "samba-tool")
+ my $samba_tool_cmd = "";
+ $samba_tool_cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
+ $samba_tool_cmd .= Samba::bindir_path($self, "samba-tool")
. " user add --configfile=$ctx->{smb_conf} $testallowed_account $ctx->{password}";
unless (system($samba_tool_cmd) == 0) {
warn("Unable to add testallowed user: \n$samba_tool_cmd\n");
return undef;
}
- my $ldbmodify = Samba::bindir_path($self, "ldbmodify");
+ my $ldbmodify = "";
+ $ldbmodify .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
+ $ldbmodify .= Samba::bindir_path($self, "ldbmodify");
my $base_dn = "DC=".join(",DC=", split(/\./, $ctx->{realm}));
if ($ctx->{server_role} ne "domain controller") {
";
close(LDIF);
- $samba_tool_cmd = Samba::bindir_path($self, "samba-tool")
+ $samba_tool_cmd = "";
+ $samba_tool_cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
+ $samba_tool_cmd .= Samba::bindir_path($self, "samba-tool")
. " user add --configfile=$ctx->{smb_conf} testdenied $ctx->{password}";
unless (system($samba_tool_cmd) == 0) {
warn("Unable to add testdenied user: \n$samba_tool_cmd\n");
";
close(LDIF);
- $samba_tool_cmd = Samba::bindir_path($self, "samba-tool")
+ $samba_tool_cmd = "";
+ $samba_tool_cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
+ $samba_tool_cmd .= Samba::bindir_path($self, "samba-tool")
. " group addmembers --configfile=$ctx->{smb_conf} 'Allowed RODC Password Replication Group' '$testallowed_account'";
unless (system($samba_tool_cmd) == 0) {
warn("Unable to add '$testallowed_account' user to 'Allowed RODC Password Replication Group': \n$samba_tool_cmd\n");
[vfs_fruit]
path = $ctx->{share}
- vfs objects = catia fruit streams_xattr
+ vfs objects = catia fruit streams_xattr acl_xattr
+ ea support = yes
fruit:ressource = file
fruit:metadata = netatalk
fruit:locking = netatalk
sub check_env($$)
{
my ($self, $envvars) = @_;
+ my $samba_pid = $envvars->{SAMBA_PID};
+
+ if (not defined($samba_pid)) {
+ return 0;
+ } elsif ($samba_pid > 0) {
+ my $childpid = Samba::cleanup_child($samba_pid, "samba");
- my $childpid = Samba::cleanup_child($envvars->{SAMBA_PID}, "samba");
+ if ($childpid == 0) {
+ return 1;
+ }
+ return 0;
+ } else {
+ return 1;
+ }
- return ($childpid == 0);
}
sub setup_env($$$)
}
return $target3->setup_admember_rfc2307("$path/ad_member_rfc2307",
$self->{vars}->{ad_dc_ntvfs}, 34);
+ } elsif ($envname eq "none") {
+ return $self->setup_none("$path/none");
} else {
return "UNKNOWN";
}
my $env = $self->provision_s4member($path, $dc_vars);
if (defined $env) {
- $self->check_or_start($env, "single");
-
- $self->wait_for_start($env);
+ if (not defined($self->check_or_start($env, "single"))) {
+ return undef;
+ }
$self->{vars}->{s4member} = $env;
}
my $env = $self->provision_rpc_proxy($path, $dc_vars);
if (defined $env) {
- $self->check_or_start($env, "single");
-
- $self->wait_for_start($env);
+ if (not defined($self->check_or_start($env, "single"))) {
+ return undef;
+ }
$self->{vars}->{rpc_proxy} = $env;
}
my $env = $self->provision_ad_dc_ntvfs($path);
if (defined $env) {
- $self->check_or_start($env, "standard");
-
- $self->wait_for_start($env);
+ if (not defined($self->check_or_start($env, "standard"))) {
+ warn("Failed to start ad_dc_ntvfs");
+ return undef;
+ }
$self->{vars}->{ad_dc_ntvfs} = $env;
}
my $env = $self->provision_chgdcpass($path);
if (defined $env) {
- $self->check_or_start($env, "single");
-
- $self->wait_for_start($env);
+ if (not defined($self->check_or_start($env, "single"))) {
+ return undef;
+ }
$self->{vars}->{chgdcpass} = $env;
}
my $env = $self->provision_fl2000dc($path);
if (defined $env) {
- $self->check_or_start($env, "single");
-
- $self->wait_for_start($env);
+ if (not defined($self->check_or_start($env, "single"))) {
+ return undef;
+ }
$self->{vars}->{fl2000dc} = $env;
}
my $env = $self->provision_fl2003dc($path);
if (defined $env) {
- $self->check_or_start($env, "single");
-
- $self->wait_for_start($env);
+ if (not defined($self->check_or_start($env, "single"))) {
+ return undef;
+ }
$env = $self->setup_trust($env, $dc_vars, "external", "--no-aes-keys");
my $env = $self->provision_fl2008r2dc($path);
if (defined $env) {
- $self->check_or_start($env, "single");
-
- $self->wait_for_start($env);
+ if (not defined($self->check_or_start($env, "single"))) {
+ return undef;
+ }
my $upn_array = ["$env->{REALM}.upn"];
my $spn_array = ["$env->{REALM}.spn"];
my $env = $self->provision_vampire_dc($path, $dc_vars);
if (defined $env) {
- $self->check_or_start($env, "single");
-
- $self->wait_for_start($env);
+ if (not defined($self->check_or_start($env, "single"))) {
+ return undef;
+ }
$self->{vars}->{vampire_dc} = $env;
my $env = $self->provision_promoted_dc($path, $dc_vars);
if (defined $env) {
- $self->check_or_start($env, "single");
-
- $self->wait_for_start($env);
+ if (not defined($self->check_or_start($env, "single"))) {
+ return undef;
+ }
$self->{vars}->{promoted_dc} = $env;
my $env = $self->provision_subdom_dc($path, $dc_vars);
if (defined $env) {
- $self->check_or_start($env, "single");
-
- $self->wait_for_start($env);
+ if (not defined($self->check_or_start($env, "single"))) {
+ return undef;
+ }
$self->{vars}->{subdom_dc} = $env;
return undef;
}
- $self->check_or_start($env, "single");
-
- $self->wait_for_start($env);
+ if (not defined($self->check_or_start($env, "single"))) {
+ return undef;
+ }
# force source and replicated DC to update repsTo/repsFrom
# for vampired partitions
$env->{NSS_WRAPPER_MODULE_FN_PREFIX} = undef;
}
- $self->check_or_start($env, "single");
-
- $self->wait_for_start($env);
+ if (not defined($self->check_or_start($env, "single"))) {
+ return undef;
+ }
my $upn_array = ["$env->{REALM}.upn"];
my $spn_array = ["$env->{REALM}.spn"];
return $env;
}
+sub setup_none($$)
+{
+ my ($self, $path) = @_;
+
+ my $ret = {
+ KRB5_CONFIG => abs_path($path) . "/no_krb5.conf",
+ SAMBA_PID => -1,
+ }
+}
+
1;