mirror of
https://github.com/samba-team/samba.git
synced 2025-02-23 09:57:40 +03:00
s4-selftest: Test samba-tool domain dcpromo
This needs a new environment to test it properly. This requires a raise in the number of socket wrapper interfaces. Andrew Bartlett
This commit is contained in:
parent
1c86ab9c50
commit
2908bbe06a
@ -154,7 +154,7 @@
|
||||
/* This limit is to avoid broadcast sendto() needing to stat too many
|
||||
* files. It may be raised (with a performance cost) to up to 254
|
||||
* without changing the format above */
|
||||
#define MAX_WRAPPED_INTERFACES 32
|
||||
#define MAX_WRAPPED_INTERFACES 40
|
||||
|
||||
#ifdef HAVE_IPV6
|
||||
/*
|
||||
|
@ -161,6 +161,7 @@ sub get_interface($)
|
||||
$interfaces{"plugindc"} = 30;
|
||||
$interfaces{"localsubdc"} = 31;
|
||||
$interfaces{"chgdcpass"} = 32;
|
||||
$interfaces{"promotedvdc"} = 33;
|
||||
|
||||
# update lib/socket_wrapper/socket_wrapper.c
|
||||
# #define MAX_WRAPPED_INTERFACES 32
|
||||
|
@ -966,6 +966,78 @@ sub provision_rpc_proxy($$$)
|
||||
return $ret;
|
||||
}
|
||||
|
||||
sub provision_promoted_vampire_dc($$$)
|
||||
{
|
||||
my ($self, $prefix, $dcvars) = @_;
|
||||
print "PROVISIONING VAMPIRE DC...";
|
||||
|
||||
# We do this so that we don't run the provision. That's the job of 'net vampire'.
|
||||
my $ctx = $self->provision_raw_prepare($prefix, "domain controller",
|
||||
"promotedvdc",
|
||||
"SAMBADOMAIN",
|
||||
"samba.example.com",
|
||||
"2008",
|
||||
$dcvars->{PASSWORD},
|
||||
$dcvars->{SERVER_IP});
|
||||
|
||||
$ctx->{smb_conf_extra_options} = "
|
||||
max xmit = 32K
|
||||
server max protocol = SMB2
|
||||
|
||||
[sysvol]
|
||||
path = $ctx->{statedir}/sysvol
|
||||
read only = yes
|
||||
|
||||
[netlogon]
|
||||
path = $ctx->{statedir}/sysvol/$ctx->{dnsname}/scripts
|
||||
read only = no
|
||||
|
||||
";
|
||||
|
||||
my $ret = $self->provision_raw_step1($ctx);
|
||||
unless ($ret) {
|
||||
return undef;
|
||||
}
|
||||
|
||||
my $samba_tool = Samba::bindir_path($self, "samba-tool");
|
||||
my $cmd = "";
|
||||
$cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
|
||||
$cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
|
||||
$cmd .= "$samba_tool domain join $ret->{CONFIGURATION} $dcvars->{REALM} MEMBER --realm=$dcvars->{REALM}";
|
||||
$cmd .= " -U$dcvars->{DC_USERNAME}\%$dcvars->{DC_PASSWORD}";
|
||||
$cmd .= " --machinepass=machine$ret->{password}";
|
||||
|
||||
unless (system($cmd) == 0) {
|
||||
warn("Join failed\n$cmd");
|
||||
return undef;
|
||||
}
|
||||
|
||||
my $samba_tool = Samba::bindir_path($self, "samba-tool");
|
||||
my $cmd = "";
|
||||
$cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
|
||||
$cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
|
||||
$cmd .= "$samba_tool domain dcpromo $ret->{CONFIGURATION} $dcvars->{REALM} DC --realm=$dcvars->{REALM}";
|
||||
$cmd .= " -U$dcvars->{DC_USERNAME}\%$dcvars->{DC_PASSWORD}";
|
||||
$cmd .= " --machinepass=machine$ret->{password}";
|
||||
|
||||
unless (system($cmd) == 0) {
|
||||
warn("Join failed\n$cmd");
|
||||
return undef;
|
||||
}
|
||||
|
||||
$ret->{PROMOTED_VAMPIRE_DC_SERVER} = $ret->{SERVER};
|
||||
$ret->{PROMOTED_VAMPIRE_DC_SERVER_IP} = $ret->{SERVER_IP};
|
||||
$ret->{PROMOTED_VAMPIRE_DC_NETBIOSNAME} = $ret->{NETBIOSNAME};
|
||||
|
||||
$ret->{DC_SERVER} = $dcvars->{DC_SERVER};
|
||||
$ret->{DC_SERVER_IP} = $dcvars->{DC_SERVER_IP};
|
||||
$ret->{DC_NETBIOSNAME} = $dcvars->{DC_NETBIOSNAME};
|
||||
$ret->{DC_USERNAME} = $dcvars->{DC_USERNAME};
|
||||
$ret->{DC_PASSWORD} = $dcvars->{DC_PASSWORD};
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
sub provision_vampire_dc($$$)
|
||||
{
|
||||
my ($self, $prefix, $dcvars) = @_;
|
||||
@ -1486,6 +1558,11 @@ sub setup_env($$$)
|
||||
$self->setup_dc("$path/dc");
|
||||
}
|
||||
return $self->setup_vampire_dc("$path/vampire_dc", $self->{vars}->{dc});
|
||||
} elsif ($envname eq "promoted_vampire_dc") {
|
||||
if (not defined($self->{vars}->{dc})) {
|
||||
$self->setup_dc("$path/dc");
|
||||
}
|
||||
return $self->setup_promoted_vampire_dc("$path/promoted_vampire_dc", $self->{vars}->{dc});
|
||||
} elsif ($envname eq "subdom_dc") {
|
||||
if (not defined($self->{vars}->{dc})) {
|
||||
$self->setup_dc("$path/dc");
|
||||
@ -1659,7 +1736,59 @@ sub setup_vampire_dc($$$)
|
||||
my $base_dn = "DC=".join(",DC=", split(/\./, $dc_vars->{REALM}));
|
||||
$cmd = "SOCKET_WRAPPER_DEFAULT_IFACE=\"$env->{SOCKET_WRAPPER_DEFAULT_IFACE}\"";
|
||||
$cmd .= " KRB5_CONFIG=\"$env->{KRB5_CONFIG}\"";
|
||||
$cmd .= " $samba_tool drs replicate $env->{DC_SERVER} $env->{VAMPIRE_DC_SERVER}";
|
||||
$cmd .= " $samba_tool drs replicate $env->{DC_SERVER} $env->{SERVER}";
|
||||
$cmd .= " $dc_vars->{CONFIGURATION}";
|
||||
$cmd .= " -U$dc_vars->{DC_USERNAME}\%$dc_vars->{DC_PASSWORD}";
|
||||
# replicate Configuration NC
|
||||
my $cmd_repl = "$cmd \"CN=Configuration,$base_dn\"";
|
||||
unless(system($cmd_repl) == 0) {
|
||||
warn("Failed to replicate\n$cmd_repl");
|
||||
return undef;
|
||||
}
|
||||
# replicate Default NC
|
||||
$cmd_repl = "$cmd \"$base_dn\"";
|
||||
unless(system($cmd_repl) == 0) {
|
||||
warn("Failed to replicate\n$cmd_repl");
|
||||
return undef;
|
||||
}
|
||||
}
|
||||
|
||||
return $env;
|
||||
}
|
||||
|
||||
sub setup_promoted_vampire_dc($$$)
|
||||
{
|
||||
my ($self, $path, $dc_vars) = @_;
|
||||
|
||||
my $env = $self->provision_promoted_vampire_dc($path, $dc_vars);
|
||||
|
||||
if (defined $env) {
|
||||
$self->check_or_start($env, "single");
|
||||
|
||||
$self->wait_for_start($env);
|
||||
|
||||
$self->{vars}->{promoted_vampire_dc} = $env;
|
||||
|
||||
# force replicated DC to update repsTo/repsFrom
|
||||
# for vampired partitions
|
||||
my $samba_tool = Samba::bindir_path($self, "samba-tool");
|
||||
my $cmd = "";
|
||||
$cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$env->{SOCKET_WRAPPER_DEFAULT_IFACE}\"";
|
||||
$cmd .= " KRB5_CONFIG=\"$env->{KRB5_CONFIG}\"";
|
||||
$cmd .= " $samba_tool drs kcc $env->{DC_SERVER}";
|
||||
$cmd .= " $env->{CONFIGURATION}";
|
||||
$cmd .= " -U$dc_vars->{DC_USERNAME}\%$dc_vars->{DC_PASSWORD}";
|
||||
unless (system($cmd) == 0) {
|
||||
warn("Failed to exec kcc\n$cmd");
|
||||
return undef;
|
||||
}
|
||||
|
||||
# as 'vampired' dc may add data in its local replica
|
||||
# we need to synchronize data between DCs
|
||||
my $base_dn = "DC=".join(",DC=", split(/\./, $dc_vars->{REALM}));
|
||||
$cmd = "SOCKET_WRAPPER_DEFAULT_IFACE=\"$env->{SOCKET_WRAPPER_DEFAULT_IFACE}\"";
|
||||
$cmd .= " KRB5_CONFIG=\"$env->{KRB5_CONFIG}\"";
|
||||
$cmd .= " $samba_tool drs replicate $env->{DC_SERVER} $env->{SERVER}";
|
||||
$cmd .= " $dc_vars->{CONFIGURATION}";
|
||||
$cmd .= " -U$dc_vars->{DC_USERNAME}\%$dc_vars->{DC_PASSWORD}";
|
||||
# replicate Configuration NC
|
||||
|
@ -524,7 +524,8 @@ plantestsuite("samba4.blackbox.provision-backend", "none", ["PYTHON=%s" % python
|
||||
plantestsuite("samba4.blackbox.renamedc.sh", "none", ["PYTHON=%s" % python, os.path.join(bbdir, "renamedc.sh"), '$PREFIX/provision'])
|
||||
|
||||
# Demote the vampire DC, it must be the last test on the VAMPIRE DC
|
||||
plantestsuite("samba4.blackbox.samba_tool_demote(vampire_dc)", "vampire_dc", [os.path.join(samba4srcdir, "utils/tests/test_demote.sh"), '$SERVER', '$SERVER_IP', '$USERNAME', '$PASSWORD', '$DOMAIN', '$DC_SERVER', '$PREFIX/vampire_dc', smbclient])
|
||||
for env in ['vampire_dc', 'promoted_vampire_dc']:
|
||||
plantestsuite("samba4.blackbox.samba_tool_demote(%s)" % env, env, [os.path.join(samba4srcdir, "utils/tests/test_demote.sh"), '$SERVER', '$SERVER_IP', '$USERNAME', '$PASSWORD', '$DOMAIN', '$DC_SERVER', '$PREFIX/%s' % env, smbclient])
|
||||
# check the databases are all OK. PLEASE LEAVE THIS AS THE LAST TEST
|
||||
for env in ["dc", "fl2000dc", "fl2003dc", "fl2008r2dc"]:
|
||||
plantestsuite("samba4.blackbox.dbcheck(%s)" % env, env + ":local" , ["PYTHON=%s" % python, os.path.join(bbdir, "dbcheck.sh"), '$PREFIX/provision', configuration])
|
||||
|
Loading…
x
Reference in New Issue
Block a user