mirror of
https://github.com/samba-team/samba.git
synced 2025-02-26 21:57:41 +03:00
selftest: setup_dns_hub
Start the central dns forwarder on interface 64 Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
This commit is contained in:
parent
61e6479129
commit
62584f3d08
@ -427,6 +427,8 @@ sub get_interface($)
|
||||
$interfaces{"prockilldc"} = 46;
|
||||
$interfaces{"proclimitdc"} = 47;
|
||||
|
||||
$interfaces{"rootdnsforwarder"} = 64;
|
||||
|
||||
# update lib/socket_wrapper/socket_wrapper.c
|
||||
# #define MAX_WRAPPED_INTERFACES 64
|
||||
# if you wish to have more than 64 interfaces
|
||||
|
@ -16,6 +16,7 @@ use SocketWrapper;
|
||||
use target::Samba;
|
||||
use target::Samba3;
|
||||
use Archive::Tar;
|
||||
use File::Path 'make_path';
|
||||
|
||||
sub new($$$$$) {
|
||||
my ($classname, $bindir, $ldap, $srcdir, $server_maxtime) = @_;
|
||||
@ -329,6 +330,114 @@ sub mk_openldap($$)
|
||||
return ($slapd_conf_d, $pidfile);
|
||||
}
|
||||
|
||||
sub setup_dns_hub_internal($$$)
|
||||
{
|
||||
my ($self, $hostname, $prefix) = @_;
|
||||
my $STDIN_READER;
|
||||
|
||||
unless(-d $prefix or make_path($prefix, 0777)) {
|
||||
warn("Unable to create $prefix");
|
||||
return undef;
|
||||
}
|
||||
my $prefix_abs = abs_path($prefix);
|
||||
|
||||
die ("prefix=''") if $prefix_abs eq "";
|
||||
die ("prefix='/'") if $prefix_abs eq "/";
|
||||
|
||||
unless (system("rm -rf $prefix_abs/*") == 0) {
|
||||
warn("Unable to clean up");
|
||||
}
|
||||
|
||||
my $swiface = Samba::get_interface($hostname);
|
||||
|
||||
my $env = undef;
|
||||
$env->{prefix} = $prefix;
|
||||
$env->{prefix_abs} = $prefix_abs;
|
||||
|
||||
$env->{hostname} = $hostname;
|
||||
$env->{swiface} = $swiface;
|
||||
|
||||
$env->{ipv4} = "127.0.0.$swiface";
|
||||
$env->{ipv6} = sprintf("fd00:0000:0000:0000:0000:0000:5357:5f%02x", $swiface);
|
||||
|
||||
$env->{DNS_HUB_LOG} = "$prefix_abs/dns_hub.log";
|
||||
|
||||
$env->{RESOLV_CONF} = "$prefix_abs/resolv.conf";
|
||||
|
||||
open(RESOLV_CONF, ">$env->{RESOLV_CONF}");
|
||||
print RESOLV_CONF "nameserver $env->{ipv4}\n";
|
||||
print RESOLV_CONF "nameserver $env->{ipv6}\n";
|
||||
close(RESOLV_CONF);
|
||||
|
||||
# use a pipe for stdin in the child processes. This allows
|
||||
# those processes to monitor the pipe for EOF to ensure they
|
||||
# exit when the test script exits
|
||||
pipe($STDIN_READER, $env->{STDIN_PIPE});
|
||||
|
||||
print "STARTING rootdnsforwarder...\n";
|
||||
my $pid = fork();
|
||||
if ($pid == 0) {
|
||||
# we want out from samba to go to the log file, but also
|
||||
# to the users terminal when running 'make test' on the command
|
||||
# line. This puts it on stderr on the terminal
|
||||
open STDOUT, "| tee $env->{DNS_HUB_LOG} 1>&2";
|
||||
open STDERR, '>&STDOUT';
|
||||
|
||||
SocketWrapper::set_default_iface($swiface);
|
||||
my $pcap_file = "$ENV{SOCKET_WRAPPER_PCAP_DIR}/env-$hostname$.pcap";
|
||||
SocketWrapper::setup_pcap($pcap_file);
|
||||
|
||||
my @preargs = ();
|
||||
my @args = ();
|
||||
my @optargs = ();
|
||||
if (!defined($ENV{PYTHON})) {
|
||||
push (@preargs, "env");
|
||||
push (@preargs, "python");
|
||||
} else {
|
||||
push (@preargs, $ENV{PYTHON});
|
||||
}
|
||||
$ENV{MAKE_TEST_BINARY} = Samba::bindir_path($self, "python/samba/tests/dns_forwarder_helpers/dns_hub.py");
|
||||
push (@args, "$self->{server_maxtime}");
|
||||
push (@args, "$env->{ipv4}");
|
||||
close($env->{STDIN_PIPE});
|
||||
open STDIN, ">&", $STDIN_READER or die "can't dup STDIN_READER to STDIN: $!";
|
||||
|
||||
exec(@preargs, $ENV{MAKE_TEST_BINARY}, @args, @optargs)
|
||||
or die("Unable to start $ENV{MAKE_TEST_BINARY}: $!");
|
||||
}
|
||||
$env->{SAMBA_PID} = $pid;
|
||||
$env->{KRB5_CONFIG} = "${prefix_abs}/no_krb5.conf";
|
||||
close($STDIN_READER);
|
||||
|
||||
print "DONE\n";
|
||||
return $env;
|
||||
}
|
||||
|
||||
sub setup_dns_hub
|
||||
{
|
||||
my ($self, $prefix) = @_;
|
||||
|
||||
my $hostname = "rootdnsforwarder";
|
||||
|
||||
my $env = $self->setup_dns_hub_internal("$hostname", "$prefix/$hostname");
|
||||
|
||||
$self->{dns_hub_env} = $env;
|
||||
|
||||
return $env;
|
||||
}
|
||||
|
||||
sub get_dns_hub_env($)
|
||||
{
|
||||
my ($self, $prefix) = @_;
|
||||
|
||||
if (defined($self->{dns_hub_env})) {
|
||||
return $self->{dns_hub_env};
|
||||
}
|
||||
|
||||
die("get_dns_hub_env() not setup 'dns_hub_env'");
|
||||
return undef;
|
||||
}
|
||||
|
||||
sub setup_namespaces($$:$$)
|
||||
{
|
||||
my ($self, $localenv, $upn_array, $spn_array) = @_;
|
||||
|
Loading…
x
Reference in New Issue
Block a user