my $opt_socket_wrapper = 0;
my $opt_socket_wrapper_pcap = undef;
my $opt_socket_wrapper_keep_pcap = undef;
+my $opt_random_order = 0;
my $opt_one = 0;
my @opt_exclude = ();
my @opt_include = ();
my $opt_resetup_env = undef;
my $opt_binary_mapping = "";
my $opt_load_list = undef;
+my $opt_libnss_wrapper_so_path = "";
+my $opt_libsocket_wrapper_so_path = "";
+my $opt_libuid_wrapper_so_path = "";
my @testlists = ();
my $srcdir = ".";
--srcdir=DIR source directory [.]
--bindir=DIR binaries directory [./bin]
+Preload cwrap:
+ --nss_wrapper_so_path=FILE the nss_wrapper library to preload
+ --socket_wrapper_so_path=FILE the socket_wrapper library to preload
+ --uid_wrapper_so_path=FILE the uid_wrapper library to preload
+
Target Specific:
--socket-wrapper-pcap save traffic to pcap directories
--socket-wrapper-keep-pcap keep all pcap files, not just those for tests that
'ldap:s' => \$ldap,
'resetup-environment' => \$opt_resetup_env,
'testlist=s' => \@testlists,
+ 'random-order' => \$opt_random_order,
'load-list=s' => \$opt_load_list,
- 'binary-mapping=s' => \$opt_binary_mapping
+ 'binary-mapping=s' => \$opt_binary_mapping,
+ 'nss_wrapper_so_path=s' => \$opt_libnss_wrapper_so_path,
+ 'socket_wrapper_so_path=s' => \$opt_libsocket_wrapper_so_path,
+ 'uid_wrapper_so_path=s' => \$opt_libuid_wrapper_so_path
);
exit(1) if (not $result);
# quick hack to disable rpc validation when using valgrind - its way too slow
unless (defined($ENV{VALGRIND})) {
$ENV{VALIDATE} = "validate";
- $ENV{MALLOC_CHECK_} = 2;
+ $ENV{MALLOC_CHECK_} = 3;
}
# make all our python scripts unbuffered
$opt_socket_wrapper = 1;
}
+my $ld_preload = $ENV{LD_PRELOAD};
+
+if ($opt_libnss_wrapper_so_path) {
+ if ($ld_preload) {
+ $ld_preload = "$ld_preload:$opt_libnss_wrapper_so_path";
+ } else {
+ $ld_preload = "$opt_libnss_wrapper_so_path";
+ }
+}
+
+if ($opt_libsocket_wrapper_so_path) {
+ if ($ld_preload) {
+ $ld_preload = "$ld_preload:$opt_libsocket_wrapper_so_path";
+ } else {
+ $ld_preload = "$opt_libsocket_wrapper_so_path";
+ }
+}
+
+if ($opt_libuid_wrapper_so_path) {
+ if ($ld_preload) {
+ $ld_preload = "$ld_preload:$opt_libuid_wrapper_so_path";
+ } else {
+ $ld_preload = "$opt_libuid_wrapper_so_path";
+ }
+}
+
+$ENV{LD_PRELOAD} = $ld_preload;
+print "LD_PRELOAD=$ENV{LD_PRELOAD}\n";
+
+# Enable uid_wrapper globally
+$ENV{UID_WRAPPER} = 1;
+
+# Disable RTLD_DEEPBIND hack for Samba bind dlz module
+#
+# This is needed in order to allow the ldb_*ldap module
+# to work with a preloaded socket wrapper.
+$ENV{LDB_MODULES_DISABLE_DEEPBIND} = 1;
+
my $socket_wrapper_dir;
if ($opt_socket_wrapper) {
$socket_wrapper_dir = SocketWrapper::setup_dir("$prefix_abs/w", $opt_socket_wrapper_pcap);
unless ($opt_list) {
if ($opt_target eq "samba") {
- if ($opt_socket_wrapper and `$bindir/smbd -b | grep SOCKET_WRAPPER` eq "") {
- die("You must include --enable-socket-wrapper when compiling Samba in order to execute 'make test'. Exiting....");
- }
$testenv_default = "dc";
require target::Samba;
$target = new Samba($bindir, \%binary_mapping, $ldap, $srcdir, $server_maxtime);
} elsif ($opt_target eq "samba3") {
- if ($opt_socket_wrapper and `$bindir/smbd -b | grep SOCKET_WRAPPER` eq "") {
- die("You must include --enable-socket-wrapper when compiling Samba in order to execute 'make test'. Exiting....");
- }
$testenv_default = "member";
require target::Samba3;
$target = new Samba3($bindir, \%binary_mapping, $srcdir_abs, $server_maxtime);
resolv:host file = $prefix_abs/dns_host_file
#We don't want to run 'speed' tests for very long
torture:timelimit = 1
+ winbind separator = /
";
close(CF);
}
"VAMPIRE_DC_NETBIOSNAME",
"VAMPIRE_DC_NETBIOSALIAS",
+ "PROMOTED_DC_SERVER",
+ "PROMOTED_DC_SERVER_IP",
+ "PROMOTED_DC_NETBIOSNAME",
+ "PROMOTED_DC_NETBIOSALIAS",
+
# server stuff
"SERVER",
"SERVER_IP",
# misc stuff
"KRB5_CONFIG",
- "WINBINDD_SOCKET_DIR",
+ "SELFTEST_WINBINDD_SOCKET_DIR",
"WINBINDD_PRIV_PIPE_DIR",
"NMBD_SOCKET_DIR",
"LOCAL_PATH",
# nss_wrapper
"NSS_WRAPPER_PASSWD",
- "NSS_WRAPPER_GROUP"
+ "NSS_WRAPPER_GROUP",
+ # UID/GID for rfc2307 mapping tests
+ "UID_RFC2307TEST",
+ "GID_RFC2307TEST"
);
$SIG{INT} = $SIG{QUIT} = $SIG{TERM} = sub {
# This 'global' file needs to be empty when we start
unlink("$prefix_abs/dns_host_file");
+unlink("$prefix_abs/hosts");
+
+if ($opt_random_order) {
+ require List::Util;
+ my @newtodo = List::Util::shuffle(@todo);
+ @todo = @newtodo;
+}
if ($opt_testenv) {
my $testenv_name = $ENV{SELFTEST_TESTENV};
my $testenv_vars = setup_env($testenv_name, $prefix);
- die("Unable to setup environment $testenv_name") unless ($testenv_vars);
+ if (not $testenv_vars or $testenv_vars eq "UNKNOWN") {
+ die("Unable to setup environment $testenv_name");
+ }
$ENV{PIDDIR} = $testenv_vars->{PIDDIR};
$ENV{ENVNAME} = $testenv_name;
my $envvarstr = exported_envvars_str($testenv_vars);
- my @term = ();
- if ($ENV{TERMINAL}) {
- @term = ($ENV{TERMINAL});
- } else {
- @term = ("xterm", "-e");
- }
- my @term_args = ("bash", "-c", "echo -e \"
+ my @term_args = ("echo -e \"
Welcome to the Samba4 Test environment '$testenv_name'
This matches the client environment used in make test
$envvarstr
\" && LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH} bash");
+ my @term = ();
+ if ($ENV{TERMINAL}) {
+ @term = ($ENV{TERMINAL});
+ } else {
+ @term = ("xterm", "-e");
+ unshift(@term_args, ("bash", "-c"));
+ }
system(@term, @term_args);
if ($? == -1) {
die("Unable to run $cmd: $!");
} elsif ($? & 127) {
- die(snprintf("%s died with signal %d, %s coredump\n", $cmd, ($? & 127), ($? & 128) ? 'with' : 'without'));
+ die(sprintf("%s died with signal %d, %s coredump\n", $cmd, ($? & 127), ($? & 128) ? 'with' : 'without'));
}
my $exitcode = $? >> 8;