Changeset 988 for vendor/current/selftest
- Timestamp:
- Nov 24, 2016, 1:14:11 PM (9 years ago)
- Location:
- vendor/current/selftest
- Files:
-
- 90 added
- 6 deleted
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
vendor/current/selftest/README
r740 r988 2 2 3 3 This directory contains test scripts that are useful for running a 4 bunch of tests all at once. 4 bunch of tests all at once. 5 5 6 There are two parts to this: 6 There are two parts to this: 7 7 8 8 * The test runner (selftest/selftest.pl) 9 9 * The test formatter 10 10 11 selftest.pl simply outputs subunit, which can then be formatted or analyzed 12 by tools that understand the subunit protocol. One of these tools is 11 selftest.pl simply outputs subunit, which can then be formatted or analyzed 12 by tools that understand the subunit protocol. One of these tools is 13 13 format-subunit, which is used by default as part of "make test". 14 14 15 15 Available testsuites 16 16 ==================== 17 The available testsuites are obtained from a script, usually 18 source{3,4}/selftest/tests. sh. This script should for each testsuite output19 the name of the test, the command to run and the environment that should be 17 The available testsuites are obtained from a script, usually 18 source{3,4}/selftest/tests.py. This script should for each testsuite output 19 the name of the test, the command to run and the environment that should be 20 20 provided. Use the included "plantest" function to generate the required output. 21 21 … … 25 25 Exit code 26 26 ------------ 27 The testsuites should exit with a non-zero exit code if at least one 27 The testsuites should exit with a non-zero exit code if at least one 28 28 test failed. Skipped tests should not influence the exit code. 29 29 30 30 Output format 31 31 ------------- 32 Testsuites can simply use the exit code to indicate whether all of their 33 tests have succeeded or one or more have failed. It is also possible to 34 provide more granular information using the Subunit protocol. 32 Testsuites can simply use the exit code to indicate whether all of their 33 tests have succeeded or one or more have failed. It is also possible to 34 provide more granular information using the Subunit protocol. 35 35 36 This protocol works by writing simple messages to standard output. Any 37 messages that can not be interpreted by this protocol are considered comments 36 This protocol works by writing simple messages to standard output. Any 37 messages that can not be interpreted by this protocol are considered comments 38 38 for the last announced test. 39 39 40 For a full description of the subunit protocol, see ../lib/subunit/README. 40 For a full description of the subunit protocol, see the README file in the subunit 41 repository at http://github.com/testing-cabal/subunit. 41 42 42 43 The following commands are Samba extensions to Subunit: 43 44 testsuite-count45 ~~~~~~~~~~~~~~~46 testsuite-count: number47 48 Announce the number of tests that is going to be run.49 44 50 45 start-testsuite … … 74 69 Environments 75 70 ============ 76 Tests often need to run against a server with particular things set up, 77 a "environment". This environment is provided by the test "target": Samba 3, 71 Tests often need to run against a server with particular things set up, 72 a "environment". This environment is provided by the test "target": Samba 3, 78 73 Samba 4 or Windows. 79 74 80 The following environments are currently available:75 The environments are currently available include 81 76 82 77 - none: No server set up, no variables set. 83 - dc : Domain controller set up. The following environment variables will78 - dc,s3dc: Domain controller set up. The following environment variables will 84 79 be set: 85 80 86 81 * USERNAME: Administrator user name 87 * PASSWORD: Administrator password 88 * DOMAIN: Domain name 89 * REALM: Realm name 90 * SERVER: DC host name 91 * SERVER_IP: DC IPv4 address 92 * NETBIOSNAME: DC NetBIOS name 93 * NETIOSALIAS: DC NetBIOS alias 82 * PASSWORD: Administrator password 83 * DOMAIN: Domain name 84 * REALM: Realm name 85 * SERVER: DC host name 86 * SERVER_IP: DC IPv4 address 87 * SERVER_IPV6: DC IPv6 address 88 * NETBIOSNAME: DC NetBIOS name 89 * NETIOSALIAS: DC NetBIOS alias 94 90 95 - member : Domain controller and member server that is joined to it set up. The91 - member,s4member,s3member: Domain controller and member server that is joined to it set up. The 96 92 following environment variables will be set: 97 93 98 94 * USERNAME: Domain administrator user name 99 100 101 102 95 * PASSWORD: Domain administrator password 96 * DOMAIN: Domain name 97 * REALM: Realm name 98 * SERVER: Name of the member server 103 99 100 See Samba.pm, Samba3.pm and Samba4.pm for the full list. 104 101 105 102 Running tests … … 110 107 make test 111 108 112 To run a quick subset (aiming for about 1 minute of testing)run::109 To run a quicker subset run:: 113 110 114 111 make quicktest -
vendor/current/selftest/filter-subunit
r740 r988 1 1 #!/usr/bin/env python 2 2 # Filter a subunit stream 3 # Copyright (C) Jelmer Vernooij <jelmer@samba.org> 4 # Published under the GNU GPL, v3 or later 3 # Copyright (C) 2009-2011 Jelmer Vernooij <jelmer@samba.org> 4 5 # This program is free software; you can redistribute it and/or modify 6 # it under the terms of the GNU General Public License as published by 7 # the Free Software Foundation; either version 3 of the License, or 8 # (at your option) any later version. 9 10 # This program is distributed in the hope that it will be useful, 11 # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 # GNU General Public License for more details. 14 15 # You should have received a copy of the GNU General Public License 16 # along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 # NOTE: This script is a hack, meant as a placeholder until we can migrate 19 # to upstream subunit's filtering tools. 5 20 6 21 import optparse 7 import os8 22 import sys 9 23 import signal 10 24 11 sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../lib/subunit/python")) 12 sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../lib/testtools")) 25 sys.path.insert(0, "bin/python") 13 26 14 27 import subunithelper 15 28 16 29 parser = optparse.OptionParser("filter-subunit [options] < instream > outstream") 17 parser.add_option("--expected-failures", type="string", 18 help="File containing list of regexes matching tests to consider known " 19 "failures") 20 parser.add_option("--strip-passed-output", action="store_true", 30 parser.add_option("--expected-failures", type="string", 31 help="File containing list of regexes matching tests to consider known " 32 "failures") 33 parser.add_option("--flapping", type="string", 34 help="File containing list of flapping tests, of which to ignore results.") 35 parser.add_option("--strip-passed-output", action="store_true", 21 36 help="Whether to strip output from tests that passed") 22 parser.add_option("--fail-immediately", action="store_true", 37 parser.add_option("--fail-immediately", action="store_true", 23 38 help="Whether to stop on the first error", default=False) 24 39 parser.add_option("--prefix", type="string", 25 help="Add prefix to all test names") 40 help="Add prefix to all test names") 41 parser.add_option("--suffix", type="string", 42 help="Add suffix to all test names") 26 43 parser.add_option("--fail-on-empty", default=False, 27 44 action="store_true", help="Fail if there was no subunit output") 28 45 parser.add_option("--list", default=False, 29 46 action="store_true", help="Operate in list mode") 30 47 opts, args = parser.parse_args() 31 48 32 49 if opts.list: 33 prefix = opts.prefix 34 if not prefix: 35 prefix = "" 36 for l in sys.stdin: 37 sys.stdout.write("%s%s\n" % (prefix, l.rstrip())) 38 sys.exit(0) 50 prefix = opts.prefix 51 suffix = opts.suffix 52 if not prefix: 53 prefix = "" 54 if not suffix: 55 suffix = "" 56 for l in sys.stdin: 57 sys.stdout.write("%s%s%s\n" % (prefix, l.rstrip(), suffix)) 58 sys.exit(0) 39 59 40 60 if opts.expected_failures: 41 61 expected_failures = subunithelper.read_test_regexes(opts.expected_failures) 42 62 else: 43 expected_failures = {} 63 expected_failures = {} 64 65 66 if opts.flapping: 67 flapping = subunithelper.read_test_regexes(opts.flapping) 68 else: 69 flapping = {} 44 70 45 71 statistics = { 46 47 48 49 50 51 72 'TESTS_UNEXPECTED_OK': 0, 73 'TESTS_EXPECTED_OK': 0, 74 'TESTS_UNEXPECTED_FAIL': 0, 75 'TESTS_EXPECTED_FAIL': 0, 76 'TESTS_ERROR': 0, 77 'TESTS_SKIP': 0, 52 78 } 53 79 54 80 def handle_sigint(sig, stack): 55 81 sys.exit(0) 56 82 signal.signal(signal.SIGINT, handle_sigint) 57 83 58 84 out = subunithelper.SubunitOps(sys.stdout) 59 msg_ops = subunithelper.FilterOps(out, opts.prefix, expected_failures, 60 opts.strip_passed_output, 61 fail_immediately=opts.fail_immediately) 85 msg_ops = subunithelper.FilterOps(out, opts.prefix, opts.suffix, expected_failures, 86 opts.strip_passed_output, 87 fail_immediately=opts.fail_immediately, 88 flapping=flapping) 62 89 63 90 try: 64 91 ret = subunithelper.parse_results(msg_ops, statistics, sys.stdin) 65 92 except subunithelper.ImmediateFail: 66 67 93 sys.stdout.flush() 94 sys.exit(1) 68 95 69 96 if opts.fail_on_empty and not msg_ops.seen_output: 70 97 sys.exit(1) 71 98 else: 72 99 sys.exit(ret) -
vendor/current/selftest/format-subunit
r740 r988 10 10 import sys 11 11 12 sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../lib/subunit/python")) 13 sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../lib/testtools")) 12 sys.path.insert(0, "bin/python") 14 13 15 14 import subunithelper … … 18 17 parser.add_option("--verbose", action="store_true", 19 18 help="Be verbose") 20 parser.add_option("--immediate", action="store_true", 19 parser.add_option("--immediate", action="store_true", 21 20 help="Show failures immediately, don't wait until test run has finished") 22 21 parser.add_option("--prefix", type="string", default=".", … … 26 25 27 26 def handle_sigint(sig, stack): 28 sys.exit(0) 27 sys.exit(0) 28 29 29 signal.signal(signal.SIGINT, handle_sigint) 30 30 -
vendor/current/selftest/gdb_backtrace
r740 r988 59 59 } 60 60 61 # 61 need_binary="no" 62 case "${DB}" in 63 # These debuggers need the process binary specified: 64 ladebug) 65 need_binary="yes" 66 ;; 67 gdb66) 68 need_binary="yes" 69 ;; 70 dbx) 71 need_binary="yes" 72 ;; 73 esac 74 75 test x"${need_binary}" = x"yes" && { 76 62 77 # we first try to use /proc/${PID}/exe or /proc/{$PID}/path for solaris 63 78 # then fallback to the binary from the commandline … … 65 80 # 'which' 66 81 # 67 test -f "/proc/${PID}/exe" && BINARY="/proc/${PID}/exe" 68 test -f "/proc/${PID}/path/a.out" && BINARY=`ls -l /proc/${PID}/path/a.out |sed 's/.*-> //'` 69 test x"${BINARY}" = x"" && BINARY="/proc/${PID}/exe" 70 test -f "${BINARY}" || BINARY=`which ${BINARY}` 71 72 test -f "${BINARY}" || { 73 echo "${BASENAME}: ERROR: Cannot find binary '${BINARY}'." 74 exit 1 82 test -f "/proc/${PID}/exe" && BINARY="/proc/${PID}/exe" 83 test -f "/proc/${PID}/path/a.out" && BINARY=`ls -l /proc/${PID}/path/a.out |sed 's/.*-> //'` 84 test x"${BINARY}" = x"" && BINARY="/proc/${PID}/exe" 85 test -f "${BINARY}" || BINARY=`which ${BINARY}` 86 87 test -f "${BINARY}" || { 88 echo "${BASENAME}: ERROR: Cannot find binary '${BINARY}'." 89 exit 1 90 } 75 91 } 76 77 echo "${BASENAME}: Trying to use ${DB_BIN} on ${BINARY} on PID ${PID}"78 92 79 93 BATCHFILE_PRE=/tmp/gdb_backtrace_pre.$$ -
vendor/current/selftest/in_screen
r740 r988 70 70 echo $$ > $basedir/$SERVERNAME.parent.pid 71 71 trap cleanup SIGINT SIGTERM SIGPIPE 72 screen -r -X screen -t test:$SERVERNAME bash $basedir/$SERVERNAME.launch 72 73 if [[ "$TMUX" ]]; then 74 TMUX_CMD=tmux 75 if [[ $TMUX = *tmate* ]]; then 76 TMUX_CMD=tmate 77 fi 78 79 $TMUX_CMD new-window -n test:$SERVERNAME "bash $basedir/$SERVERNAME.launch" 80 else 81 screen -r -X screen -t test:$SERVERNAME bash $basedir/$SERVERNAME.launch 82 fi 73 83 echo "$(date) waiting in $$" >> $basedir/$SERVERNAME.log 74 84 read stdin_var -
vendor/current/selftest/selftest.pl
r740 r988 16 16 # You should have received a copy of the GNU General Public License 17 17 # along with this program. If not, see <http://www.gnu.org/licenses/>. 18 19 =pod20 21 =head1 NAME22 23 selftest - Samba test runner24 25 =head1 SYNOPSIS26 27 selftest --help28 29 selftest [--srcdir=DIR] [--builddir=DIR] [--exeext=EXT][--target=samba4|samba3|win|kvm] [--socket-wrapper] [--quick] [--exclude=FILE] [--include=FILE] [--one] [--prefix=prefix] [--testlist=FILE] [TESTS]30 31 =head1 DESCRIPTION32 33 A simple test runner. TESTS is a regular expression with tests to run.34 35 =head1 OPTIONS36 37 =over 438 39 =item I<--help>40 41 Show list of available options.42 43 =item I<--srcdir=DIR>44 45 Source directory.46 47 =item I<--builddir=DIR>48 49 Build directory.50 51 =item I<--exeext=EXT>52 53 Executable extention54 55 =item I<--prefix=DIR>56 57 Change directory to run tests in. Default is 'st'.58 59 =item I<--target samba4|samba3|win|kvm>60 61 Specify test target against which to run. Default is 'samba4'.62 63 =item I<--quick>64 65 Run only a limited number of tests. Intended to run in about 30 seconds on66 moderately recent systems.67 68 =item I<--socket-wrapper>69 70 Use socket wrapper library for communication with server. Only works71 when the server is running locally.72 73 Will prevent TCP and UDP ports being opened on the local host but74 (transparently) redirects these calls to use unix domain sockets.75 76 =item I<--exclude>77 78 Specify a file containing a list of tests that should be skipped. Possible79 candidates are tests that segfault the server, flip or don't end.80 81 =item I<--include>82 83 Specify a file containing a list of tests that should be run. Same format84 as the --exclude flag.85 86 Not includes specified means all tests will be run.87 88 =item I<--one>89 90 Abort as soon as one test fails.91 92 =item I<--testlist>93 94 Load a list of tests from the specified location.95 96 =back97 98 =head1 ENVIRONMENT99 100 =over 4101 102 =item I<SMBD_VALGRIND>103 104 =item I<TORTURE_MAXTIME>105 106 =item I<VALGRIND>107 108 =item I<TLS_ENABLED>109 110 =item I<srcdir>111 112 =back113 114 =head1 LICENSE115 116 selftest is licensed under the GNU General Public License L<http://www.gnu.org/licenses/gpl.html>.117 118 =head1 AUTHOR119 120 Jelmer Vernooij121 122 =cut123 18 124 19 use strict; … … 133 28 use Subunit; 134 29 use SocketWrapper; 30 use target::Samba; 135 31 136 32 eval { … … 143 39 144 40 my $opt_help = 0; 145 my $opt_target = "samba 4";41 my $opt_target = "samba"; 146 42 my $opt_quick = 0; 147 43 my $opt_socket_wrapper = 0; 148 44 my $opt_socket_wrapper_pcap = undef; 149 45 my $opt_socket_wrapper_keep_pcap = undef; 46 my $opt_random_order = 0; 150 47 my $opt_one = 0; 151 48 my @opt_exclude = (); 152 49 my @opt_include = (); 153 my $opt_verbose = 0;154 my $opt_image = undef;155 50 my $opt_testenv = 0; 156 51 my $opt_list = 0; 157 52 my $ldap = undef; 158 53 my $opt_resetup_env = undef; 159 my $opt_bindir = undef;160 54 my $opt_load_list = undef; 55 my $opt_libnss_wrapper_so_path = ""; 56 my $opt_libresolv_wrapper_so_path = ""; 57 my $opt_libsocket_wrapper_so_path = ""; 58 my $opt_libuid_wrapper_so_path = ""; 59 my $opt_use_dns_faking = 0; 161 60 my @testlists = (); 162 61 163 62 my $srcdir = "."; 164 my $builddir = "."; 165 my $exeext = ""; 63 my $bindir = "./bin"; 166 64 my $prefix = "./st"; 167 65 168 66 my @includes = (); 169 67 my @excludes = (); 170 171 sub pipe_handler {172 my $sig = shift @_;173 print STDERR "Exiting early because of SIGPIPE.\n";174 exit(1);175 }176 177 $SIG{PIPE} = \&pipe_handler;178 68 179 69 sub find_in_list($$) … … 301 191 Generic options: 302 192 --help this help page 303 --target=samba[34]|win|kvm Samba version to target 304 --testlist=FILE file to read available tests from 193 --target=samba[3]|win Samba version to target 194 --testlist=FILE file to read available tests from 195 --exclude=FILE Exclude tests listed in the file 196 --include=FILE Include tests listed in the file 305 197 306 198 Paths: 307 199 --prefix=DIR prefix to run tests in [st] 308 200 --srcdir=DIR source directory [.] 309 --builddir=DIR output directory [.] 310 --exeext=EXT executable extention [] 201 --bindir=DIR binaries directory [./bin] 202 203 Preload cwrap: 204 --nss_wrapper_so_path=FILE the nss_wrapper library to preload 205 --resolv_wrapper_so_path=FILE the resolv_wrapper library to preload 206 --socket_wrapper_so_path=FILE the socket_wrapper library to preload 207 --uid_wrapper_so_path=FILE the uid_wrapper library to preload 208 209 DNS: 210 --use-dns-faking Fake DNS entries rather than talking to our 211 DNS implementation. 311 212 312 213 Target Specific: 313 --socket-wrapper-pcap 214 --socket-wrapper-pcap save traffic to pcap directories 314 215 --socket-wrapper-keep-pcap keep all pcap files, not just those for tests that 315 216 failed 316 217 --socket-wrapper enable socket wrapper 317 --bindir=PATH path to target binaries318 218 319 219 Samba4 Specific: 320 220 --ldap=openldap|fedora-ds back samba onto specified ldap server 321 322 Kvm Specific:323 --image=PATH path to KVM image324 221 325 222 Behaviour: 326 223 --quick run quick overall test 327 224 --one abort when the first test fails 328 --verbose be verbose329 225 --testenv run a shell in the requested test environment 330 226 --list list available tests … … 345 241 'include=s' => \@opt_include, 346 242 'srcdir=s' => \$srcdir, 347 'builddir=s' => \$builddir, 348 'exeext=s' => \$exeext, 349 'verbose' => \$opt_verbose, 243 'bindir=s' => \$bindir, 350 244 'testenv' => \$opt_testenv, 351 245 'list' => \$opt_list, 352 246 'ldap:s' => \$ldap, 353 247 'resetup-environment' => \$opt_resetup_env, 354 'bindir:s' => \$opt_bindir,355 'image=s' => \$opt_image,356 248 'testlist=s' => \@testlists, 249 'random-order' => \$opt_random_order, 357 250 'load-list=s' => \$opt_load_list, 251 'nss_wrapper_so_path=s' => \$opt_libnss_wrapper_so_path, 252 'resolv_wrapper_so_path=s' => \$opt_libresolv_wrapper_so_path, 253 'socket_wrapper_so_path=s' => \$opt_libsocket_wrapper_so_path, 254 'uid_wrapper_so_path=s' => \$opt_libuid_wrapper_so_path, 255 'use-dns-faking' => \$opt_use_dns_faking 358 256 ); 359 257 … … 372 270 unless (defined($ENV{VALGRIND})) { 373 271 $ENV{VALIDATE} = "validate"; 374 $ENV{MALLOC_CHECK_} = 2;272 $ENV{MALLOC_CHECK_} = 3; 375 273 } 376 274 … … 378 276 $ENV{PYTHONUNBUFFERED} = 1; 379 277 380 my $bindir = ($opt_bindir or "$builddir/bin");381 278 my $bindir_abs = abs_path($bindir); 382 279 … … 402 299 die("using an empty prefix isn't allowed") unless $prefix ne ""; 403 300 404 #Ensure we have the test prefix around 405 mkdir($prefix, 0777) unless -d $prefix; 301 # Ensure we have the test prefix around. 302 # 303 # We need restrictive 304 # permissions on this as some subdirectories in this tree will have 305 # wider permissions (ie 0777) and this would allow other users on the 306 # host to subvert the test process. 307 mkdir($prefix, 0700) unless -d $prefix; 308 chmod 0700, $prefix; 406 309 407 310 my $prefix_abs = abs_path($prefix); … … 410 313 411 314 my $srcdir_abs = abs_path($srcdir); 412 my $builddir_abs = abs_path($builddir);413 315 414 316 die("using an empty absolute prefix isn't allowed") unless $prefix_abs ne ""; … … 420 322 $ENV{SRCDIR} = $srcdir; 421 323 $ENV{SRCDIR_ABS} = $srcdir_abs; 422 $ENV{BUILDDIR} = $builddir;423 $ENV{BUILDDIR_ABS} = $builddir_abs;424 324 $ENV{BINDIR} = $bindir_abs; 425 $ENV{EXEEXT} = $exeext;426 325 427 326 my $tls_enabled = not $opt_quick; … … 449 348 $opt_socket_wrapper = 1; 450 349 } 350 351 my $ld_preload = $ENV{LD_PRELOAD}; 352 353 if ($opt_libnss_wrapper_so_path) { 354 if ($ld_preload) { 355 $ld_preload = "$ld_preload:$opt_libnss_wrapper_so_path"; 356 } else { 357 $ld_preload = "$opt_libnss_wrapper_so_path"; 358 } 359 } 360 361 if ($opt_libresolv_wrapper_so_path) { 362 if ($ld_preload) { 363 $ld_preload = "$ld_preload:$opt_libresolv_wrapper_so_path"; 364 } else { 365 $ld_preload = "$opt_libresolv_wrapper_so_path"; 366 } 367 } 368 369 if ($opt_libsocket_wrapper_so_path) { 370 if ($ld_preload) { 371 $ld_preload = "$ld_preload:$opt_libsocket_wrapper_so_path"; 372 } else { 373 $ld_preload = "$opt_libsocket_wrapper_so_path"; 374 } 375 } 376 377 if ($opt_libuid_wrapper_so_path) { 378 if ($ld_preload) { 379 $ld_preload = "$ld_preload:$opt_libuid_wrapper_so_path"; 380 } else { 381 $ld_preload = "$opt_libuid_wrapper_so_path"; 382 } 383 } 384 385 $ENV{LD_PRELOAD} = $ld_preload; 386 print "LD_PRELOAD=$ENV{LD_PRELOAD}\n"; 387 388 # Enable uid_wrapper globally 389 $ENV{UID_WRAPPER} = 1; 390 391 # Disable RTLD_DEEPBIND hack for Samba bind dlz module 392 # 393 # This is needed in order to allow the ldb_*ldap module 394 # to work with a preloaded socket wrapper. 395 $ENV{LDB_MODULES_DISABLE_DEEPBIND} = 1; 451 396 452 397 my $socket_wrapper_dir; … … 454 399 $socket_wrapper_dir = SocketWrapper::setup_dir("$prefix_abs/w", $opt_socket_wrapper_pcap); 455 400 print "SOCKET_WRAPPER_DIR=$socket_wrapper_dir\n"; 456 } els e{457 unless ($< == 0) { 458 print "WARNING: Not using socket wrapper, but also not running as root. Will not be able to listen on proper ports\n";401 } elsif (not $opt_list) { 402 unless ($< == 0) { 403 warn("not using socket wrapper, but also not running as root. Will not be able to listen on proper ports"); 459 404 } 405 } 406 407 if ($opt_use_dns_faking) { 408 print "DNS: Faking nameserver\n"; 409 $ENV{SAMBA_DNS_FAKING} = 1; 460 410 } 461 411 … … 463 413 my $testenv_default = "none"; 464 414 465 if ($opt_target eq "samba4") { 466 $testenv_default = "all"; 467 require target::Samba4; 468 $target = new Samba4($bindir, $ldap, $srcdir, $exeext); 469 } elsif ($opt_target eq "samba3") { 470 if ($opt_socket_wrapper and `$bindir/smbd -b | grep SOCKET_WRAPPER` eq "") { 471 die("You must include --enable-socket-wrapper when compiling Samba in order to execute 'make test'. Exiting...."); 472 } 473 $testenv_default = "member"; 474 require target::Samba3; 475 $target = new Samba3($bindir, $srcdir_abs); 476 } elsif ($opt_target eq "win") { 477 die("Windows tests will not run with socket wrapper enabled.") 478 if ($opt_socket_wrapper); 479 $testenv_default = "dc"; 480 require target::Windows; 481 $target = new Windows(); 482 } elsif ($opt_target eq "kvm") { 483 die("Kvm tests will not run with socket wrapper enabled.") 484 if ($opt_socket_wrapper); 485 require target::Kvm; 486 die("No image specified") unless ($opt_image); 487 $target = new Kvm($opt_image, undef); 488 } 489 490 # 491 # Start a Virtual Distributed Ethernet Switch 492 # Returns the pid of the switch. 493 # 494 sub start_vde_switch($) 495 { 496 my ($path) = @_; 497 498 system("vde_switch --pidfile $path/vde.pid --sock $path/vde.sock --daemon"); 499 500 open(PID, "$path/vde.pid"); 501 <PID> =~ /([0-9]+)/; 502 my $pid = $1; 503 close(PID); 504 505 return $pid; 506 } 507 508 # Stop a Virtual Distributed Ethernet Switch 509 sub stop_vde_switch($) 510 { 511 my ($pid) = @_; 512 kill 9, $pid; 415 # After this many seconds, the server will self-terminate. All tests 416 # must terminate in this time, and testenv will only stay alive this 417 # long 418 419 my $server_maxtime; 420 if ($opt_testenv) { 421 # 1 year should be enough :-) 422 $server_maxtime = 365 * 24 * 60 * 60; 423 } else { 424 # make test should run under 4 hours 425 $server_maxtime = 4 * 60 * 60; 426 } 427 428 if (defined($ENV{SMBD_MAXTIME}) and $ENV{SMBD_MAXTIME} ne "") { 429 $server_maxtime = $ENV{SMBD_MAXTIME}; 430 } 431 432 unless ($opt_list) { 433 if ($opt_target eq "samba") { 434 $testenv_default = "ad_dc_ntvfs"; 435 require target::Samba; 436 $target = new Samba($bindir, $ldap, $srcdir, $server_maxtime); 437 } elsif ($opt_target eq "samba3") { 438 $testenv_default = "nt4_member"; 439 require target::Samba3; 440 $target = new Samba3($bindir, $srcdir_abs, $server_maxtime); 441 } 513 442 } 514 443 … … 570 499 } 571 500 501 if ( -d "$clientdir/statedir" ) { 502 unlink <$clientdir/statedir/*>; 503 } else { 504 mkdir("$clientdir/statedir", 0777); 505 } 506 507 if ( -d "$clientdir/cachedir" ) { 508 unlink <$clientdir/cachedir/*>; 509 } else { 510 mkdir("$clientdir/cachedir", 0777); 511 } 512 513 # this is ugly, but the ncalrpcdir needs exactly 0755 514 # otherwise tests fail. 515 my $mask = umask; 516 umask 0022; 517 if ( -d "$clientdir/ncalrpcdir/np" ) { 518 unlink <$clientdir/ncalrpcdir/np/*>; 519 rmdir "$clientdir/ncalrpcdir/np"; 520 } 572 521 if ( -d "$clientdir/ncalrpcdir" ) { 573 522 unlink <$clientdir/ncalrpcdir/*>; 574 } else { 575 mkdir("$clientdir/ncalrpcdir", 0777); 576 } 523 rmdir "$clientdir/ncalrpcdir"; 524 } 525 mkdir("$clientdir/ncalrpcdir", 0755); 526 umask $mask; 527 528 my $cadir = "$ENV{SRCDIR_ABS}/selftest/manage-ca/CA-samba.example.com"; 529 my $cacert = "$cadir/Public/CA-samba.example.com-cert.pem"; 530 my $cacrl_pem = "$cadir/Public/CA-samba.example.com-crl.pem"; 531 my $ca_users_dir = "$cadir/Users"; 532 533 if ( -d "$clientdir/pkinit" ) { 534 unlink <$clientdir/pkinit/*>; 535 } else { 536 mkdir("$clientdir/pkinit", 0700); 537 } 538 539 # each user has a USER-${USER_PRINCIPAL_NAME}-cert.pem and 540 # USER-${USER_PRINCIPAL_NAME}-private-key.pem symlink 541 # We make a copy here and make the certificated easily 542 # accessable in the client environment. 543 my $mask = umask; 544 umask 0077; 545 opendir USERS, "${ca_users_dir}" or die "Could not open dir '${ca_users_dir}': $!"; 546 for my $d (readdir USERS) { 547 my $user_dir = "${ca_users_dir}/${d}"; 548 next if ${d} =~ /^\./; 549 next if (! -d "${user_dir}"); 550 opendir USER, "${user_dir}" or die "Could not open dir '${user_dir}': $!"; 551 for my $l (readdir USER) { 552 my $user_link = "${user_dir}/${l}"; 553 next if ${l} =~ /^\./; 554 next if (! -l "${user_link}"); 555 556 my $dest = "${clientdir}/pkinit/${l}"; 557 Samba::copy_file_content(${user_link}, ${dest}); 558 } 559 closedir USER; 560 } 561 closedir USERS; 562 umask $mask; 577 563 578 564 open(CF, ">$conffile"); 579 565 print CF "[global]\n"; 580 if (defined($ENV{VALGRIND})) {581 print CF "\ticonv:native = true\n";582 } else {583 print CF "\ticonv:native = false\n";584 }585 566 print CF "\tnetbios name = client\n"; 586 567 if (defined($vars->{DOMAIN})) { … … 596 577 private dir = $clientdir/private 597 578 lock dir = $clientdir/lockdir 579 state directory = $clientdir/statedir 580 cache directory = $clientdir/cachedir 598 581 ncalrpc dir = $clientdir/ncalrpcdir 599 name resolve order = bcast file 600 panic action = $RealBin/gdb_backtrace \%PID\% \%PROG\% 582 panic action = $RealBin/gdb_backtrace \%d 601 583 max xmit = 32K 602 584 notify:inotify = false … … 608 590 #We don't want to pass our self-tests if the PAC code is wrong 609 591 gensec:require_pac = true 610 resolv:host file = $prefix_abs/dns_host_file611 592 #We don't want to run 'speed' tests for very long 612 593 torture:timelimit = 1 594 winbind separator = / 595 tls cafile = ${cacert} 596 tls crlfile = ${cacrl_pem} 597 tls verify peer = no_check 613 598 "; 614 599 close(CF); … … 639 624 640 625 while (<IN>) { 641 if (/-- TEST(-LOADLIST| -IDLIST|) --\n/) {626 if (/-- TEST(-LOADLIST|) --\n/) { 642 627 my $supports_loadlist = (defined($1) and $1 eq "-LOADLIST"); 643 my $supports_idlist = (defined($1) and $1 eq "-IDLIST");644 628 my $name = <IN>; 645 629 $name =~ s/\n//g; 646 630 my $env = <IN>; 647 631 $env =~ s/\n//g; 632 my $loadlist; 633 if ($supports_loadlist) { 634 $loadlist = <IN>; 635 $loadlist =~ s/\n//g; 636 } 648 637 my $cmdline = <IN>; 649 638 $cmdline =~ s/\n//g; 650 639 if (should_run_test($name) == 1) { 651 push (@ret, [$name, $env, $cmdline, $ supports_loadlist, $supports_idlist]);640 push (@ret, [$name, $env, $cmdline, $loadlist]); 652 641 } 653 642 } else { … … 655 644 } 656 645 } 657 close(IN) or die("Error creating recipe ");646 close(IN) or die("Error creating recipe from $filename"); 658 647 return @ret; 659 648 } … … 671 660 $ENV{SELFTEST_INTERFACES} = ""; 672 661 } 673 if ($opt_verbose) {674 $ENV{SELFTEST_VERBOSE} = "1";675 } else {676 $ENV{SELFTEST_VERBOSE} = "";677 }678 662 if ($opt_quick) { 679 663 $ENV{SELFTEST_QUICK} = "1"; … … 681 665 $ENV{SELFTEST_QUICK} = ""; 682 666 } 683 $ENV{SELFTEST_TARGET} = $opt_target;684 667 $ENV{SELFTEST_MAXTIME} = $torture_maxtime; 685 668 … … 728 711 if ($match) { 729 712 if (defined($skipreason)) { 713 if (not $opt_list) { 730 714 Subunit::skip_testsuite($name, $skipreason); 715 } 731 716 } else { 732 717 push(@todo, $testsuite); … … 734 719 } 735 720 } elsif (defined($skipreason)) { 736 Subunit::skip_testsuite($name, $skipreason); 721 if (not $opt_list) { 722 Subunit::skip_testsuite($name, $skipreason); 723 } 737 724 } else { 738 725 push(@todo, $testsuite); … … 753 740 my $suitestotal = $#todo + 1; 754 741 755 Subunit::progress($suitestotal); 756 Subunit::report_time(time()); 742 unless ($opt_list) { 743 Subunit::progress($suitestotal); 744 Subunit::report_time(time()); 745 } 757 746 758 747 my $i = 0; … … 777 766 "REALM", 778 767 768 # stuff related to a trusted domain 769 "TRUST_SERVER", 770 "TRUST_SERVER_IP", 771 "TRUST_SERVER_IPV6", 772 "TRUST_NETBIOSNAME", 773 "TRUST_USERNAME", 774 "TRUST_PASSWORD", 775 "TRUST_DOMAIN", 776 "TRUST_REALM", 777 779 778 # domain controller stuff 780 779 "DC_SERVER", 781 780 "DC_SERVER_IP", 781 "DC_SERVER_IPV6", 782 782 "DC_NETBIOSNAME", 783 783 "DC_NETBIOSALIAS", … … 786 786 "MEMBER_SERVER", 787 787 "MEMBER_SERVER_IP", 788 "MEMBER_SERVER_IPV6", 788 789 "MEMBER_NETBIOSNAME", 789 790 "MEMBER_NETBIOSALIAS", … … 792 793 "RPC_PROXY_SERVER", 793 794 "RPC_PROXY_SERVER_IP", 795 "RPC_PROXY_SERVER_IPV6", 794 796 "RPC_PROXY_NETBIOSNAME", 795 797 "RPC_PROXY_NETBIOSALIAS", … … 798 800 "VAMPIRE_DC_SERVER", 799 801 "VAMPIRE_DC_SERVER_IP", 802 "VAMPIRE_DC_SERVER_IPV6", 800 803 "VAMPIRE_DC_NETBIOSNAME", 801 804 "VAMPIRE_DC_NETBIOSALIAS", 805 806 "PROMOTED_DC_SERVER", 807 "PROMOTED_DC_SERVER_IP", 808 "PROMOTED_DC_SERVER_IPV6", 809 "PROMOTED_DC_NETBIOSNAME", 810 "PROMOTED_DC_NETBIOSALIAS", 802 811 803 812 # server stuff 804 813 "SERVER", 805 814 "SERVER_IP", 815 "SERVER_IPV6", 806 816 "NETBIOSNAME", 807 817 "NETBIOSALIAS", … … 814 824 "DC_PASSWORD", 815 825 826 # UID/GID for rfc2307 mapping tests 827 "UID_RFC2307TEST", 828 "GID_RFC2307TEST", 829 816 830 # misc stuff 817 831 "KRB5_CONFIG", 818 " WINBINDD_SOCKET_DIR",832 "SELFTEST_WINBINDD_SOCKET_DIR", 819 833 "WINBINDD_PRIV_PIPE_DIR", 820 834 "NMBD_SOCKET_DIR", 821 "LOCAL_PATH" 835 "LOCAL_PATH", 836 837 # nss_wrapper 838 "NSS_WRAPPER_PASSWD", 839 "NSS_WRAPPER_GROUP", 840 "NSS_WRAPPER_HOSTS", 841 "NSS_WRAPPER_MODULE_SO_PATH", 842 "NSS_WRAPPER_MODULE_FN_PREFIX", 843 844 # resolv_wrapper 845 "RESOLV_WRAPPER_CONF", 846 "RESOLV_WRAPPER_HOSTS", 822 847 ); 823 848 824 $SIG{INT} = $SIG{QUIT} = $SIG{TERM} = sub { 849 sub sighandler($) 850 { 825 851 my $signame = shift; 852 853 $SIG{INT} = $SIG{QUIT} = $SIG{TERM} = 'DEFAULT'; 854 $SIG{PIPE} = 'IGNORE'; 855 856 open(STDOUT, ">&STDERR") or die "can't dup STDOUT to STDERR: $!"; 857 858 print "$0: PID[$$]: Got SIG${signame} teardown environments.\n"; 826 859 teardown_env($_) foreach(keys %running_envs); 827 die("Received signal $signame"); 860 system("pstree -p $$"); 861 print "$0: PID[$$]: Exiting...\n"; 862 exit(1); 828 863 }; 864 865 $SIG{INT} = $SIG{QUIT} = $SIG{TERM} = $SIG{PIPE} = \&sighandler; 829 866 830 867 sub setup_env($$) … … 843 880 $option = "client" if $option eq ""; 844 881 845 if ($envname eq "none") { 846 $testenv_vars = {}; 847 } elsif (defined(get_running_env($envname))) { 882 if (defined(get_running_env($envname))) { 848 883 $testenv_vars = get_running_env($envname); 849 884 if (not $testenv_vars->{target}->check_env($testenv_vars)) { … … 853 888 } else { 854 889 $testenv_vars = $target->setup_env($envname, $prefix); 855 if (defined($testenv_vars) && not defined($testenv_vars->{target})) { 856 $testenv_vars->{target} = $target; 890 if (defined($testenv_vars) and $testenv_vars eq "UNKNOWN") { 891 return $testenv_vars; 892 } elsif (defined($testenv_vars) && not defined($testenv_vars->{target})) { 893 $testenv_vars->{target} = $target; 894 } 895 if (not defined($testenv_vars)) { 896 warn("$opt_target can't start up known environment '$envname'"); 857 897 } 858 898 } … … 908 948 { 909 949 my ($envname) = @_; 910 return 1 if ($envname eq "none");911 950 my $env = get_running_env($envname); 912 951 return $env->{target}->check_env($env); … … 917 956 my ($envname) = @_; 918 957 return if ($envname eq "none"); 958 print STDERR "teardown_env($envname)\n"; 919 959 my $env = get_running_env($envname); 920 960 $env->{target}->teardown_env($env); … … 924 964 # This 'global' file needs to be empty when we start 925 965 unlink("$prefix_abs/dns_host_file"); 966 unlink("$prefix_abs/hosts"); 967 968 if ($opt_random_order) { 969 require List::Util; 970 my @newtodo = List::Util::shuffle(@todo); 971 @todo = @newtodo; 972 } 926 973 927 974 if ($opt_testenv) { … … 931 978 my $testenv_vars = setup_env($testenv_name, $prefix); 932 979 933 die("Unable to setup environment $testenv_name") unless ($testenv_vars); 980 if (not $testenv_vars or $testenv_vars eq "UNKNOWN") { 981 die("Unable to setup environment $testenv_name"); 982 } 934 983 935 984 $ENV{PIDDIR} = $testenv_vars->{PIDDIR}; … … 938 987 my $envvarstr = exported_envvars_str($testenv_vars); 939 988 940 my $term = ($ENV{TERMINAL} or "xterm -e"); 941 system("$term 'echo -e \" 989 my @term_args = ("echo -e \" 942 990 Welcome to the Samba4 Test environment '$testenv_name' 943 991 … … 950 998 951 999 $envvarstr 952 \" && LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH} bash'"); 1000 \" && LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH} bash"); 1001 my @term = (); 1002 if ($ENV{TERMINAL}) { 1003 @term = ($ENV{TERMINAL}); 1004 } else { 1005 @term = ("xterm", "-e"); 1006 unshift(@term_args, ("bash", "-c")); 1007 } 1008 1009 system(@term, @term_args); 1010 953 1011 teardown_env($testenv_name); 954 1012 } elsif ($opt_list) { 955 1013 foreach (@todo) { 956 my $cmd = $$_[2];957 1014 my $name = $$_[0]; 958 1015 my $envname = $$_[1]; 959 960 unless($cmd =~ /\$LISTOPT/) { 1016 my $cmd = $$_[2]; 1017 my $listcmd = $$_[3]; 1018 1019 unless (defined($listcmd)) { 961 1020 warn("Unable to list tests in $name"); 1021 # Rather than ignoring this testsuite altogether, just pretend the entire testsuite is 1022 # a single "test". 1023 print "$name\n"; 962 1024 next; 963 1025 } 964 1026 965 $cmd =~ s/\$LISTOPT/--list/g; 966 967 system($cmd); 1027 system($listcmd); 968 1028 969 1029 if ($? == -1) { 970 die("Unable to run $ cmd: $!");1030 die("Unable to run $listcmd: $!"); 971 1031 } elsif ($? & 127) { 972 die(s nprintf("%s died with signal %d, %s coredump\n", $cmd, ($? & 127), ($? & 128) ? 'with' : 'without'));1032 die(sprintf("%s died with signal %d, %s coredump\n", $listcmd, ($? & 127), ($? & 128) ? 'with' : 'without')); 973 1033 } 974 1034 … … 990 1050 Subunit::end_testsuite($name, "error", 991 1051 "unable to set up environment $envname - exiting"); 1052 next; 1053 } elsif ($envvars eq "UNKNOWN") { 1054 Subunit::start_testsuite($name); 1055 Subunit::end_testsuite($name, "skip", 1056 "environment $envname is unknown in this test backend - skipping"); 992 1057 next; 993 1058 } … … 1002 1067 } 1003 1068 $cmd =~ s/\$LOADLIST/--load-list=$listid_file/g; 1004 } elsif ($$_[4]) { 1005 $cmd =~ s/\s+[^\s]+\s*$//; 1006 $cmd .= " " . join(' ', @{$individual_tests->{$name}}); 1069 } else { 1070 warn("Unable to run individual tests in $name, it does not support --loadlist."); 1007 1071 } 1008 1072 } -
vendor/current/selftest/selftesthelpers.py
r740 r988 21 21 import os 22 22 import subprocess 23 import sys 23 24 24 25 def srcdir(): 25 return os.path.normpath(os. path.join(os.path.dirname(os.path.abspath(__file__)), ".."))26 return os.path.normpath(os.getenv("SRCDIR", os.path.join(os.path.dirname(os.path.abspath(__file__)), ".."))) 26 27 27 28 def source4dir(): 28 return os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../source4")) 29 return os.path.normpath(os.path.join(srcdir(), "source4")) 30 31 def source3dir(): 32 return os.path.normpath(os.path.join(srcdir(), "source3")) 29 33 30 34 def bindir(): 31 return os.path.normpath(os. path.join(os.getenv("BUILDDIR", "."), "bin"))35 return os.path.normpath(os.getenv("BINDIR", "./bin")) 32 36 33 37 def binpath(name): 34 return os.path.join(bindir(), "%s%s" % (name, os.getenv("EXEEXT", "")))38 return os.path.join(bindir(), name) 35 39 36 perl = os.getenv("PERL", "perl") 37 perl = perl.split()40 # Split perl variable to allow $PERL to be set to e.g. "perl -W" 41 perl = os.getenv("PERL", "perl").split() 38 42 39 43 if subprocess.call(perl + ["-e", "eval require Test::More;"]) == 0: … … 42 46 has_perl_test_more = False 43 47 44 try:45 from subunit.run import TestProgram46 except ImportError:47 has_system_subunit_run = False48 else:49 has_system_subunit_run = True50 51 48 python = os.getenv("PYTHON", "python") 52 49 53 #Set a default value, overridden if we find a working one on the system 54 tap2subunit = "PYTHONPATH=%s/lib/subunit/python:%s/lib/testtools %s %s/lib/subunit/filters/tap2subunit" % (srcdir(), srcdir(), python, srcdir()) 50 tap2subunit = python + " " + os.path.join(srcdir(), "selftest", "tap2subunit") 55 51 56 sub = subprocess.Popen("tap2subunit 2> /dev/null", stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)57 sub.communicate("")58 59 if sub.returncode == 0:60 cmd = "echo -ne \"1..1\nok 1 # skip doesn't seem to work yet\n\" | tap2subunit 2> /dev/null | grep skip"61 sub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)62 if sub.returncode == 0:63 tap2subunit = "tap2subunit"64 52 65 53 def valgrindify(cmdline): … … 71 59 72 60 73 def plantestsuite(name, env, cmdline , allow_empty_output=False):61 def plantestsuite(name, env, cmdline): 74 62 """Plan a test suite. 75 63 … … 83 71 if isinstance(cmdline, list): 84 72 cmdline = " ".join(cmdline) 85 filter_subunit_args = []86 if not allow_empty_output:87 filter_subunit_args.append("--fail-on-empty")88 73 if "$LISTOPT" in cmdline: 89 filter_subunit_args.append("$LISTOPT") 90 print "%s 2>&1 | %s/selftest/filter-subunit %s --prefix=\"%s.\"" % (cmdline, 91 srcdir(), 92 " ".join(filter_subunit_args), 93 name) 94 if allow_empty_output: 95 print "WARNING: allowing empty subunit output from %s" % name 74 raise AssertionError("test %s supports --list, but not --load-list" % name) 75 print cmdline + " 2>&1 " + " | " + add_prefix(name, env) 96 76 97 77 98 def add_prefix(prefix, support_list=False):78 def add_prefix(prefix, env, support_list=False): 99 79 if support_list: 100 80 listopt = "$LISTOPT " 101 81 else: 102 82 listopt = "" 103 return "%s/selftest/filter-subunit %s--fail-on-empty --prefix=\"%s.\" " % (srcdir(), listopt, prefix)83 return "%s/selftest/filter-subunit %s--fail-on-empty --prefix=\"%s.\" --suffix=\"(%s)\"" % (srcdir(), listopt, prefix, env) 104 84 105 85 … … 115 95 cmdline = " ".join(cmdline) 116 96 support_list = ("$LISTOPT" in cmdline) 117 print "%s $LOADLIST 2>&1 | %s" % (cmdline, add_prefix(name, support_list)) 118 119 120 def plantestsuite_idlist(name, env, cmdline): 121 print "-- TEST-IDLIST --" 122 print name 123 print env 124 if isinstance(cmdline, list): 125 cmdline = " ".join(cmdline) 126 print cmdline 97 if not "$LISTOPT" in cmdline: 98 raise AssertionError("loadlist test %s does not support not --list" % name) 99 if not "$LOADLIST" in cmdline: 100 raise AssertionError("loadlist test %s does not support --load-list" % name) 101 print ("%s | %s" % (cmdline.replace("$LOADLIST", ""), add_prefix(name, env, support_list))).replace("$LISTOPT", "--list") 102 print cmdline.replace("$LISTOPT", "") + " 2>&1 " + " | " + add_prefix(name, env, False) 127 103 128 104 … … 134 110 """ 135 111 # FIXME: Report this using subunit, but re-adjust the testsuite count somehow 136 print "skipping %s (%s)" % (name, reason)112 print >>sys.stderr, "skipping %s (%s)" % (name, reason) 137 113 138 114 … … 149 125 150 126 151 def planpythontestsuite(env, module): 152 if has_system_subunit_run: 153 plantestsuite_idlist(module, env, [python, "-m", "subunit.run", "$LISTOPT", module]) 154 else: 155 plantestsuite_idlist(module, env, "PYTHONPATH=$PYTHONPATH:%s/lib/subunit/python:%s/lib/testtools %s -m subunit.run $LISTOPT %s" % (srcdir(), srcdir(), python, module)) 127 def planpythontestsuite(env, module, name=None, extra_path=[]): 128 if name is None: 129 name = module 130 pypath = list(extra_path) 131 args = [python, "-m", "samba.subunit.run", "$LISTOPT", "$LOADLIST", module] 132 if pypath: 133 args.insert(0, "PYTHONPATH=%s" % ":".join(["$PYTHONPATH"] + pypath)) 134 plantestsuite_loadlist(name, env, args) 156 135 157 136 137 def get_env_torture_options(): 138 ret = [] 139 if not os.getenv("SELFTEST_VERBOSE"): 140 ret.append("--option=torture:progress=no") 141 if os.getenv("SELFTEST_QUICK"): 142 ret.append("--option=torture:quick=yes") 143 return ret 144 145 146 samba4srcdir = source4dir() 147 samba3srcdir = source3dir() 148 bbdir = os.path.join(srcdir(), "testprogs/blackbox") 149 configuration = "--configfile=$SMB_CONF_PATH" 150 151 smbtorture4 = binpath("smbtorture") 152 smbtorture4_testsuite_list = subprocess.Popen([smbtorture4, "--list-suites"], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate("")[0].splitlines() 153 154 smbtorture4_options = [ 155 configuration, 156 "--option=\'fss:sequence timeout=1\'", 157 "--maximum-runtime=$SELFTEST_MAXTIME", 158 "--basedir=$SELFTEST_TMPDIR", 159 "--format=subunit" 160 ] + get_env_torture_options() 161 162 163 def plansmbtorture4testsuite(name, env, options, target, modname=None): 164 if modname is None: 165 modname = "samba4.%s" % name 166 if isinstance(options, list): 167 options = " ".join(options) 168 options = " ".join(smbtorture4_options + ["--target=%s" % target]) + " " + options 169 cmdline = "%s $LISTOPT $LOADLIST %s %s" % (valgrindify(smbtorture4), options, name) 170 plantestsuite_loadlist(modname, env, cmdline) 171 172 173 def smbtorture4_testsuites(prefix): 174 return filter(lambda x: x.startswith(prefix), smbtorture4_testsuite_list) 175 176 177 smbclient3 = binpath('smbclient') 178 smbtorture3 = binpath('smbtorture3') 179 ntlm_auth3 = binpath('ntlm_auth') 180 net = binpath('net') 181 scriptdir = os.path.join(srcdir(), "script/tests") 182 183 wbinfo = binpath('wbinfo') 184 dbwrap_tool = binpath('dbwrap_tool') 185 vfstest = binpath('vfstest') 186 smbcquotas = binpath('smbcquotas') 187 smbget = binpath('smbget') -
vendor/current/selftest/subunithelper.py
r740 r988 20 20 import re 21 21 import sys 22 import subunit 23 import subunit.iso8601 24 import testtools 25 26 VALID_RESULTS = ['success', 'successful', 'failure', 'fail', 'skip', 'knownfail', 'error', 'xfail', 'skip-testsuite', 'testsuite-failure', 'testsuite-xfail', 'testsuite-success', 'testsuite-error'] 27 28 class TestsuiteEnabledTestResult(testtools.testresult.TestResult): 22 from samba import subunit 23 from samba.subunit.run import TestProtocolClient 24 from samba.subunit import iso8601 25 import unittest 26 27 VALID_RESULTS = ['success', 'successful', 'failure', 'fail', 'skip', 'knownfail', 'error', 'xfail', 'skip-testsuite', 'testsuite-failure', 'testsuite-xfail', 'testsuite-success', 'testsuite-error', 'uxsuccess', 'testsuite-uxsuccess'] 28 29 class TestsuiteEnabledTestResult(unittest.TestResult): 29 30 30 31 def start_testsuite(self, name): … … 34 35 def parse_results(msg_ops, statistics, fh): 35 36 exitcode = 0 36 expected_fail = 037 37 open_tests = {} 38 38 … … 58 58 msg_ops.control_msg(l) 59 59 try: 60 dt = subunit.iso8601.parse_date(arg.rstrip("\n"))60 dt = iso8601.parse_date(arg.rstrip("\n")) 61 61 except TypeError, e: 62 62 print "Unable to parse time line: %s" % arg.rstrip("\n") … … 112 112 statistics['TESTS_EXPECTED_FAIL']+=1 113 113 msg_ops.addExpectedFailure(test, remote_error) 114 expected_fail+=1 114 elif result in ("uxsuccess", ): 115 try: 116 test = open_tests.pop(testname) 117 except KeyError: 118 statistics['TESTS_ERROR']+=1 119 exitcode = 1 120 msg_ops.addError(subunit.RemotedTestCase(testname), subunit.RemoteError(u"Test was never started")) 121 else: 122 statistics['TESTS_UNEXPECTED_OK']+=1 123 msg_ops.addUnexpectedSuccess(test) 124 exitcode = 1 115 125 elif result in ("failure", "fail"): 116 126 try: … … 149 159 elif result == "testsuite-xfail": 150 160 msg_ops.end_testsuite(testname, "xfail", reason) 161 elif result == "testsuite-uxsuccess": 162 msg_ops.end_testsuite(testname, "uxsuccess", reason) 163 exitcode = 1 151 164 elif result == "testsuite-error": 152 165 msg_ops.end_testsuite(testname, "error", reason) … … 179 192 180 193 181 class SubunitOps(subunit.TestProtocolClient,TestsuiteEnabledTestResult): 194 class SubunitOps(TestProtocolClient,TestsuiteEnabledTestResult): 195 196 def progress(self, count, whence): 197 if whence == subunit.PROGRESS_POP: 198 self._stream.write("progress: pop\n") 199 elif whence == subunit.PROGRESS_PUSH: 200 self._stream.write("progress: push\n") 201 elif whence == subunit.PROGRESS_SET: 202 self._stream.write("progress: %d\n" % count) 203 elif whence == subunit.PROGRESS_CUR: 204 raise NotImplementedError 182 205 183 206 # The following are Samba extensions: … … 235 258 236 259 237 class FilterOps( testtools.testresult.TestResult):260 class FilterOps(unittest.TestResult): 238 261 239 262 def control_msg(self, msg): … … 261 284 262 285 def _add_prefix(self, test): 286 prefix = "" 287 suffix = "" 263 288 if self.prefix is not None: 264 return subunit.RemotedTestCase(self.prefix + test.id()) 265 else: 266 return test 267 268 def addError(self, test, details=None): 289 prefix = self.prefix 290 if self.suffix is not None: 291 suffix = self.suffix 292 293 return subunit.RemotedTestCase(prefix + test.id() + suffix) 294 295 def addError(self, test, err=None): 269 296 test = self._add_prefix(test) 270 297 self.error_added+=1 271 298 self.total_error+=1 272 self._ops.addError(test, details)299 self._ops.addError(test, err) 273 300 self.output = None 274 301 if self.fail_immediately: 275 302 raise ImmediateFail() 276 303 277 def addSkip(self, test, details=None):304 def addSkip(self, test, reason=None): 278 305 self.seen_output = True 279 306 test = self._add_prefix(test) 280 self._ops.addSkip(test, details)281 self.output = None 282 283 def addExpectedFailure(self, test, details=None):307 self._ops.addSkip(test, reason) 308 self.output = None 309 310 def addExpectedFailure(self, test, err=None): 284 311 test = self._add_prefix(test) 285 self._ops.addExpectedFailure(test, details) 286 self.output = None 287 288 def addFailure(self, test, details=None): 312 self._ops.addExpectedFailure(test, err) 313 self.output = None 314 315 def addUnexpectedSuccess(self, test): 316 test = self._add_prefix(test) 317 self.uxsuccess_added+=1 318 self.total_uxsuccess+=1 319 self._ops.addUnexpectedSuccess(test) 320 if self.output: 321 self._ops.output_msg(self.output) 322 self.output = None 323 if self.fail_immediately: 324 raise ImmediateFail() 325 326 def addFailure(self, test, err=None): 289 327 test = self._add_prefix(test) 290 328 xfail_reason = find_in_list(self.expected_failures, test.id()) 329 if xfail_reason is None: 330 xfail_reason = find_in_list(self.flapping, test.id()) 291 331 if xfail_reason is not None: 292 332 self.xfail_added+=1 293 333 self.total_xfail+=1 294 if details is not None: 295 details = subunit.RemoteError(unicode(details[1]) + xfail_reason.decode("utf-8")) 296 else: 297 details = subunit.RemoteError(xfail_reason.decode("utf-8")) 298 self._ops.addExpectedFailure(test, details) 334 self._ops.addExpectedFailure(test, err) 299 335 else: 300 336 self.fail_added+=1 301 337 self.total_fail+=1 302 self._ops.addFailure(test, details)338 self._ops.addFailure(test, err) 303 339 if self.output: 304 340 self._ops.output_msg(self.output) … … 307 343 self.output = None 308 344 309 def addSuccess(self, test , details=None):345 def addSuccess(self, test): 310 346 test = self._add_prefix(test) 311 self._ops.addSuccess(test, details) 347 xfail_reason = find_in_list(self.expected_failures, test.id()) 348 if xfail_reason is not None: 349 self.uxsuccess_added += 1 350 self.total_uxsuccess += 1 351 self._ops.addUnexpectedSuccess(test) 352 if self.output: 353 self._ops.output_msg(self.output) 354 if self.fail_immediately: 355 raise ImmediateFail() 356 else: 357 self._ops.addSuccess(test) 312 358 self.output = None 313 359 … … 320 366 self.fail_added = 0 321 367 self.xfail_added = 0 368 self.uxsuccess_added = 0 322 369 323 370 def end_testsuite(self, name, result, reason=None): … … 326 373 if self.xfail_added > 0: 327 374 xfail = True 328 if self.fail_added > 0 or self.error_added > 0 :375 if self.fail_added > 0 or self.error_added > 0 or self.uxsuccess_added > 0: 329 376 xfail = False 330 377 331 378 if xfail and result in ("fail", "failure"): 332 379 result = "xfail" 380 381 if self.uxsuccess_added > 0 and result != "uxsuccess": 382 result = "uxsuccess" 383 if reason is None: 384 reason = "Subunit/Filter Reason" 385 reason += "\n uxsuccess[%d]" % self.uxsuccess_added 333 386 334 387 if self.fail_added > 0 and result != "failure": … … 345 398 346 399 self._ops.end_testsuite(name, result, reason) 347 348 def __init__(self, out, prefix=None, expected_failures=None, 349 strip_ok_output=False, fail_immediately=False): 400 if result not in ("success", "xfail"): 401 if self.output: 402 self._ops.output_msg(self.output) 403 if self.fail_immediately: 404 raise ImmediateFail() 405 self.output = None 406 407 def __init__(self, out, prefix=None, suffix=None, expected_failures=None, 408 strip_ok_output=False, fail_immediately=False, 409 flapping=None): 350 410 self._ops = out 351 411 self.seen_output = False 352 412 self.output = None 353 413 self.prefix = prefix 414 self.suffix = suffix 354 415 if expected_failures is not None: 355 416 self.expected_failures = expected_failures 356 417 else: 357 418 self.expected_failures = {} 419 if flapping is not None: 420 self.flapping = flapping 421 else: 422 self.flapping = {} 358 423 self.strip_ok_output = strip_ok_output 359 424 self.xfail_added = 0 360 425 self.fail_added = 0 426 self.uxsuccess_added = 0 361 427 self.total_xfail = 0 362 428 self.total_error = 0 363 429 self.total_fail = 0 430 self.total_uxsuccess = 0 364 431 self.error_added = 0 365 432 self.fail_immediately = fail_immediately … … 420 487 self.test_output[name] = "" 421 488 422 out = "[%d" % self.index 489 total_tests = (self.statistics['TESTS_EXPECTED_OK'] + 490 self.statistics['TESTS_EXPECTED_FAIL'] + 491 self.statistics['TESTS_ERROR'] + 492 self.statistics['TESTS_UNEXPECTED_FAIL'] + 493 self.statistics['TESTS_UNEXPECTED_OK']) 494 495 out = "[%d(%d)" % (self.index, total_tests) 423 496 if self.totalsuites is not None: 424 497 out += "/%d" % self.totalsuites 425 498 if self.start_time is not None: 426 out += " in" + self._format_time(self.last_time - self.start_time)499 out += " at " + self._format_time(self.last_time - self.start_time) 427 500 if self.suitesfailed: 428 501 out += ", %d errors" % (len(self.suitesfailed),) … … 476 549 self.end_test(test.id(), "success", False) 477 550 478 def addError(self, test, details=None): 479 self.end_test(test.id(), "error", True, details) 480 481 def addFailure(self, test, details=None): 482 self.end_test(test.id(), "failure", True, details) 483 484 def addSkip(self, test, details=None): 485 self.end_test(test.id(), "skip", False, details) 486 487 def addExpectedFail(self, test, details=None): 488 self.end_test(test.id(), "xfail", False, details) 489 490 def end_test(self, testname, result, unexpected, reason=None): 551 def addError(self, test, err=None): 552 self.end_test(test.id(), "error", True, err) 553 554 def addFailure(self, test, err=None): 555 self.end_test(test.id(), "failure", True, err) 556 557 def addSkip(self, test, reason=None): 558 self.end_test(test.id(), "skip", False, reason) 559 560 def addExpectedFailure(self, test, err=None): 561 self.end_test(test.id(), "xfail", False, err) 562 563 def addUnexpectedSuccess(self, test): 564 self.end_test(test.id(), "uxsuccess", True) 565 566 def end_test(self, testname, result, unexpected, err=None): 491 567 if not unexpected: 492 568 self.test_output[self.name] = "" … … 503 579 504 580 self.test_output[self.name] += "UNEXPECTED(%s): %s\n" % (result, testname) 505 if reasonis not None:506 self.test_output[self.name] += "REASON: %s\n" % (unicode(reason[1]).encode("utf-8").strip(),)581 if err is not None: 582 self.test_output[self.name] += "REASON: %s\n" % str(err[1]).strip() 507 583 508 584 if self.immediate and not self.verbose: 509 print self.test_output[self.name]585 sys.stdout.write(self.test_output[self.name]) 510 586 self.test_output[self.name] = "" 511 587 … … 514 590 'error': 'E', 515 591 'failure': 'F', 592 'uxsuccess': 'U', 516 593 'success': 'S'}.get(result, "?")) 517 594 … … 547 624 if (not self.suitesfailed and 548 625 not self.statistics['TESTS_UNEXPECTED_FAIL'] and 626 not self.statistics['TESTS_UNEXPECTED_OK'] and 549 627 not self.statistics['TESTS_ERROR']): 550 628 ok = (self.statistics['TESTS_EXPECTED_OK'] + … … 552 630 print "\nALL OK (%d tests in %d testsuites)" % (ok, self.suites_ok) 553 631 else: 554 print "\nFAILED (%d failures and %d errors in %d testsuites)" % (632 print "\nFAILED (%d failures, %d errors and %d unexpected successes in %d testsuites)" % ( 555 633 self.statistics['TESTS_UNEXPECTED_FAIL'], 556 634 self.statistics['TESTS_ERROR'], 635 self.statistics['TESTS_UNEXPECTED_OK'], 557 636 len(self.suitesfailed)) 558 637 -
vendor/current/selftest/target/Samba3.pm
r919 r988 10 10 use FindBin qw($RealBin); 11 11 use POSIX; 12 13 sub binpath($$) 12 use target::Samba; 13 14 sub have_ads($) { 15 my ($self) = @_; 16 my $found_ads = 0; 17 my $smbd_build_options = Samba::bindir_path($self, "smbd") . " -b|"; 18 open(IN, $smbd_build_options) or die("Unable to run $smbd_build_options: $!"); 19 20 while (<IN>) { 21 if (/WITH_ADS/) { 22 $found_ads = 1; 23 } 24 } 25 close IN; 26 27 # If we were not built with ADS support, pretend we were never even available 28 print "smbd does not have ADS support\n" unless $found_ads; 29 return $found_ads; 30 } 31 32 # return smb.conf parameters applicable to @path, based on the underlying 33 # filesystem type 34 sub get_fs_specific_conf($$) 14 35 { 15 my ($self, $binary) = @_; 16 17 if (defined($self->{bindir})) { 18 my $path = "$self->{bindir}/$binary"; 19 -f $path or die("File $path doesn't exist"); 20 return $path; 21 } 22 23 return $binary; 36 my ($self, $path) = @_; 37 my $mods = ""; 38 my $stat_out = `stat --file-system $path` or return ""; 39 40 if ($stat_out =~ m/Type:\s+btrfs/) { 41 $mods .= "btrfs "; 42 } 43 44 if ($mods) { 45 return "vfs objects = $mods"; 46 } 47 48 return undef; 24 49 } 25 50 26 51 sub new($$) { 27 my ($classname, $bindir, $srcdir) = @_; 28 my $self = { bindir => $bindir, 29 srcdir => $srcdir 52 my ($classname, $bindir, $srcdir, $server_maxtime) = @_; 53 my $self = { vars => {}, 54 bindir => $bindir, 55 srcdir => $srcdir, 56 server_maxtime => $server_maxtime 30 57 }; 31 58 bless $self; … … 36 63 { 37 64 my ($self, $envvars) = @_; 38 39 my $smbdpid = read_pid($envvars, "smbd"); 40 my $nmbdpid = read_pid($envvars, "nmbd"); 41 my $winbinddpid = read_pid($envvars, "winbindd"); 65 my $count = 0; 66 67 # This should cause smbd to terminate gracefully 68 close($envvars->{STDIN_PIPE}); 69 70 my $smbdpid = $envvars->{SMBD_TL_PID}; 71 my $nmbdpid = $envvars->{NMBD_TL_PID}; 72 my $winbinddpid = $envvars->{WINBINDD_TL_PID}; 73 74 # This should give it time to write out the gcov data 75 until ($count > 20) { 76 my $smbdchild = Samba::cleanup_child($smbdpid, "smbd"); 77 my $nmbdchild = Samba::cleanup_child($nmbdpid, "nmbd"); 78 my $winbinddchild = Samba::cleanup_child($winbinddpid, "winbindd"); 79 if ($smbdchild == -1 80 && $nmbdchild == -1 81 && $winbinddchild == -1) { 82 last; 83 } 84 sleep(1); 85 $count++; 86 } 87 88 if ($count <= 20 && kill(0, $smbdpid, $nmbdpid, $winbinddpid) == 0) { 89 return; 90 } 42 91 43 92 $self->stop_sig_term($smbdpid); … … 45 94 $self->stop_sig_term($winbinddpid); 46 95 47 sleep(2); 48 96 $count = 0; 97 until ($count > 10) { 98 my $smbdchild = Samba::cleanup_child($smbdpid, "smbd"); 99 my $nmbdchild = Samba::cleanup_child($nmbdpid, "nmbd"); 100 my $winbinddchild = Samba::cleanup_child($winbinddpid, "winbindd"); 101 if ($smbdchild == -1 102 && $nmbdchild == -1 103 && $winbinddchild == -1) { 104 last; 105 } 106 sleep(1); 107 $count++; 108 } 109 110 if ($count <= 10 && kill(0, $smbdpid, $nmbdpid, $winbinddpid) == 0) { 111 return; 112 } 113 114 warn("timelimit process did not quit on SIGTERM, sending SIGKILL"); 49 115 $self->stop_sig_kill($smbdpid); 50 116 $self->stop_sig_kill($nmbdpid); … … 91 157 my ($self, $envvars) = @_; 92 158 159 my $childpid = waitpid(-1, WNOHANG); 160 93 161 # TODO ... 94 162 return 1; … … 98 166 { 99 167 my ($self, $envname, $path) = @_; 100 101 if ($envname eq "s3dc") { 102 return $self->setup_dc("$path/s3dc"); 103 } elsif ($envname eq "secshare") { 104 return $self->setup_secshare("$path/secshare"); 105 } elsif ($envname eq "secserver") { 106 if (not defined($self->{vars}->{s3dc})) { 107 $self->setup_dc("$path/s3dc"); 108 } 109 return $self->setup_secserver("$path/secserver", $self->{vars}->{s3dc}); 110 } elsif ($envname eq "member") { 111 if (not defined($self->{vars}->{s3dc})) { 112 $self->setup_dc("$path/s3dc"); 113 } 114 return $self->setup_member("$path/member", $self->{vars}->{s3dc}); 168 169 $ENV{ENVNAME} = $envname; 170 171 if (defined($self->{vars}->{$envname})) { 172 return $self->{vars}->{$envname}; 173 } 174 175 # 176 # Avoid hitting system krb5.conf - 177 # An env that needs Kerberos will reset this to the real 178 # value. 179 # 180 $ENV{KRB5_CONFIG} = "$path/no_krb5.conf"; 181 182 if ($envname eq "nt4_dc") { 183 return $self->setup_nt4_dc("$path/nt4_dc"); 184 } elsif ($envname eq "nt4_dc_schannel") { 185 return $self->setup_nt4_dc_schannel("$path/nt4_dc_schannel"); 186 } elsif ($envname eq "simpleserver") { 187 return $self->setup_simpleserver("$path/simpleserver"); 188 } elsif ($envname eq "fileserver") { 189 return $self->setup_fileserver("$path/fileserver"); 190 } elsif ($envname eq "maptoguest") { 191 return $self->setup_maptoguest("$path/maptoguest"); 192 } elsif ($envname eq "ktest") { 193 return $self->setup_ktest("$path/ktest"); 194 } elsif ($envname eq "nt4_member") { 195 if (not defined($self->{vars}->{nt4_dc})) { 196 if (not defined($self->setup_nt4_dc("$path/nt4_dc"))) { 197 return undef; 198 } 199 } 200 return $self->setup_nt4_member("$path/nt4_member", $self->{vars}->{nt4_dc}); 115 201 } else { 116 return undef;117 } 118 } 119 120 sub setup_ dc($$)202 return "UNKNOWN"; 203 } 204 } 205 206 sub setup_nt4_dc($$) 121 207 { 122 208 my ($self, $path) = @_; 123 209 124 print "PROVISIONING S3DC...";125 126 my $ s3dc_options = "210 print "PROVISIONING NT4 DC..."; 211 212 my $nt4_dc_options = " 127 213 domain master = yes 128 214 domain logons = yes 129 215 lanman auth = yes 130 216 raw NTLMv2 auth = yes 217 218 rpc_server:epmapper = external 219 rpc_server:spoolss = external 220 rpc_server:lsarpc = external 221 rpc_server:samr = external 222 rpc_server:netlogon = external 223 rpc_server:register_embedded_np = yes 224 rpc_server:FssagentRpc = external 225 226 rpc_daemon:epmd = fork 227 rpc_daemon:spoolssd = fork 228 rpc_daemon:lsasd = fork 229 rpc_daemon:fssd = fork 230 fss: sequence timeout = 1 131 231 "; 132 232 133 233 my $vars = $self->provision($path, 134 "LOCALS3DC2", 135 2, 136 "locals3dc2pass", 137 $s3dc_options); 138 139 $self->check_or_start($vars, 140 ($ENV{SMBD_MAXTIME} or 2700), 141 "yes", "yes", "yes"); 142 143 $self->wait_for_start($vars); 234 "LOCALNT4DC2", 235 "localntdc2pass", 236 $nt4_dc_options); 237 238 $vars or return undef; 239 240 if (not $self->check_or_start($vars, "yes", "yes", "yes")) { 241 return undef; 242 } 144 243 145 244 $vars->{DC_SERVER} = $vars->{SERVER}; 146 245 $vars->{DC_SERVER_IP} = $vars->{SERVER_IP}; 246 $vars->{DC_SERVER_IPV6} = $vars->{SERVER_IPV6}; 147 247 $vars->{DC_NETBIOSNAME} = $vars->{NETBIOSNAME}; 148 248 $vars->{DC_USERNAME} = $vars->{USERNAME}; 149 249 $vars->{DC_PASSWORD} = $vars->{PASSWORD}; 150 250 151 $self->{vars}->{ s3dc} = $vars;251 $self->{vars}->{nt4_dc} = $vars; 152 252 153 253 return $vars; 154 254 } 155 255 156 sub setup_ member($$$)256 sub setup_nt4_dc_schannel($$) 157 257 { 158 my ($self, $prefix, $s3dcvars) = @_; 258 my ($self, $path) = @_; 259 260 print "PROVISIONING NT4 DC WITH SERVER SCHANNEL ..."; 261 262 my $pdc_options = " 263 domain master = yes 264 domain logons = yes 265 lanman auth = yes 266 267 rpc_server:epmapper = external 268 rpc_server:spoolss = external 269 rpc_server:lsarpc = external 270 rpc_server:samr = external 271 rpc_server:netlogon = external 272 rpc_server:register_embedded_np = yes 273 274 rpc_daemon:epmd = fork 275 rpc_daemon:spoolssd = fork 276 rpc_daemon:lsasd = fork 277 278 server schannel = yes 279 "; 280 281 my $vars = $self->provision($path, 282 "LOCALNT4DC9", 283 "localntdc9pass", 284 $pdc_options); 285 286 $vars or return undef; 287 288 if (not $self->check_or_start($vars, "yes", "yes", "yes")) { 289 return undef; 290 } 291 292 $vars->{DC_SERVER} = $vars->{SERVER}; 293 $vars->{DC_SERVER_IP} = $vars->{SERVER_IP}; 294 $vars->{DC_SERVER_IPV6} = $vars->{SERVER_IPV6}; 295 $vars->{DC_NETBIOSNAME} = $vars->{NETBIOSNAME}; 296 $vars->{DC_USERNAME} = $vars->{USERNAME}; 297 $vars->{DC_PASSWORD} = $vars->{PASSWORD}; 298 299 $self->{vars}->{nt4_dc_schannel} = $vars; 300 301 return $vars; 302 } 303 304 sub setup_nt4_member($$$) 305 { 306 my ($self, $prefix, $nt4_dc_vars) = @_; 307 my $count = 0; 308 my $rc; 159 309 160 310 print "PROVISIONING MEMBER..."; … … 163 313 security = domain 164 314 server signing = on 315 dbwrap_tdb_mutexes:* = yes 165 316 "; 166 317 my $ret = $self->provision($prefix, 167 "LOCALMEMBER3", 168 3, 169 "localmember3pass", 318 "LOCALNT4MEMBER3", 319 "localnt4member3pass", 170 320 $member_options); 171 321 172 $ret or die("Unable to provision"); 173 174 my $net = $self->binpath("net"); 322 $ret or return undef; 323 324 my $nmblookup = Samba::bindir_path($self, "nmblookup"); 325 do { 326 print "Waiting for the LOGON SERVER registration ...\n"; 327 $rc = system("$nmblookup $ret->{CONFIGURATION} $ret->{DOMAIN}\#1c"); 328 if ($rc != 0) { 329 sleep(1); 330 } 331 $count++; 332 } while ($rc != 0 && $count < 10); 333 if ($count == 10) { 334 print "NMBD not reachable after 10 retries\n"; 335 teardown_env($self, $ret); 336 return 0; 337 } 338 339 my $net = Samba::bindir_path($self, "net"); 175 340 my $cmd = ""; 176 341 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" "; 177 $cmd .= "$net join $ret->{CONFIGURATION} $s3dcvars->{DOMAIN} member"; 178 $cmd .= " -U$s3dcvars->{USERNAME}\%$s3dcvars->{PASSWORD}"; 179 180 system($cmd) == 0 or die("Join failed\n$cmd"); 181 182 $self->check_or_start($ret, 183 ($ENV{SMBD_MAXTIME} or 2700), 184 "yes", "yes", "yes"); 185 186 $self->wait_for_start($ret); 187 188 $ret->{DC_SERVER} = $s3dcvars->{SERVER}; 189 $ret->{DC_SERVER_IP} = $s3dcvars->{SERVER_IP}; 190 $ret->{DC_NETBIOSNAME} = $s3dcvars->{NETBIOSNAME}; 191 $ret->{DC_USERNAME} = $s3dcvars->{USERNAME}; 192 $ret->{DC_PASSWORD} = $s3dcvars->{PASSWORD}; 342 $cmd .= "$net join $ret->{CONFIGURATION} $nt4_dc_vars->{DOMAIN} member"; 343 $cmd .= " -U$nt4_dc_vars->{USERNAME}\%$nt4_dc_vars->{PASSWORD}"; 344 345 if (system($cmd) != 0) { 346 warn("Join failed\n$cmd"); 347 return undef; 348 } 349 350 if (not $self->check_or_start($ret, "yes", "yes", "yes")) { 351 return undef; 352 } 353 354 $ret->{DC_SERVER} = $nt4_dc_vars->{SERVER}; 355 $ret->{DC_SERVER_IP} = $nt4_dc_vars->{SERVER_IP}; 356 $ret->{DC_SERVER_IPV6} = $nt4_dc_vars->{SERVER_IPV6}; 357 $ret->{DC_NETBIOSNAME} = $nt4_dc_vars->{NETBIOSNAME}; 358 $ret->{DC_USERNAME} = $nt4_dc_vars->{USERNAME}; 359 $ret->{DC_PASSWORD} = $nt4_dc_vars->{PASSWORD}; 193 360 194 361 return $ret; 195 362 } 196 363 197 sub setup_secshare($$) 364 sub setup_admember($$$$) 365 { 366 my ($self, $prefix, $dcvars) = @_; 367 368 # If we didn't build with ADS, pretend this env was never available 369 if (not $self->have_ads()) { 370 return "UNKNOWN"; 371 } 372 373 print "PROVISIONING S3 AD MEMBER..."; 374 375 my $member_options = " 376 security = ads 377 server signing = on 378 workgroup = $dcvars->{DOMAIN} 379 realm = $dcvars->{REALM} 380 "; 381 382 my $ret = $self->provision($prefix, 383 "LOCALADMEMBER", 384 "loCalMemberPass", 385 $member_options, 386 $dcvars->{SERVER_IP}, 387 $dcvars->{SERVER_IPV6}); 388 389 $ret or return undef; 390 391 close(USERMAP); 392 $ret->{DOMAIN} = $dcvars->{DOMAIN}; 393 $ret->{REALM} = $dcvars->{REALM}; 394 395 my $ctx; 396 my $prefix_abs = abs_path($prefix); 397 $ctx = {}; 398 $ctx->{krb5_conf} = "$prefix_abs/lib/krb5.conf"; 399 $ctx->{domain} = $dcvars->{DOMAIN}; 400 $ctx->{realm} = $dcvars->{REALM}; 401 $ctx->{dnsname} = lc($dcvars->{REALM}); 402 $ctx->{kdc_ipv4} = $dcvars->{SERVER_IP}; 403 $ctx->{kdc_ipv6} = $dcvars->{SERVER_IPV6}; 404 Samba::mk_krb5_conf($ctx, ""); 405 406 $ret->{KRB5_CONFIG} = $ctx->{krb5_conf}; 407 408 my $net = Samba::bindir_path($self, "net"); 409 my $cmd = ""; 410 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" "; 411 if (defined($ret->{RESOLV_WRAPPER_CONF})) { 412 $cmd .= "RESOLV_WRAPPER_CONF=\"$ret->{RESOLV_WRAPPER_CONF}\" "; 413 } else { 414 $cmd .= "RESOLV_WRAPPER_HOSTS=\"$ret->{RESOLV_WRAPPER_HOSTS}\" "; 415 } 416 $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" "; 417 $cmd .= "$net join $ret->{CONFIGURATION}"; 418 $cmd .= " -U$dcvars->{USERNAME}\%$dcvars->{PASSWORD}"; 419 420 if (system($cmd) != 0) { 421 warn("Join failed\n$cmd"); 422 return undef; 423 } 424 425 # We need world access to this share, as otherwise the domain 426 # administrator from the AD domain provided by Samba4 can't 427 # access the share for tests. 428 chmod 0777, "$prefix/share"; 429 430 if (not $self->check_or_start($ret, "yes", "yes", "yes")) { 431 return undef; 432 } 433 434 $ret->{DC_SERVER} = $dcvars->{SERVER}; 435 $ret->{DC_SERVER_IP} = $dcvars->{SERVER_IP}; 436 $ret->{DC_SERVER_IPV6} = $dcvars->{SERVER_IPV6}; 437 $ret->{DC_NETBIOSNAME} = $dcvars->{NETBIOSNAME}; 438 $ret->{DC_USERNAME} = $dcvars->{USERNAME}; 439 $ret->{DC_PASSWORD} = $dcvars->{PASSWORD}; 440 441 # Special case, this is called from Samba4.pm but needs to use the Samba3 check_env and get_log_env 442 $ret->{target} = $self; 443 444 return $ret; 445 } 446 447 sub setup_admember_rfc2307($$$$) 448 { 449 my ($self, $prefix, $dcvars) = @_; 450 451 # If we didn't build with ADS, pretend this env was never available 452 if (not $self->have_ads()) { 453 return "UNKNOWN"; 454 } 455 456 print "PROVISIONING S3 AD MEMBER WITH idmap_rfc2307 config..."; 457 458 my $member_options = " 459 security = ads 460 server signing = on 461 workgroup = $dcvars->{DOMAIN} 462 realm = $dcvars->{REALM} 463 idmap config $dcvars->{DOMAIN} : backend = rfc2307 464 idmap config $dcvars->{DOMAIN} : range = 2000000-2999999 465 idmap config $dcvars->{DOMAIN} : ldap_server = ad 466 idmap config $dcvars->{DOMAIN} : bind_path_user = ou=idmap,dc=samba,dc=example,dc=com 467 idmap config $dcvars->{DOMAIN} : bind_path_group = ou=idmap,dc=samba,dc=example,dc=com 468 "; 469 470 my $ret = $self->provision($prefix, 471 "RFC2307MEMBER", 472 "loCalMemberPass", 473 $member_options, 474 $dcvars->{SERVER_IP}, 475 $dcvars->{SERVER_IPV6}); 476 477 $ret or return undef; 478 479 close(USERMAP); 480 $ret->{DOMAIN} = $dcvars->{DOMAIN}; 481 $ret->{REALM} = $dcvars->{REALM}; 482 483 my $ctx; 484 my $prefix_abs = abs_path($prefix); 485 $ctx = {}; 486 $ctx->{krb5_conf} = "$prefix_abs/lib/krb5.conf"; 487 $ctx->{domain} = $dcvars->{DOMAIN}; 488 $ctx->{realm} = $dcvars->{REALM}; 489 $ctx->{dnsname} = lc($dcvars->{REALM}); 490 $ctx->{kdc_ipv4} = $dcvars->{SERVER_IP}; 491 $ctx->{kdc_ipv6} = $dcvars->{SERVER_IPV6}; 492 Samba::mk_krb5_conf($ctx, ""); 493 494 $ret->{KRB5_CONFIG} = $ctx->{krb5_conf}; 495 496 my $net = Samba::bindir_path($self, "net"); 497 my $cmd = ""; 498 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" "; 499 if (defined($ret->{RESOLV_WRAPPER_CONF})) { 500 $cmd .= "RESOLV_WRAPPER_CONF=\"$ret->{RESOLV_WRAPPER_CONF}\" "; 501 } else { 502 $cmd .= "RESOLV_WRAPPER_HOSTS=\"$ret->{RESOLV_WRAPPER_HOSTS}\" "; 503 } 504 $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" "; 505 $cmd .= "$net join $ret->{CONFIGURATION}"; 506 $cmd .= " -U$dcvars->{USERNAME}\%$dcvars->{PASSWORD}"; 507 508 if (system($cmd) != 0) { 509 warn("Join failed\n$cmd"); 510 return undef; 511 } 512 513 # We need world access to this share, as otherwise the domain 514 # administrator from the AD domain provided by Samba4 can't 515 # access the share for tests. 516 chmod 0777, "$prefix/share"; 517 518 if (not $self->check_or_start($ret, "yes", "yes", "yes")) { 519 return undef; 520 } 521 522 $ret->{DC_SERVER} = $dcvars->{SERVER}; 523 $ret->{DC_SERVER_IP} = $dcvars->{SERVER_IP}; 524 $ret->{DC_SERVER_IPV6} = $dcvars->{SERVER_IPV6}; 525 $ret->{DC_NETBIOSNAME} = $dcvars->{NETBIOSNAME}; 526 $ret->{DC_USERNAME} = $dcvars->{USERNAME}; 527 $ret->{DC_PASSWORD} = $dcvars->{PASSWORD}; 528 529 # Special case, this is called from Samba4.pm but needs to use the Samba3 check_env and get_log_env 530 $ret->{target} = $self; 531 532 return $ret; 533 } 534 535 sub setup_simpleserver($$) 198 536 { 199 537 my ($self, $path) = @_; 200 538 201 print "PROVISIONING server with security=share..."; 202 203 my $secshare_options = " 204 security = share 539 print "PROVISIONING simple server..."; 540 541 my $prefix_abs = abs_path($path); 542 543 my $simpleserver_options = " 205 544 lanman auth = yes 545 vfs objects = xattr_tdb streams_depot 546 change notify = no 547 548 [vfs_aio_fork] 549 path = $prefix_abs/share 550 vfs objects = aio_fork 551 read only = no 552 vfs_aio_fork:erratic_testing_mode=yes 206 553 "; 207 554 208 555 my $vars = $self->provision($path, 209 556 "LOCALSHARE4", 210 4,211 557 "local4pass", 212 $s ecshare_options);213 214 $ self->check_or_start($vars,215 ($ENV{SMBD_MAXTIME} or 2700), 216 "yes", "no", "yes");217 218 $self->wait_for_start($vars);219 220 $self->{vars}->{s ecshare} = $vars;558 $simpleserver_options); 559 560 $vars or return undef; 561 562 if (not $self->check_or_start($vars, "yes", "no", "yes")) { 563 return undef; 564 } 565 566 $self->{vars}->{simpleserver} = $vars; 221 567 222 568 return $vars; 223 569 } 224 570 225 sub setup_ secserver($$$)571 sub setup_fileserver($$) 226 572 { 227 my ($self, $prefix, $s3dcvars) = @_; 228 229 print "PROVISIONING server with security=server..."; 230 231 my $secserver_options = " 232 security = server 233 password server = $s3dcvars->{SERVER_IP} 234 client ntlmv2 auth = no 573 my ($self, $path) = @_; 574 my $prefix_abs = abs_path($path); 575 my $srcdir_abs = abs_path($self->{srcdir}); 576 577 print "PROVISIONING file server ...\n"; 578 579 my @dirs = (); 580 581 mkdir($prefix_abs, 0777); 582 583 my $share_dir="$prefix_abs/share"; 584 585 # Create share directory structure 586 my $lower_case_share_dir="$share_dir/lower-case"; 587 push(@dirs, $lower_case_share_dir); 588 589 my $lower_case_share_dir_30000="$share_dir/lower-case-30000"; 590 push(@dirs, $lower_case_share_dir_30000); 591 592 my $dfree_share_dir="$share_dir/dfree"; 593 push(@dirs, $dfree_share_dir); 594 push(@dirs, "$dfree_share_dir/subdir1"); 595 push(@dirs, "$dfree_share_dir/subdir2"); 596 597 my $valid_users_sharedir="$share_dir/valid_users"; 598 push(@dirs,$valid_users_sharedir); 599 600 my $offline_sharedir="$share_dir/offline"; 601 push(@dirs,$offline_sharedir); 602 603 my $force_user_valid_users_dir = "$share_dir/force_user_valid_users"; 604 push(@dirs, $force_user_valid_users_dir); 605 606 my $smbget_sharedir="$share_dir/smbget"; 607 push(@dirs,$smbget_sharedir); 608 609 my $fileserver_options = " 610 [lowercase] 611 path = $lower_case_share_dir 612 comment = smb username is [%U] 613 case sensitive = True 614 default case = lower 615 preserve case = no 616 short preserve case = no 617 [lowercase-30000] 618 path = $lower_case_share_dir_30000 619 comment = smb username is [%U] 620 case sensitive = True 621 default case = lower 622 preserve case = no 623 short preserve case = no 624 [dfree] 625 path = $dfree_share_dir 626 comment = smb username is [%U] 627 dfree command = $srcdir_abs/testprogs/blackbox/dfree.sh 628 [valid-users-access] 629 path = $valid_users_sharedir 630 valid users = +userdup 631 [offline] 632 path = $offline_sharedir 633 vfs objects = offline 634 635 # BUG: https://bugzilla.samba.org/show_bug.cgi?id=9878 636 # RH BUG: https://bugzilla.redhat.com/show_bug.cgi?id=1077651 637 [force_user_valid_users] 638 path = $force_user_valid_users_dir 639 comment = force user with valid users combination test share 640 valid users = +force_user 641 force user = force_user 642 force group = everyone 643 write list = force_user 644 645 [smbget] 646 path = $smbget_sharedir 647 comment = smb username is [%U] 648 guest ok = yes 235 649 "; 236 650 651 my $vars = $self->provision($path, 652 "FILESERVER", 653 "fileserver", 654 $fileserver_options, 655 undef, 656 undef, 657 1); 658 659 $vars or return undef; 660 661 if (not $self->check_or_start($vars, "yes", "no", "yes")) { 662 return undef; 663 } 664 665 $self->{vars}->{fileserver} = $vars; 666 667 mkdir($_, 0777) foreach(@dirs); 668 669 ## Create case sensitive lower case share dir 670 foreach my $file ('a'..'z') { 671 my $full_path = $lower_case_share_dir . '/' . $file; 672 open my $fh, '>', $full_path; 673 # Add some content to file 674 print $fh $full_path; 675 close $fh; 676 } 677 678 for (my $file = 1; $file < 51; ++$file) { 679 my $full_path = $lower_case_share_dir . '/' . $file; 680 open my $fh, '>', $full_path; 681 # Add some content to file 682 print $fh $full_path; 683 close $fh; 684 } 685 686 # Create content for 30000 share 687 foreach my $file ('a'..'z') { 688 my $full_path = $lower_case_share_dir_30000 . '/' . $file; 689 open my $fh, '>', $full_path; 690 # Add some content to file 691 print $fh $full_path; 692 close $fh; 693 } 694 695 for (my $file = 1; $file < 30001; ++$file) { 696 my $full_path = $lower_case_share_dir_30000 . '/' . $file; 697 open my $fh, '>', $full_path; 698 # Add some content to file 699 print $fh $full_path; 700 close $fh; 701 } 702 703 ## 704 ## create a listable file in valid_users_share 705 ## 706 my $valid_users_target = "$valid_users_sharedir/foo"; 707 unless (open(VALID_USERS_TARGET, ">$valid_users_target")) { 708 warn("Unable to open $valid_users_target"); 709 return undef; 710 } 711 close(VALID_USERS_TARGET); 712 chmod 0644, $valid_users_target; 713 714 return $vars; 715 } 716 717 sub setup_ktest($$$) 718 { 719 my ($self, $prefix) = @_; 720 721 # If we didn't build with ADS, pretend this env was never available 722 if (not $self->have_ads()) { 723 return "UNKNOWN"; 724 } 725 726 print "PROVISIONING server with security=ads..."; 727 728 my $ktest_options = " 729 workgroup = KTEST 730 realm = ktest.samba.example.com 731 security = ads 732 username map = $prefix/lib/username.map 733 server signing = required 734 "; 735 237 736 my $ret = $self->provision($prefix, 238 "LOCALSERVER5", 239 5, 240 "localserver5pass", 241 $secserver_options); 242 243 $ret or die("Unable to provision"); 244 245 $self->check_or_start($ret, 246 ($ENV{SMBD_MAXTIME} or 2700), 247 "yes", "no", "yes"); 248 249 $self->wait_for_start($ret); 250 251 $ret->{DC_SERVER} = $s3dcvars->{SERVER}; 252 $ret->{DC_SERVER_IP} = $s3dcvars->{SERVER_IP}; 253 $ret->{DC_NETBIOSNAME} = $s3dcvars->{NETBIOSNAME}; 254 $ret->{DC_USERNAME} = $s3dcvars->{USERNAME}; 255 $ret->{DC_PASSWORD} = $s3dcvars->{PASSWORD}; 256 737 "LOCALKTEST6", 738 "localktest6pass", 739 $ktest_options); 740 741 $ret or return undef; 742 743 my $ctx; 744 my $prefix_abs = abs_path($prefix); 745 $ctx = {}; 746 $ctx->{krb5_conf} = "$prefix_abs/lib/krb5.conf"; 747 $ctx->{domain} = "KTEST"; 748 $ctx->{realm} = "KTEST.SAMBA.EXAMPLE.COM"; 749 $ctx->{dnsname} = lc($ctx->{realm}); 750 $ctx->{kdc_ipv4} = "0.0.0.0"; 751 $ctx->{kdc_ipv6} = "::"; 752 Samba::mk_krb5_conf($ctx, ""); 753 754 $ret->{KRB5_CONFIG} = $ctx->{krb5_conf}; 755 756 open(USERMAP, ">$prefix/lib/username.map") or die("Unable to open $prefix/lib/username.map"); 757 print USERMAP " 758 $ret->{USERNAME} = KTEST\\Administrator 759 "; 760 close(USERMAP); 761 762 #This is the secrets.tdb created by 'net ads join' from Samba3 to a 763 #Samba4 DC with the same parameters as are being used here. The 764 #domain SID is S-1-5-21-1071277805-689288055-3486227160 765 766 system("cp $self->{srcdir}/source3/selftest/ktest-secrets.tdb $prefix/private/secrets.tdb"); 767 chmod 0600, "$prefix/private/secrets.tdb"; 768 769 #Make sure there's no old ntdb file. 770 system("rm -f $prefix/private/secrets.ntdb"); 771 772 #This uses a pre-calculated krb5 credentials cache, obtained by running Samba4 with: 773 # "--option=kdc:service ticket lifetime=239232" "--option=kdc:user ticket lifetime=239232" "--option=kdc:renewal lifetime=239232" 774 # 775 #and having in krb5.conf: 776 # ticket_lifetime = 799718400 777 # renew_lifetime = 799718400 778 # 779 # The commands for the -2 keytab where were: 780 # kinit administrator@KTEST.SAMBA.EXAMPLE.COM 781 # kvno host/localktest6@KTEST.SAMBA.EXAMPLE.COM 782 # kvno cifs/localktest6@KTEST.SAMBA.EXAMPLE.COM 783 # kvno host/LOCALKTEST6@KTEST.SAMBA.EXAMPLE.COM 784 # kvno cifs/LOCALKTEST6@KTEST.SAMBA.EXAMPLE.COM 785 # 786 # and then for the -3 keytab, I did 787 # 788 # net changetrustpw; kdestroy and the same again. 789 # 790 # This creates a credential cache with a very long lifetime (2036 at 791 # at 2011-04), and shows that running 'net changetrustpw' does not 792 # break existing logins (for the secrets.tdb method at least). 793 # 794 795 $ret->{KRB5_CCACHE}="FILE:$prefix/krb5_ccache"; 796 797 system("cp $self->{srcdir}/source3/selftest/ktest-krb5_ccache-2 $prefix/krb5_ccache-2"); 798 chmod 0600, "$prefix/krb5_ccache-2"; 799 800 system("cp $self->{srcdir}/source3/selftest/ktest-krb5_ccache-3 $prefix/krb5_ccache-3"); 801 chmod 0600, "$prefix/krb5_ccache-3"; 802 803 # We need world access to this share, as otherwise the domain 804 # administrator from the AD domain provided by ktest can't 805 # access the share for tests. 806 chmod 0777, "$prefix/share"; 807 808 if (not $self->check_or_start($ret, "yes", "no", "yes")) { 809 return undef; 810 } 257 811 return $ret; 812 } 813 814 sub setup_maptoguest($$) 815 { 816 my ($self, $path) = @_; 817 818 print "PROVISIONING maptoguest..."; 819 820 my $options = " 821 map to guest = bad user 822 "; 823 824 my $vars = $self->provision($path, 825 "maptoguest", 826 "maptoguestpass", 827 $options); 828 829 $vars or return undef; 830 831 if (not $self->check_or_start($vars, "yes", "no", "yes")) { 832 return undef; 833 } 834 835 $self->{vars}->{s3maptoguest} = $vars; 836 837 return $vars; 258 838 } 259 839 … … 288 868 289 869 sub check_or_start($$$$$) { 290 my ($self, $env_vars, $maxtime, $nmbd, $winbindd, $smbd) = @_; 870 my ($self, $env_vars, $nmbd, $winbindd, $smbd) = @_; 871 872 # use a pipe for stdin in the child processes. This allows 873 # those processes to monitor the pipe for EOF to ensure they 874 # exit when the test script exits 875 pipe(STDIN_READER, $env_vars->{STDIN_PIPE}); 291 876 292 877 unlink($env_vars->{NMBD_TEST_LOG}); … … 299 884 SocketWrapper::set_default_iface($env_vars->{SOCKET_WRAPPER_DEFAULT_IFACE}); 300 885 301 $ENV{WINBINDD_SOCKET_DIR} = $env_vars->{WINBINDD_SOCKET_DIR}; 886 $ENV{KRB5_CONFIG} = $env_vars->{KRB5_CONFIG}; 887 $ENV{SELFTEST_WINBINDD_SOCKET_DIR} = $env_vars->{SELFTEST_WINBINDD_SOCKET_DIR}; 302 888 $ENV{NMBD_SOCKET_DIR} = $env_vars->{NMBD_SOCKET_DIR}; 303 889 304 890 $ENV{NSS_WRAPPER_PASSWD} = $env_vars->{NSS_WRAPPER_PASSWD}; 305 891 $ENV{NSS_WRAPPER_GROUP} = $env_vars->{NSS_WRAPPER_GROUP}; 306 $ENV{NSS_WRAPPER_WINBIND_SO_PATH} = $env_vars->{NSS_WRAPPER_WINBIND_SO_PATH}; 892 $ENV{NSS_WRAPPER_HOSTS} = $env_vars->{NSS_WRAPPER_HOSTS}; 893 $ENV{NSS_WRAPPER_HOSTNAME} = $env_vars->{NSS_WRAPPER_HOSTNAME}; 894 $ENV{NSS_WRAPPER_MODULE_SO_PATH} = $env_vars->{NSS_WRAPPER_MODULE_SO_PATH}; 895 $ENV{NSS_WRAPPER_MODULE_FN_PREFIX} = $env_vars->{NSS_WRAPPER_MODULE_FN_PREFIX}; 896 $ENV{UID_WRAPPER_ROOT} = "1"; 897 898 $ENV{ENVNAME} = "$ENV{ENVNAME}.nmbd"; 307 899 308 900 if ($nmbd ne "yes") { … … 312 904 exit 0; 313 905 }; 314 sleep($ maxtime);906 sleep($self->{server_maxtime}); 315 907 exit 0; 316 908 } 317 909 910 $ENV{MAKE_TEST_BINARY} = Samba::bindir_path($self, "nmbd"); 318 911 my @optargs = ("-d0"); 319 912 if (defined($ENV{NMBD_OPTIONS})) { 320 913 @optargs = split(/ /, $ENV{NMBD_OPTIONS}); 321 914 } 322 323 $ENV{MAKE_TEST_BINARY} = $self->binpath("nmbd"); 324 325 my @preargs = ($self->binpath("timelimit"), $maxtime); 915 my @preargs = (Samba::bindir_path($self, "timelimit"), $self->{server_maxtime}); 326 916 if(defined($ENV{NMBD_VALGRIND})) { 327 917 @preargs = split(/ /, $ENV{NMBD_VALGRIND}); 328 918 } 329 330 exec(@preargs, $self->binpath("nmbd"), "-F", "--no-process-group", "-S", "-s", $env_vars->{SERVERCONFFILE}, @optargs) or die("Unable to start nmbd: $!"); 331 } 919 my @args = ("-F", "--no-process-group", 920 "-s", $env_vars->{SERVERCONFFILE}, 921 "-l", $env_vars->{LOGDIR}); 922 if (not defined($ENV{NMBD_DONT_LOG_STDOUT})) { 923 push(@args, "--log-stdout"); 924 } 925 926 close($env_vars->{STDIN_PIPE}); 927 open STDIN, ">&", \*STDIN_READER or die "can't dup STDIN_READER to STDIN: $!"; 928 929 exec(@preargs, $ENV{MAKE_TEST_BINARY}, @args, @optargs) 930 or die("Unable to start $ENV{MAKE_TEST_BINARY}: $!"); 931 } 932 $env_vars->{NMBD_TL_PID} = $pid; 332 933 write_pid($env_vars, "nmbd", $pid); 333 934 print "DONE\n"; … … 342 943 SocketWrapper::set_default_iface($env_vars->{SOCKET_WRAPPER_DEFAULT_IFACE}); 343 944 344 $ENV{WINBINDD_SOCKET_DIR} = $env_vars->{WINBINDD_SOCKET_DIR}; 945 $ENV{KRB5_CONFIG} = $env_vars->{KRB5_CONFIG}; 946 $ENV{SELFTEST_WINBINDD_SOCKET_DIR} = $env_vars->{SELFTEST_WINBINDD_SOCKET_DIR}; 345 947 $ENV{NMBD_SOCKET_DIR} = $env_vars->{NMBD_SOCKET_DIR}; 346 948 347 949 $ENV{NSS_WRAPPER_PASSWD} = $env_vars->{NSS_WRAPPER_PASSWD}; 348 950 $ENV{NSS_WRAPPER_GROUP} = $env_vars->{NSS_WRAPPER_GROUP}; 349 $ENV{NSS_WRAPPER_WINBIND_SO_PATH} = $env_vars->{NSS_WRAPPER_WINBIND_SO_PATH}; 951 $ENV{NSS_WRAPPER_HOSTS} = $env_vars->{NSS_WRAPPER_HOSTS}; 952 $ENV{NSS_WRAPPER_HOSTNAME} = $env_vars->{NSS_WRAPPER_HOSTNAME}; 953 $ENV{NSS_WRAPPER_MODULE_SO_PATH} = $env_vars->{NSS_WRAPPER_MODULE_SO_PATH}; 954 $ENV{NSS_WRAPPER_MODULE_FN_PREFIX} = $env_vars->{NSS_WRAPPER_MODULE_FN_PREFIX}; 955 if (defined($env_vars->{RESOLV_WRAPPER_CONF})) { 956 $ENV{RESOLV_WRAPPER_CONF} = $env_vars->{RESOLV_WRAPPER_CONF}; 957 } else { 958 $ENV{RESOLV_WRAPPER_HOSTS} = $env_vars->{RESOLV_WRAPPER_HOSTS}; 959 } 960 $ENV{UID_WRAPPER_ROOT} = "1"; 961 962 $ENV{ENVNAME} = "$ENV{ENVNAME}.winbindd"; 350 963 351 964 if ($winbindd ne "yes") { … … 355 968 exit 0; 356 969 }; 357 sleep($ maxtime);970 sleep($self->{server_maxtime}); 358 971 exit 0; 359 972 } 360 973 974 $ENV{MAKE_TEST_BINARY} = Samba::bindir_path($self, "winbindd"); 361 975 my @optargs = ("-d0"); 362 976 if (defined($ENV{WINBINDD_OPTIONS})) { 363 977 @optargs = split(/ /, $ENV{WINBINDD_OPTIONS}); 364 978 } 365 366 $ENV{MAKE_TEST_BINARY} = $self->binpath("winbindd"); 367 368 my @preargs = ($self->binpath("timelimit"), $maxtime); 979 my @preargs = (Samba::bindir_path($self, "timelimit"), $self->{server_maxtime}); 369 980 if(defined($ENV{WINBINDD_VALGRIND})) { 370 981 @preargs = split(/ /, $ENV{WINBINDD_VALGRIND}); 371 982 } 372 373 exec(@preargs, $self->binpath("winbindd"), "-F", "--no-process-group", "-s", $env_vars->{SERVERCONFFILE}, @optargs) or die("Unable to start winbindd: $!"); 374 } 983 my @args = ("-F", "--no-process-group", 984 "-s", $env_vars->{SERVERCONFFILE}, 985 "-l", $env_vars->{LOGDIR}); 986 if (not defined($ENV{WINBINDD_DONT_LOG_STDOUT})) { 987 push(@args, "--stdout"); 988 } 989 990 close($env_vars->{STDIN_PIPE}); 991 open STDIN, ">&", \*STDIN_READER or die "can't dup STDIN_READER to STDIN: $!"; 992 993 exec(@preargs, $ENV{MAKE_TEST_BINARY}, @args, @optargs) 994 or die("Unable to start $ENV{MAKE_TEST_BINARY}: $!"); 995 } 996 $env_vars->{WINBINDD_TL_PID} = $pid; 375 997 write_pid($env_vars, "winbindd", $pid); 376 998 print "DONE\n"; … … 385 1007 SocketWrapper::set_default_iface($env_vars->{SOCKET_WRAPPER_DEFAULT_IFACE}); 386 1008 387 $ENV{WINBINDD_SOCKET_DIR} = $env_vars->{WINBINDD_SOCKET_DIR}; 1009 $ENV{KRB5_CONFIG} = $env_vars->{KRB5_CONFIG}; 1010 $ENV{SELFTEST_WINBINDD_SOCKET_DIR} = $env_vars->{SELFTEST_WINBINDD_SOCKET_DIR}; 388 1011 $ENV{NMBD_SOCKET_DIR} = $env_vars->{NMBD_SOCKET_DIR}; 389 1012 390 1013 $ENV{NSS_WRAPPER_PASSWD} = $env_vars->{NSS_WRAPPER_PASSWD}; 391 1014 $ENV{NSS_WRAPPER_GROUP} = $env_vars->{NSS_WRAPPER_GROUP}; 392 $ENV{NSS_WRAPPER_WINBIND_SO_PATH} = $env_vars->{NSS_WRAPPER_WINBIND_SO_PATH}; 1015 $ENV{NSS_WRAPPER_HOSTS} = $env_vars->{NSS_WRAPPER_HOSTS}; 1016 $ENV{NSS_WRAPPER_HOSTNAME} = $env_vars->{NSS_WRAPPER_HOSTNAME}; 1017 $ENV{NSS_WRAPPER_MODULE_SO_PATH} = $env_vars->{NSS_WRAPPER_MODULE_SO_PATH}; 1018 $ENV{NSS_WRAPPER_MODULE_FN_PREFIX} = $env_vars->{NSS_WRAPPER_MODULE_FN_PREFIX}; 1019 if (defined($env_vars->{RESOLV_WRAPPER_CONF})) { 1020 $ENV{RESOLV_WRAPPER_CONF} = $env_vars->{RESOLV_WRAPPER_CONF}; 1021 } else { 1022 $ENV{RESOLV_WRAPPER_HOSTS} = $env_vars->{RESOLV_WRAPPER_HOSTS}; 1023 } 1024 $ENV{UID_WRAPPER_ROOT} = "1"; 1025 1026 $ENV{ENVNAME} = "$ENV{ENVNAME}.smbd"; 393 1027 394 1028 if ($smbd ne "yes") { … … 398 1032 exit 0; 399 1033 }; 400 sleep($ maxtime);1034 sleep($self->{server_maxtime}); 401 1035 exit 0; 402 1036 } 403 1037 404 $ENV{MAKE_TEST_BINARY} = $self->binpath("smbd");1038 $ENV{MAKE_TEST_BINARY} = Samba::bindir_path($self, "smbd"); 405 1039 my @optargs = ("-d0"); 406 1040 if (defined($ENV{SMBD_OPTIONS})) { 407 1041 @optargs = split(/ /, $ENV{SMBD_OPTIONS}); 408 1042 } 409 my @preargs = ( $self->binpath("timelimit"), $maxtime);1043 my @preargs = (Samba::bindir_path($self, "timelimit"), $self->{server_maxtime}); 410 1044 if(defined($ENV{SMBD_VALGRIND})) { 411 1045 @preargs = split(/ /,$ENV{SMBD_VALGRIND}); 412 1046 } 413 exec(@preargs, $self->binpath("smbd"), "-F", "--no-process-group", "-s", $env_vars->{SERVERCONFFILE}, @optargs) or die("Unable to start smbd: $!"); 414 } 1047 my @args = ("-F", "--no-process-group", 1048 "-s", $env_vars->{SERVERCONFFILE}, 1049 "-l", $env_vars->{LOGDIR}); 1050 if (not defined($ENV{SMBD_DONT_LOG_STDOUT})) { 1051 push(@args, "--log-stdout"); 1052 } 1053 1054 close($env_vars->{STDIN_PIPE}); 1055 open STDIN, ">&", \*STDIN_READER or die "can't dup STDIN_READER to STDIN: $!"; 1056 1057 exec(@preargs, $ENV{MAKE_TEST_BINARY}, @args, @optargs) 1058 or die("Unable to start $ENV{MAKE_TEST_BINARY}: $!"); 1059 } 1060 $env_vars->{SMBD_TL_PID} = $pid; 415 1061 write_pid($env_vars, "smbd", $pid); 416 1062 print "DONE\n"; 417 1063 418 return 0; 419 } 420 421 sub provision($$$$$$) 1064 close(STDIN_READER); 1065 1066 return $self->wait_for_start($env_vars, $nmbd, $winbindd, $smbd); 1067 } 1068 1069 sub createuser($$$$) 422 1070 { 423 my ($self, $prefix, $server, $swiface, $password, $extra_options) = @_; 1071 my ($self, $username, $password, $conffile) = @_; 1072 my $cmd = "UID_WRAPPER_ROOT=1 " . Samba::bindir_path($self, "smbpasswd")." -c $conffile -L -s -a $username > /dev/null"; 1073 unless (open(PWD, "|$cmd")) { 1074 warn("Unable to set password for $username account\n$cmd"); 1075 return undef; 1076 } 1077 print PWD "$password\n$password\n"; 1078 unless (close(PWD)) { 1079 warn("Unable to set password for $username account\n$cmd"); 1080 return undef; 1081 } 1082 print "DONE\n"; 1083 } 1084 1085 sub provision($$$$$$$$) 1086 { 1087 my ($self, $prefix, $server, $password, $extra_options, $dc_server_ip, $dc_server_ipv6, $no_delete_prefix) = @_; 424 1088 425 1089 ## … … 427 1091 ## 428 1092 1093 my $swiface = Samba::get_interface($server); 429 1094 my %ret = (); 430 1095 my $server_ip = "127.0.0.$swiface"; 1096 my $server_ipv6 = sprintf("fd00:0000:0000:0000:0000:0000:5357:5f%02x", $swiface); 431 1097 my $domain = "SAMBA-TEST"; 432 1098 … … 439 1105 my $prefix_abs = abs_path($prefix); 440 1106 my $bindir_abs = abs_path($self->{bindir}); 441 my $vfs_modulesdir_abs = ($ENV{VFSLIBDIR} or $bindir_abs);442 1107 443 1108 my @dirs = (); … … 481 1146 my $msdfs_deeppath="$msdfs_shrdir/deeppath"; 482 1147 push(@dirs,$msdfs_deeppath); 1148 1149 my $badnames_shrdir="$shrdir/badnames"; 1150 push(@dirs,$badnames_shrdir); 1151 1152 my $lease1_shrdir="$shrdir/SMB2_10"; 1153 push(@dirs,$lease1_shrdir); 1154 1155 my $lease2_shrdir="$shrdir/SMB3_00"; 1156 push(@dirs,$lease2_shrdir); 1157 1158 my $manglenames_shrdir="$shrdir/manglenames"; 1159 push(@dirs,$manglenames_shrdir); 1160 1161 my $widelinks_shrdir="$shrdir/widelinks"; 1162 push(@dirs,$widelinks_shrdir); 1163 1164 my $widelinks_linkdir="$shrdir/widelinks_foo"; 1165 push(@dirs,$widelinks_linkdir); 1166 1167 my $shadow_tstdir="$shrdir/shadow"; 1168 push(@dirs,$shadow_tstdir); 1169 my $shadow_mntdir="$shadow_tstdir/mount"; 1170 push(@dirs,$shadow_mntdir); 1171 my $shadow_basedir="$shadow_mntdir/base"; 1172 push(@dirs,$shadow_basedir); 1173 my $shadow_shrdir="$shadow_basedir/share"; 1174 push(@dirs,$shadow_shrdir); 483 1175 484 1176 # this gets autocreated by winbindd … … 497 1189 mkdir($prefix_abs, 0777); 498 1190 print "CREATE TEST ENVIRONMENT IN '$prefix'..."; 499 system("rm -rf $prefix_abs/*"); 1191 if (not defined($no_delete_prefix) or not $no_delete_prefix) { 1192 system("rm -rf $prefix_abs/*"); 1193 } 500 1194 mkdir($_, 0777) foreach(@dirs); 1195 1196 my $fs_specific_conf = $self->get_fs_specific_conf($shrdir); 1197 1198 ## 1199 ## lockdir and piddir must be 0755 1200 ## 1201 chmod 0755, $lockdir; 1202 chmod 0755, $piddir; 1203 501 1204 502 1205 ## … … 506 1209 chmod 0755, $ro_shrdir; 507 1210 my $unreadable_file = "$ro_shrdir/unreadable_file"; 508 open(UNREADABLE_FILE, ">$unreadable_file") or die("Unable to open $unreadable_file"); 1211 unless (open(UNREADABLE_FILE, ">$unreadable_file")) { 1212 warn("Unable to open $unreadable_file"); 1213 return undef; 1214 } 509 1215 close(UNREADABLE_FILE); 510 1216 chmod 0600, $unreadable_file; 511 1217 512 1218 my $msdfs_target = "$ro_shrdir/msdfs-target"; 513 open(MSDFS_TARGET, ">$msdfs_target") or die("Unable to open $msdfs_target"); 1219 unless (open(MSDFS_TARGET, ">$msdfs_target")) { 1220 warn("Unable to open $msdfs_target"); 1221 return undef; 1222 } 514 1223 close(MSDFS_TARGET); 515 1224 chmod 0666, $msdfs_target; 516 symlink "msdfs:$server_ip\\ro-tmp", "$msdfs_shrdir/msdfs-src1"; 517 symlink "msdfs:$server_ip\\ro-tmp", "$msdfs_shrdir/deeppath/msdfs-src2"; 1225 symlink "msdfs:$server_ip\\ro-tmp,$server_ipv6\\ro-tmp", 1226 "$msdfs_shrdir/msdfs-src1"; 1227 symlink "msdfs:$server_ipv6\\ro-tmp", "$msdfs_shrdir/deeppath/msdfs-src2"; 1228 1229 ## 1230 ## create bad names in $badnames_shrdir 1231 ## 1232 ## (An invalid name, would be mangled to 8.3). 1233 my $badname_target = "$badnames_shrdir/\340|\231\216\377\177"; 1234 unless (open(BADNAME_TARGET, ">$badname_target")) { 1235 warn("Unable to open $badname_target"); 1236 return undef; 1237 } 1238 close(BADNAME_TARGET); 1239 chmod 0666, $badname_target; 1240 1241 ## (A bad name, would not be mangled to 8.3). 1242 my $badname_target = "$badnames_shrdir/\240\276\346\327\377\177"; 1243 unless (open(BADNAME_TARGET, ">$badname_target")) { 1244 warn("Unable to open $badname_target"); 1245 return undef; 1246 } 1247 close(BADNAME_TARGET); 1248 chmod 0666, $badname_target; 1249 1250 ## (A bad good name). 1251 my $badname_target = "$badnames_shrdir/blank.txt"; 1252 unless (open(BADNAME_TARGET, ">$badname_target")) { 1253 warn("Unable to open $badname_target"); 1254 return undef; 1255 } 1256 close(BADNAME_TARGET); 1257 chmod 0666, $badname_target; 1258 1259 ## 1260 ## create mangleable directory names in $manglenames_shrdir 1261 ## 1262 my $manglename_target = "$manglenames_shrdir/foo:bar"; 1263 mkdir($manglename_target, 0777); 1264 1265 ## 1266 ## create symlinks for widelinks tests. 1267 ## 1268 my $widelinks_target = "$widelinks_linkdir/target"; 1269 unless (open(WIDELINKS_TARGET, ">$widelinks_target")) { 1270 warn("Unable to open $widelinks_target"); 1271 return undef; 1272 } 1273 close(WIDELINKS_TARGET); 1274 chmod 0666, $widelinks_target; 1275 ## 1276 ## This link should get ACCESS_DENIED 1277 ## 1278 symlink "$widelinks_target", "$widelinks_shrdir/source"; 1279 ## 1280 ## This link should be allowed 1281 ## 1282 symlink "$widelinks_shrdir", "$widelinks_shrdir/dot"; 518 1283 519 1284 my $conffile="$libdir/server.conf"; 1285 my $dfqconffile="$libdir/dfq.conf"; 520 1286 521 1287 my $nss_wrapper_pl = "$ENV{PERL} $self->{srcdir}/lib/nss_wrapper/nss_wrapper.pl"; 522 1288 my $nss_wrapper_passwd = "$privatedir/passwd"; 523 1289 my $nss_wrapper_group = "$privatedir/group"; 1290 my $nss_wrapper_hosts = "$ENV{SELFTEST_PREFIX}/hosts"; 1291 my $resolv_conf = "$privatedir/resolv.conf"; 1292 my $dns_host_file = "$ENV{SELFTEST_PREFIX}/dns_host_file"; 524 1293 525 1294 my $mod_printer_pl = "$ENV{PERL} $self->{srcdir}/source3/script/tests/printing/modprinter.pl"; 526 1295 1296 my $fake_snap_pl = "$ENV{PERL} $self->{srcdir}/source3/script/tests/fake_snap.pl"; 1297 527 1298 my @eventlog_list = ("dns server", "application"); 528 1299 … … 532 1303 533 1304 my ($max_uid, $max_gid); 534 my ($uid_nobody, $uid_root); 535 my ($gid_nobody, $gid_nogroup, $gid_root, $gid_domusers); 536 537 if ($unix_uid < 0xffff - 2) { 1305 my ($uid_nobody, $uid_root, $uid_pdbtest, $uid_pdbtest2, $uid_userdup); 1306 my ($uid_pdbtest_wkn); 1307 my ($uid_smbget); 1308 my ($uid_force_user); 1309 my ($gid_nobody, $gid_nogroup, $gid_root, $gid_domusers, $gid_domadmins); 1310 my ($gid_userdup, $gid_everyone); 1311 my ($gid_force_user); 1312 1313 if ($unix_uid < 0xffff - 7) { 538 1314 $max_uid = 0xffff; 539 1315 } else { … … 543 1319 $uid_root = $max_uid - 1; 544 1320 $uid_nobody = $max_uid - 2; 545 546 if ($unix_gids[0] < 0xffff - 3) { 1321 $uid_pdbtest = $max_uid - 3; 1322 $uid_pdbtest2 = $max_uid - 4; 1323 $uid_userdup = $max_uid - 5; 1324 $uid_pdbtest_wkn = $max_uid - 6; 1325 $uid_force_user = $max_uid - 7; 1326 $uid_smbget = $max_uid - 8; 1327 1328 if ($unix_gids[0] < 0xffff - 8) { 547 1329 $max_gid = 0xffff; 548 1330 } else { … … 554 1336 $gid_root = $max_gid - 3; 555 1337 $gid_domusers = $max_gid - 4; 1338 $gid_domadmins = $max_gid - 5; 1339 $gid_userdup = $max_gid - 6; 1340 $gid_everyone = $max_gid - 7; 1341 $gid_force_user = $max_gid - 8; 556 1342 557 1343 ## … … 559 1345 ## 560 1346 561 open(CONF, ">$conffile") or die("Unable to open $conffile"); 1347 unless (open(CONF, ">$conffile")) { 1348 warn("Unable to open $conffile"); 1349 return undef; 1350 } 562 1351 print CONF " 563 1352 [global] 564 1353 netbios name = $server 565 interfaces = $server_ip/8 1354 interfaces = $server_ip/8 $server_ipv6/64 566 1355 bind interfaces only = yes 567 panic action = $self->{srcdir}/selftest/gdb_backtrace %d %\$(MAKE_TEST_BINARY) 1356 panic action = cd $self->{srcdir} && $self->{srcdir}/selftest/gdb_backtrace %d %\$(MAKE_TEST_BINARY) 1357 smbd:suicide mode = yes 568 1358 569 1359 workgroup = $domain … … 573 1363 lock directory = $lockdir 574 1364 log file = $logdir/log.\%m 575 log level = 01365 log level = 1 576 1366 debug pid = yes 577 578 name resolve order = bcast 1367 max log size = 0 579 1368 580 1369 state directory = $lockdir … … 600 1389 kernel oplocks = no 601 1390 kernel change notify = no 602 603 syslog = no 1391 smb2 leases = yes 1392 1393 logging = file 604 1394 printing = bsd 605 1395 printcap name = /dev/null 606 1396 607 winbindd :socket dir= $wbsockdir1397 winbindd socket directory = $wbsockdir 608 1398 nmbd:socket dir = $nmbdsockdir 609 1399 idmap config * : range = 100000-200000 610 1400 winbind enum users = yes 611 1401 winbind enum groups = yes 1402 winbind separator = / 612 1403 613 1404 # min receivefile size = 4000 614 1405 615 max protocol = SMB2616 1406 read only = no 617 1407 server signing = auto 618 1408 619 1409 smbd:sharedelay = 100000 620 #smbd:writetimeupdatedelay = 5000001410 smbd:writetimeupdatedelay = 500000 621 1411 map hidden = no 622 1412 map system = no … … 624 1414 store dos attributes = yes 625 1415 create mask = 755 626 vfs objects = $vfs_modulesdir_abs/xattr_tdb.so $vfs_modulesdir_abs/streams_depot.so 1416 dos filemode = yes 1417 strict rename = yes 1418 strict sync = yes 1419 vfs objects = acl_xattr fake_acls xattr_tdb streams_depot 627 1420 628 1421 printing = vlp … … 635 1428 queue resume command = $bindir_abs/vlp tdbfile=$lockdir/vlp.tdb queueresume %p 636 1429 lpq cache time = 0 637 638 ncalrpc dir = $lockdir/ncalrpc 639 rpc_server:epmapper = embedded 1430 print notify backchannel = yes 1431 1432 ncalrpc dir = $prefix_abs/ncalrpc 1433 1434 # The samba3.blackbox.smbclient_s3 test uses this to test that 1435 # sending messages works, and that the %m sub works. 1436 message command = mv %s $shrdir/message.%m 1437 1438 # fsrvp server requires registry shares 1439 registry shares = yes 1440 1441 # Used by RPC SRVSVC tests 1442 add share command = $bindir_abs/smbaddshare 1443 change share command = $bindir_abs/smbchangeshare 1444 delete share command = $bindir_abs/smbdeleteshare 1445 1446 # fruit:copyfile is a global option 1447 fruit:copyfile = yes 1448 1449 #this does not mean that we use non-secure test env, 1450 #it just means we ALLOW one to be configured. 1451 allow insecure wide links = yes 640 1452 641 1453 # Begin extra options … … 653 1465 [tmp] 654 1466 path = $shrdir 655 comment = smb username is [%U] 656 vfs objects = $vfs_modulesdir_abs/dirsort.so 1467 comment = smb username is [%U] 1468 [tmpsort] 1469 path = $shrdir 1470 comment = Load dirsort module 1471 vfs objects = dirsort acl_xattr fake_acls xattr_tdb streams_depot 1472 [tmpenc] 1473 path = $shrdir 1474 comment = encrypt smb username is [%U] 1475 smb encrypt = required 1476 vfs objects = dirsort 657 1477 [tmpguest] 658 1478 path = $shrdir … … 666 1486 force user = $unix_name 667 1487 guest ok = yes 1488 [forceuser_unixonly] 1489 comment = force a user with unix user SID and group SID 1490 path = $shrdir 1491 force user = pdbtest 1492 guest ok = yes 1493 [forceuser_wkngroup] 1494 comment = force a user with well-known group SID 1495 path = $shrdir 1496 force user = pdbtest_wkn 1497 guest ok = yes 668 1498 [forcegroup] 669 1499 path = $shrdir … … 673 1503 path = $ro_shrdir 674 1504 guest ok = yes 1505 [write-list-tmp] 1506 path = $shrdir 1507 read only = yes 1508 write list = $unix_name 1509 [valid-users-tmp] 1510 path = $shrdir 1511 valid users = $unix_name 675 1512 [msdfs-share] 676 1513 path = $msdfs_shrdir 677 1514 msdfs root = yes 1515 msdfs shuffle referrals = yes 678 1516 guest ok = yes 679 1517 [hideunread] … … 686 1524 copy = tmp 687 1525 hide unwriteable files = yes 1526 [durable] 1527 copy = tmp 1528 kernel share modes = no 1529 kernel oplocks = no 1530 posix locking = no 1531 [fs_specific] 1532 copy = tmp 1533 $fs_specific_conf 688 1534 [print1] 689 1535 copy = tmp … … 694 1540 [print3] 695 1541 copy = print1 1542 default devmode = no 696 1543 [lp] 697 1544 copy = print1 1545 1546 [nfs4acl_simple] 1547 path = $shrdir 1548 comment = smb username is [%U] 1549 nfs4:mode = simple 1550 vfs objects = nfs4acl_xattr xattr_tdb 1551 1552 [nfs4acl_special] 1553 path = $shrdir 1554 comment = smb username is [%U] 1555 nfs4:mode = special 1556 vfs objects = nfs4acl_xattr xattr_tdb 1557 1558 [xcopy_share] 1559 path = $shrdir 1560 comment = smb username is [%U] 1561 create mask = 777 1562 force create mode = 777 1563 [posix_share] 1564 path = $shrdir 1565 comment = smb username is [%U] 1566 create mask = 0777 1567 force create mode = 0 1568 directory mask = 0777 1569 force directory mode = 0 1570 vfs objects = xattr_tdb 1571 [aio] 1572 copy = tmp 1573 aio read size = 1 1574 aio write size = 1 1575 698 1576 [print\$] 699 1577 copy = tmp 1578 1579 [vfs_fruit] 1580 path = $shrdir 1581 vfs objects = catia fruit streams_xattr acl_xattr 1582 ea support = yes 1583 fruit:ressource = file 1584 fruit:metadata = netatalk 1585 fruit:locking = netatalk 1586 fruit:encoding = native 1587 1588 [badname-tmp] 1589 path = $badnames_shrdir 1590 guest ok = yes 1591 1592 [manglenames_share] 1593 path = $manglenames_shrdir 1594 guest ok = yes 1595 1596 [dynamic_share] 1597 path = $shrdir/%R 1598 guest ok = yes 1599 1600 [widelinks_share] 1601 path = $widelinks_shrdir 1602 wide links = no 1603 guest ok = yes 1604 1605 [fsrvp_share] 1606 path = $shrdir 1607 comment = fake shapshots using rsync 1608 vfs objects = shell_snap shadow_copy2 1609 shell_snap:check path command = $fake_snap_pl --check 1610 shell_snap:create command = $fake_snap_pl --create 1611 shell_snap:delete command = $fake_snap_pl --delete 1612 # a relative path here fails, the snapshot dir is no longer found 1613 shadow:snapdir = $shrdir/.snapshots 1614 1615 [shadow1] 1616 path = $shadow_shrdir 1617 comment = previous versions snapshots under mount point 1618 vfs objects = shadow_copy2 1619 shadow:mountpoint = $shadow_mntdir 1620 1621 [shadow2] 1622 path = $shadow_shrdir 1623 comment = previous versions snapshots outside mount point 1624 vfs objects = shadow_copy2 1625 shadow:mountpoint = $shadow_mntdir 1626 shadow:snapdir = $shadow_tstdir/.snapshots 1627 1628 [shadow3] 1629 path = $shadow_shrdir 1630 comment = previous versions with subvolume snapshots, snapshots under base dir 1631 vfs objects = shadow_copy2 1632 shadow:mountpoint = $shadow_mntdir 1633 shadow:basedir = $shadow_basedir 1634 shadow:snapdir = $shadow_basedir/.snapshots 1635 1636 [shadow4] 1637 path = $shadow_shrdir 1638 comment = previous versions with subvolume snapshots, snapshots outside mount point 1639 vfs objects = shadow_copy2 1640 shadow:mountpoint = $shadow_mntdir 1641 shadow:basedir = $shadow_basedir 1642 shadow:snapdir = $shadow_tstdir/.snapshots 1643 1644 [shadow5] 1645 path = $shadow_shrdir 1646 comment = previous versions at volume root snapshots under mount point 1647 vfs objects = shadow_copy2 1648 shadow:mountpoint = $shadow_shrdir 1649 1650 [shadow6] 1651 path = $shadow_shrdir 1652 comment = previous versions at volume root snapshots outside mount point 1653 vfs objects = shadow_copy2 1654 shadow:mountpoint = $shadow_shrdir 1655 shadow:snapdir = $shadow_tstdir/.snapshots 1656 1657 [shadow7] 1658 path = $shadow_shrdir 1659 comment = previous versions snapshots everywhere 1660 vfs objects = shadow_copy2 1661 shadow:mountpoint = $shadow_mntdir 1662 shadow:snapdirseverywhere = yes 1663 1664 [shadow8] 1665 path = $shadow_shrdir 1666 comment = previous versions using snapsharepath 1667 vfs objects = shadow_copy2 1668 shadow:mountpoint = $shadow_mntdir 1669 shadow:snapdir = $shadow_tstdir/.snapshots 1670 shadow:snapsharepath = share 1671 1672 [shadow_wl] 1673 path = $shadow_shrdir 1674 comment = previous versions with wide links allowed 1675 vfs objects = shadow_copy2 1676 shadow:mountpoint = $shadow_mntdir 1677 wide links = yes 1678 [dfq] 1679 path = $shrdir/dfree 1680 vfs objects = fake_dfq 1681 admin users = $unix_name 1682 include = $dfqconffile 700 1683 "; 701 1684 close(CONF); 702 1685 1686 unless (open(DFQCONF, ">$dfqconffile")) { 1687 warn("Unable to open $dfqconffile"); 1688 return undef; 1689 } 1690 close(DFQCONF); 1691 703 1692 ## 704 1693 ## create a test account 705 1694 ## 706 1695 707 open(PASSWD, ">$nss_wrapper_passwd") or die("Unable to open $nss_wrapper_passwd"); 1696 unless (open(PASSWD, ">$nss_wrapper_passwd")) { 1697 warn("Unable to open $nss_wrapper_passwd"); 1698 return undef; 1699 } 708 1700 print PASSWD "nobody:x:$uid_nobody:$gid_nobody:nobody gecos:$prefix_abs:/bin/false 709 1701 $unix_name:x:$unix_uid:$unix_gids[0]:$unix_name gecos:$prefix_abs:/bin/false 1702 pdbtest:x:$uid_pdbtest:$gid_nogroup:pdbtest gecos:$prefix_abs:/bin/false 1703 pdbtest2:x:$uid_pdbtest2:$gid_nogroup:pdbtest gecos:$prefix_abs:/bin/false 1704 userdup:x:$uid_userdup:$gid_userdup:userdup gecos:$prefix_abs:/bin/false 1705 pdbtest_wkn:x:$uid_pdbtest_wkn:$gid_everyone:pdbtest_wkn gecos:$prefix_abs:/bin/false 1706 force_user:x:$uid_force_user:$gid_force_user:force user gecos:$prefix_abs:/bin/false 1707 smbget_user:x:$uid_smbget:$gid_domusers:smbget_user gecos:$prefix_abs:/bin/false 710 1708 "; 711 1709 if ($unix_uid != 0) { 712 print PASSWD "root:x:$uid_root:$gid_root:root gecos:$prefix_abs:/bin/false"; 1710 print PASSWD "root:x:$uid_root:$gid_root:root gecos:$prefix_abs:/bin/false 1711 "; 713 1712 } 714 1713 close(PASSWD); 715 1714 716 open(GROUP, ">$nss_wrapper_group") or die("Unable to open $nss_wrapper_group"); 1715 unless (open(GROUP, ">$nss_wrapper_group")) { 1716 warn("Unable to open $nss_wrapper_group"); 1717 return undef; 1718 } 717 1719 print GROUP "nobody:x:$gid_nobody: 718 1720 nogroup:x:$gid_nogroup:nobody 719 1721 $unix_name-group:x:$unix_gids[0]: 720 1722 domusers:X:$gid_domusers: 1723 domadmins:X:$gid_domadmins: 1724 userdup:x:$gid_userdup:$unix_name 1725 everyone:x:$gid_everyone: 1726 force_user:x:$gid_force_user: 721 1727 "; 722 1728 if ($unix_gids[0] != 0) { 723 print GROUP "root:x:$gid_root:"; 1729 print GROUP "root:x:$gid_root: 1730 "; 724 1731 } 725 1732 726 1733 close(GROUP); 1734 1735 ## hosts 1736 my $hostname = lc($server); 1737 unless (open(HOSTS, ">>$nss_wrapper_hosts")) { 1738 warn("Unable to open $nss_wrapper_hosts"); 1739 return undef; 1740 } 1741 print HOSTS "${server_ip} ${hostname}.samba.example.com ${hostname}\n"; 1742 print HOSTS "${server_ipv6} ${hostname}.samba.example.com ${hostname}\n"; 1743 close(HOSTS); 1744 1745 ## hosts 1746 unless (open(RESOLV_CONF, ">$resolv_conf")) { 1747 warn("Unable to open $resolv_conf"); 1748 return undef; 1749 } 1750 if (defined($dc_server_ip) or defined($dc_server_ipv6)) { 1751 if (defined($dc_server_ip)) { 1752 print RESOLV_CONF "nameserver $dc_server_ip\n"; 1753 } 1754 if (defined($dc_server_ipv6)) { 1755 print RESOLV_CONF "nameserver $dc_server_ipv6\n"; 1756 } 1757 } else { 1758 print RESOLV_CONF "nameserver ${server_ip}\n"; 1759 print RESOLV_CONF "nameserver ${server_ipv6}\n"; 1760 } 1761 close(RESOLV_CONF); 727 1762 728 1763 foreach my $evlog (@eventlog_list) { … … 734 1769 $ENV{NSS_WRAPPER_PASSWD} = $nss_wrapper_passwd; 735 1770 $ENV{NSS_WRAPPER_GROUP} = $nss_wrapper_group; 736 737 open(PWD, "|".$self->binpath("smbpasswd")." -c $conffile -L -s -a $unix_name >/dev/null"); 738 print PWD "$password\n$password\n"; 739 close(PWD) or die("Unable to set password for test account"); 740 741 print "DONE\n"; 1771 $ENV{NSS_WRAPPER_HOSTS} = $nss_wrapper_hosts; 1772 $ENV{NSS_WRAPPER_HOSTNAME} = "${hostname}.samba.example.com"; 1773 if ($ENV{SAMBA_DNS_FAKING}) { 1774 $ENV{RESOLV_WRAPPER_CONF} = $resolv_conf; 1775 } else { 1776 $ENV{RESOLV_WRAPPER_HOSTS} = $dns_host_file; 1777 } 1778 1779 createuser($self, $unix_name, $password, $conffile) || die("Unable to create user"); 1780 createuser($self, "force_user", $password, $conffile) || die("Unable to create force_user"); 1781 createuser($self, "smbget_user", $password, $conffile) || die("Unable to create smbget_user"); 1782 1783 open(DNS_UPDATE_LIST, ">$prefix/dns_update_list") or die("Unable to open $$prefix/dns_update_list"); 1784 print DNS_UPDATE_LIST "A $server. $server_ip\n"; 1785 print DNS_UPDATE_LIST "AAAA $server. $server_ipv6\n"; 1786 close(DNS_UPDATE_LIST); 742 1787 743 1788 $ret{SERVER_IP} = $server_ip; 1789 $ret{SERVER_IPV6} = $server_ipv6; 744 1790 $ret{NMBD_TEST_LOG} = "$prefix/nmbd_test.log"; 745 1791 $ret{NMBD_TEST_LOG_POS} = 0; … … 757 1803 $ret{PASSWORD} = $password; 758 1804 $ret{PIDDIR} = $piddir; 759 $ret{ WINBINDD_SOCKET_DIR} = $wbsockdir;1805 $ret{SELFTEST_WINBINDD_SOCKET_DIR} = $wbsockdir; 760 1806 $ret{WINBINDD_PRIV_PIPE_DIR} = $wbsockprivdir; 761 1807 $ret{NMBD_SOCKET_DIR} = $nmbdsockdir; … … 763 1809 $ret{NSS_WRAPPER_PASSWD} = $nss_wrapper_passwd; 764 1810 $ret{NSS_WRAPPER_GROUP} = $nss_wrapper_group; 765 $ret{NSS_WRAPPER_WINBIND_SO_PATH} = $ENV{NSS_WRAPPER_WINBIND_SO_PATH}; 1811 $ret{NSS_WRAPPER_HOSTS} = $nss_wrapper_hosts; 1812 $ret{NSS_WRAPPER_HOSTNAME} = "${hostname}.samba.example.com"; 1813 $ret{NSS_WRAPPER_MODULE_SO_PATH} = Samba::nss_wrapper_winbind_so_path($self); 1814 $ret{NSS_WRAPPER_MODULE_FN_PREFIX} = "winbind"; 1815 if ($ENV{SAMBA_DNS_FAKING}) { 1816 $ret{RESOLV_WRAPPER_HOSTS} = $dns_host_file; 1817 } else { 1818 $ret{RESOLV_WRAPPER_CONF} = $resolv_conf; 1819 } 766 1820 $ret{LOCAL_PATH} = "$shrdir"; 1821 $ret{LOGDIR} = $logdir; 1822 1823 # 1824 # Avoid hitting system krb5.conf - 1825 # An env that needs Kerberos will reset this to the real 1826 # value. 1827 # 1828 $ret{KRB5_CONFIG} = abs_path($prefix) . "/no_krb5.conf"; 767 1829 768 1830 return \%ret; 769 1831 } 770 1832 771 sub wait_for_start($$ )1833 sub wait_for_start($$$$$) 772 1834 { 773 my ($self, $envvars) = @_; 774 775 # give time for nbt server to register its names 776 print "delaying for nbt name registration\n"; 777 sleep(10); 778 # This will return quickly when things are up, but be slow if we need to wait for (eg) SSL init 779 system($self->binpath("nmblookup") ." $envvars->{CONFIGURATION} -U $envvars->{SERVER_IP} __SAMBA__"); 780 system($self->binpath("nmblookup") ." $envvars->{CONFIGURATION} __SAMBA__"); 781 system($self->binpath("nmblookup") ." $envvars->{CONFIGURATION} -U 127.255.255.255 __SAMBA__"); 782 system($self->binpath("nmblookup") ." $envvars->{CONFIGURATION} -U $envvars->{SERVER_IP} $envvars->{SERVER}"); 783 system($self->binpath("nmblookup") ." $envvars->{CONFIGURATION} $envvars->{SERVER}"); 784 # make sure smbd is also up set 785 print "wait for smbd\n"; 786 system($self->binpath("smbclient") ." $envvars->{CONFIGURATION} -L $envvars->{SERVER_IP} -U% -p 139 | head -2"); 787 system($self->binpath("smbclient") ." $envvars->{CONFIGURATION} -L $envvars->{SERVER_IP} -U% -p 139 | head -2"); 1835 my ($self, $envvars, $nmbd, $winbindd, $smbd) = @_; 1836 my $ret; 1837 1838 if ($nmbd eq "yes") { 1839 my $count = 0; 1840 1841 # give time for nbt server to register its names 1842 print "checking for nmbd\n"; 1843 1844 # This will return quickly when things are up, but be slow if we need to wait for (eg) SSL init 1845 my $nmblookup = Samba::bindir_path($self, "nmblookup"); 1846 1847 do { 1848 $ret = system("$nmblookup $envvars->{CONFIGURATION} $envvars->{SERVER}"); 1849 if ($ret != 0) { 1850 sleep(1); 1851 } else { 1852 system("$nmblookup $envvars->{CONFIGURATION} -U $envvars->{SERVER_IP} __SAMBA__"); 1853 system("$nmblookup $envvars->{CONFIGURATION} __SAMBA__"); 1854 system("$nmblookup $envvars->{CONFIGURATION} -U 127.255.255.255 __SAMBA__"); 1855 system("$nmblookup $envvars->{CONFIGURATION} -U $envvars->{SERVER_IP} $envvars->{SERVER}"); 1856 } 1857 $count++; 1858 } while ($ret != 0 && $count < 10); 1859 if ($count == 10) { 1860 print "NMBD not reachable after 10 retries\n"; 1861 teardown_env($self, $envvars); 1862 return 0; 1863 } 1864 } 1865 1866 if ($winbindd eq "yes") { 1867 print "checking for winbindd\n"; 1868 my $count = 0; 1869 do { 1870 $ret = system("SELFTEST_WINBINDD_SOCKET_DIR=" . $envvars->{SELFTEST_WINBINDD_SOCKET_DIR} . " " . Samba::bindir_path($self, "wbinfo") . " --ping-dc"); 1871 if ($ret != 0) { 1872 sleep(2); 1873 } 1874 $count++; 1875 } while ($ret != 0 && $count < 10); 1876 if ($count == 10) { 1877 print "WINBINDD not reachable after 20 seconds\n"; 1878 teardown_env($self, $envvars); 1879 return 0; 1880 } 1881 } 1882 1883 if ($smbd eq "yes") { 1884 # make sure smbd is also up set 1885 print "wait for smbd\n"; 1886 1887 my $count = 0; 1888 do { 1889 $ret = system(Samba::bindir_path($self, "smbclient") ." $envvars->{CONFIGURATION} -L $envvars->{SERVER} -U% -p 139"); 1890 if ($ret != 0) { 1891 sleep(2); 1892 } 1893 $count++ 1894 } while ($ret != 0 && $count < 10); 1895 if ($count == 10) { 1896 print "SMBD failed to start up in a reasonable time (20sec)\n"; 1897 teardown_env($self, $envvars); 1898 return 0; 1899 } 1900 } 788 1901 789 1902 # Ensure we have domain users mapped. 790 system($self->binpath("net") ." $envvars->{CONFIGURATION} groupmap add rid=513 unixgroup=domusers type=domain"); 1903 $ret = system(Samba::bindir_path($self, "net") ." $envvars->{CONFIGURATION} groupmap add rid=513 unixgroup=domusers type=domain"); 1904 if ($ret != 0) { 1905 return 1; 1906 } 1907 $ret = system(Samba::bindir_path($self, "net") ." $envvars->{CONFIGURATION} groupmap add rid=512 unixgroup=domadmins type=domain"); 1908 if ($ret != 0) { 1909 return 1; 1910 } 1911 $ret = system(Samba::bindir_path($self, "net") ." $envvars->{CONFIGURATION} groupmap add sid=S-1-1-0 unixgroup=everyone type=builtin"); 1912 if ($ret != 0) { 1913 return 1; 1914 } 1915 1916 if ($winbindd eq "yes") { 1917 # note: creating builtin groups requires winbindd for the 1918 # unix id allocator 1919 $ret = system("SELFTEST_WINBINDD_SOCKET_DIR=" . $envvars->{SELFTEST_WINBINDD_SOCKET_DIR} . " " . Samba::bindir_path($self, "net") ." $envvars->{CONFIGURATION} sam createbuiltingroup Users"); 1920 if ($ret != 0) { 1921 print "Failed to create BUILTIN\\Users group\n"; 1922 return 0; 1923 } 1924 my $count = 0; 1925 do { 1926 system(Samba::bindir_path($self, "net") . " $envvars->{CONFIGURATION} cache flush"); 1927 $ret = system("SELFTEST_WINBINDD_SOCKET_DIR=" . $envvars->{SELFTEST_WINBINDD_SOCKET_DIR} . " " . Samba::bindir_path($self, "wbinfo") . " --sid-to-gid=S-1-5-32-545"); 1928 if ($ret != 0) { 1929 sleep(2); 1930 } 1931 $count++; 1932 } while ($ret != 0 && $count < 10); 1933 if ($count == 10) { 1934 print "WINBINDD not reachable after 20 seconds\n"; 1935 teardown_env($self, $envvars); 1936 return 0; 1937 } 1938 } 791 1939 792 1940 print $self->getlog_env($envvars); 1941 1942 return 1; 793 1943 } 794 1944 -
vendor/current/selftest/target/Samba4.pm
r740 r988 11 11 use POSIX; 12 12 use SocketWrapper; 13 use target::Samba; 14 use target::Samba3; 13 15 14 16 sub new($$$$$) { 15 my ($classname, $bindir, $ldap, $srcdir, $ exeext) = @_;16 $exeext = "" unless defined($exeext); 17 my ($classname, $bindir, $ldap, $srcdir, $server_maxtime) = @_; 18 17 19 my $self = { 18 20 vars => {}, … … 20 22 bindir => $bindir, 21 23 srcdir => $srcdir, 22 exeext => $exeext 24 server_maxtime => $server_maxtime, 25 target3 => new Samba3($bindir, $srcdir, $server_maxtime) 23 26 }; 24 27 bless $self; … … 26 29 } 27 30 28 sub bindir_path($$) {29 my ($self, $path) = @_;30 31 my $valpath = "$self->{bindir}/$path$self->{exeext}";32 33 return $valpath if (-f $valpath);34 return $path;35 }36 37 31 sub scriptdir_path($$) { 38 32 my ($self, $path) = @_; … … 46 40 { 47 41 my $count = 0; 48 my ($self, $env_vars ) = @_;49 my $ldbsearch = $self->bindir_path("ldbsearch");42 my ($self, $env_vars, $STDIN_READER) = @_; 43 my $ldbsearch = Samba::bindir_path($self, "ldbsearch"); 50 44 51 45 my $uri = $env_vars->{LDAP_URI}; … … 57 51 # running slapd in the background means it stays in the same process group, so it can be 58 52 # killed by timelimit 59 if ($self->{ldap} eq "fedora-ds") { 60 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 &"); 61 } elsif ($self->{ldap} eq "openldap") { 62 system("$ENV{OPENLDAP_SLAPD} -d0 -F $env_vars->{SLAPD_CONF_D} -h $uri > $env_vars->{LDAPDIR}/logs 2>&1 &"); 63 } 53 my $pid = fork(); 54 if ($pid == 0) { 55 open STDOUT, ">$env_vars->{LDAPDIR}/logs"; 56 open STDERR, '>&STDOUT'; 57 close($env_vars->{STDIN_PIPE}); 58 open STDIN, ">&", $STDIN_READER or die "can't dup STDIN_READER to STDIN: $!"; 59 60 if ($self->{ldap} eq "fedora-ds") { 61 exec("$ENV{FEDORA_DS_ROOT}/sbin/ns-slapd", "-D", $env_vars->{FEDORA_DS_DIR}, "-d0", "-i", $env_vars->{FEDORA_DS_PIDFILE}); 62 } elsif ($self->{ldap} eq "openldap") { 63 exec($ENV{OPENLDAP_SLAPD}, "-dnone", "-F", $env_vars->{SLAPD_CONF_D}, "-h", $uri); 64 } 65 die("Unable to start slapd: $!"); 66 } 67 $env_vars->{SLAPD_PID} = $pid; 68 sleep(1); 64 69 while (system("$ldbsearch -H $uri -s base -b \"\" supportedLDAPVersion > /dev/null") != 0) { 65 70 $count++; … … 76 81 { 77 82 my ($self, $envvars) = @_; 78 if ($self->{ldap} eq "fedora-ds") { 79 system("$envvars->{LDAPDIR}/slapd-$envvars->{LDAP_INSTANCE}/stop-slapd"); 80 } elsif ($self->{ldap} eq "openldap") { 81 unless (open(IN, "<$envvars->{OPENLDAP_PIDFILE}")) { 82 warn("unable to open slapd pid file: $envvars->{OPENLDAP_PIDFILE}"); 83 return 0; 84 } 85 kill 9, <IN>; 86 close(IN); 87 } 83 kill 9, $envvars->{SLAPD_PID}; 88 84 return 1; 89 85 } … … 91 87 sub check_or_start($$$) 92 88 { 93 my ($self, $env_vars, $max_time) = @_; 94 return 0 if ( -p $env_vars->{SAMBA_TEST_FIFO}); 95 96 unlink($env_vars->{SAMBA_TEST_FIFO}); 97 POSIX::mkfifo($env_vars->{SAMBA_TEST_FIFO}, 0700); 98 unlink($env_vars->{SAMBA_TEST_LOG}); 99 100 my $pwd = `pwd`; 101 print "STARTING SAMBA for $ENV{ENVNAME}\n"; 89 my ($self, $env_vars, $process_model) = @_; 90 my $STDIN_READER; 91 92 my $env_ok = $self->check_env($env_vars); 93 if ($env_ok) { 94 return $env_vars->{SAMBA_PID}; 95 } 96 97 # use a pipe for stdin in the child processes. This allows 98 # those processes to monitor the pipe for EOF to ensure they 99 # exit when the test script exits 100 pipe($STDIN_READER, $env_vars->{STDIN_PIPE}); 101 102 # Start slapd before samba, but with the fifo on stdin 103 if (defined($self->{ldap})) { 104 unless($self->slapd_start($env_vars, $STDIN_READER)) { 105 warn("couldn't start slapd (main run)"); 106 return undef; 107 } 108 } 109 110 print "STARTING SAMBA..."; 102 111 my $pid = fork(); 103 112 if ($pid == 0) { 104 open STDIN, $env_vars->{SAMBA_TEST_FIFO};105 113 # we want out from samba to go to the log file, but also 106 114 # to the users terminal when running 'make test' on the command … … 111 119 SocketWrapper::set_default_iface($env_vars->{SOCKET_WRAPPER_DEFAULT_IFACE}); 112 120 113 my $valgrind = "";114 if (defined($ENV{SAMBA_VALGRIND})) {115 $valgrind = $ENV{SAMBA_VALGRIND};116 }117 118 121 $ENV{KRB5_CONFIG} = $env_vars->{KRB5_CONFIG}; 119 $ENV{WINBINDD_SOCKET_DIR} = $env_vars->{WINBINDD_SOCKET_DIR}; 122 $ENV{SELFTEST_WINBINDD_SOCKET_DIR} = $env_vars->{SELFTEST_WINBINDD_SOCKET_DIR}; 123 $ENV{NMBD_SOCKET_DIR} = $env_vars->{NMBD_SOCKET_DIR}; 120 124 121 125 $ENV{NSS_WRAPPER_PASSWD} = $env_vars->{NSS_WRAPPER_PASSWD}; 122 126 $ENV{NSS_WRAPPER_GROUP} = $env_vars->{NSS_WRAPPER_GROUP}; 127 $ENV{NSS_WRAPPER_HOSTS} = $env_vars->{NSS_WRAPPER_HOSTS}; 128 $ENV{NSS_WRAPPER_MODULE_SO_PATH} = $env_vars->{NSS_WRAPPER_MODULE_SO_PATH}; 129 $ENV{NSS_WRAPPER_MODULE_FN_PREFIX} = $env_vars->{NSS_WRAPPER_MODULE_FN_PREFIX}; 130 131 if (defined($env_vars->{RESOLV_WRAPPER_CONF})) { 132 $ENV{RESOLV_WRAPPER_CONF} = $env_vars->{RESOLV_WRAPPER_CONF}; 133 } else { 134 $ENV{RESOLV_WRAPPER_HOSTS} = $env_vars->{RESOLV_WRAPPER_HOSTS}; 135 } 123 136 124 137 $ENV{UID_WRAPPER} = "1"; 125 126 # Start slapd before samba, but with the fifo on stdin 127 if (defined($self->{ldap})) { 128 unless($self->slapd_start($env_vars)) { 129 warn("couldn't start slapd (main run)"); 130 return undef; 131 } 132 } 133 134 my $optarg = ""; 135 if (defined($max_time)) { 136 $optarg = "--maximum-runtime=$max_time "; 137 } 138 $ENV{UID_WRAPPER_ROOT} = "1"; 139 140 $ENV{MAKE_TEST_BINARY} = Samba::bindir_path($self, "samba"); 141 my @preargs = (); 142 my @optargs = (); 138 143 if (defined($ENV{SAMBA_OPTIONS})) { 139 $optarg.= " $ENV{SAMBA_OPTIONS}"; 140 } 141 my $samba = $self->bindir_path("samba"); 142 143 # allow selection of the process model using 144 # the environment varibale SAMBA_PROCESS_MODEL 145 # that allows us to change the process model for 146 # individual machines in the build farm 147 my $model = "single"; 148 if (defined($ENV{SAMBA_PROCESS_MODEL})) { 149 $model = $ENV{SAMBA_PROCESS_MODEL}; 150 } 151 chomp($pwd); 152 my $cmdline = "$valgrind ${pwd}/$samba $optarg $env_vars->{CONFIGURATION} -M $model -i"; 153 my $ret = system("$cmdline"); 154 if ($ret == -1) { 155 print "Unable to start $cmdline: $ret: $!\n"; 156 exit 1; 157 } 158 my $exit = ($ret >> 8); 159 unlink($env_vars->{SAMBA_TEST_FIFO}); 160 if ($ret == 0) { 161 print "$samba exited with no error\n"; 162 exit 0; 163 } elsif ( $ret & 127 ) { 164 print "$samba got signal ".($ret & 127)." and exits with $exit!\n"; 165 } else { 166 print "$samba failed with status $exit!\n"; 167 } 168 if ($exit == 0) { 169 $exit = -1; 170 } 171 exit $exit; 172 } 173 print "DONE\n"; 174 175 open(DATA, ">$env_vars->{SAMBA_TEST_FIFO}"); 144 @optargs = split(/ /, $ENV{SAMBA_OPTIONS}); 145 } 146 if(defined($ENV{SAMBA_VALGRIND})) { 147 @preargs = split(/ /,$ENV{SAMBA_VALGRIND}); 148 } 149 150 close($env_vars->{STDIN_PIPE}); 151 open STDIN, ">&", $STDIN_READER or die "can't dup STDIN_READER to STDIN: $!"; 152 153 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: $!"); 154 } 155 $env_vars->{SAMBA_PID} = $pid; 156 print "DONE ($pid)\n"; 157 158 close($STDIN_READER); 159 160 if ($self->wait_for_start($env_vars) != 0) { 161 warn("Samba $pid failed to start up"); 162 return undef; 163 } 176 164 177 165 return $pid; … … 181 169 { 182 170 my ($self, $testenv_vars) = @_; 171 my $ret = 0; 172 173 if (not $self->check_env($testenv_vars)) { 174 warn("unable to confirm Samba $testenv_vars->{SAMBA_PID} is running"); 175 return -1; 176 } 177 183 178 # give time for nbt server to register its names 184 179 print "delaying for nbt name registration\n"; … … 187 182 # This will return quickly when things are up, but be slow if we 188 183 # need to wait for (eg) SSL init 189 my $nmblookup = $self->bindir_path("nmblookup");184 my $nmblookup = Samba::bindir_path($self, "nmblookup4"); 190 185 system("$nmblookup $testenv_vars->{CONFIGURATION} $testenv_vars->{SERVER}"); 191 186 system("$nmblookup $testenv_vars->{CONFIGURATION} -U $testenv_vars->{SERVER_IP} $testenv_vars->{SERVER}"); 192 187 system("$nmblookup $testenv_vars->{CONFIGURATION} $testenv_vars->{NETBIOSNAME}"); 193 188 system("$nmblookup $testenv_vars->{CONFIGURATION} -U $testenv_vars->{SERVER_IP} $testenv_vars->{NETBIOSNAME}"); 194 system("$nmblookup $testenv_vars->{CONFIGURATION} $testenv_vars->{NETBIOS ALIAS}");195 system("$nmblookup $testenv_vars->{CONFIGURATION} -U $testenv_vars->{SERVER_IP} $testenv_vars->{NETBIOS ALIAS}");189 system("$nmblookup $testenv_vars->{CONFIGURATION} $testenv_vars->{NETBIOSNAME}"); 190 system("$nmblookup $testenv_vars->{CONFIGURATION} -U $testenv_vars->{SERVER_IP} $testenv_vars->{NETBIOSNAME}"); 196 191 system("$nmblookup $testenv_vars->{CONFIGURATION} $testenv_vars->{SERVER}"); 197 192 system("$nmblookup $testenv_vars->{CONFIGURATION} -U $testenv_vars->{SERVER_IP} $testenv_vars->{SERVER}"); 198 193 system("$nmblookup $testenv_vars->{CONFIGURATION} $testenv_vars->{NETBIOSNAME}"); 199 194 system("$nmblookup $testenv_vars->{CONFIGURATION} -U $testenv_vars->{SERVER_IP} $testenv_vars->{NETBIOSNAME}"); 200 system("$nmblookup $testenv_vars->{CONFIGURATION} $testenv_vars->{NETBIOSALIAS}"); 201 system("$nmblookup $testenv_vars->{CONFIGURATION} -U $testenv_vars->{SERVER_IP} $testenv_vars->{NETBIOSALIAS}"); 202 195 system("$nmblookup $testenv_vars->{CONFIGURATION} $testenv_vars->{NETBIOSNAME}"); 196 system("$nmblookup $testenv_vars->{CONFIGURATION} -U $testenv_vars->{SERVER_IP} $testenv_vars->{NETBIOSNAME}"); 197 198 # Ensure we have the first RID Set before we start tests. This makes the tests more reliable. 199 if ($testenv_vars->{SERVER_ROLE} eq "domain controller" and not ($testenv_vars->{NETBIOSNAME} eq "RODC")) { 200 # Add hosts file for name lookups 201 $ENV{NSS_WRAPPER_HOSTS} = $testenv_vars->{NSS_WRAPPER_HOSTS}; 202 if (defined($testenv_vars->{RESOLV_WRAPPER_CONF})) { 203 $ENV{RESOLV_WRAPPER_CONF} = $testenv_vars->{RESOLV_WRAPPER_CONF}; 204 } else { 205 $ENV{RESOLV_WRAPPER_HOSTS} = $testenv_vars->{RESOLV_WRAPPER_HOSTS}; 206 } 207 208 print "waiting for working LDAP and a RID Set to be allocated\n"; 209 my $ldbsearch = Samba::bindir_path($self, "ldbsearch"); 210 my $count = 0; 211 my $base_dn = "DC=".join(",DC=", split(/\./, $testenv_vars->{REALM})); 212 my $rid_set_dn = "cn=RID Set,cn=$testenv_vars->{NETBIOSNAME},ou=domain controllers,$base_dn"; 213 sleep(1); 214 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) { 215 $count++; 216 if ($count > 40) { 217 $ret = -1; 218 last; 219 } 220 sleep(1); 221 } 222 } 203 223 print $self->getlog_env($testenv_vars); 224 225 return $ret 204 226 } 205 227 … … 208 230 my ($self, $file, $ldif) = @_; 209 231 210 my $ldbadd = $self->bindir_path("ldbadd");232 my $ldbadd = Samba::bindir_path($self, "ldbadd"); 211 233 open(LDIF, "|$ldbadd -H $file >/dev/null"); 212 234 print LDIF $ldif; … … 251 273 } 252 274 253 sub mk_keyblobs($$) 254 { 255 my ($self, $tlsdir) = @_; 256 257 #TLS and PKINIT crypto blobs 258 my $dhfile = "$tlsdir/dhparms.pem"; 259 my $cafile = "$tlsdir/ca.pem"; 260 my $certfile = "$tlsdir/cert.pem"; 261 my $reqkdc = "$tlsdir/req-kdc.der"; 262 my $kdccertfile = "$tlsdir/kdc.pem"; 263 my $keyfile = "$tlsdir/key.pem"; 264 my $adminkeyfile = "$tlsdir/adminkey.pem"; 265 my $reqadmin = "$tlsdir/req-admin.der"; 266 my $admincertfile = "$tlsdir/admincert.pem"; 267 my $admincertupnfile = "$tlsdir/admincertupn.pem"; 268 269 mkdir($tlsdir, 0777); 270 271 #This is specified here to avoid draining entropy on every run 272 open(DHFILE, ">$dhfile"); 273 print DHFILE <<EOF; 274 -----BEGIN DH PARAMETERS----- 275 MGYCYQC/eWD2xkb7uELmqLi+ygPMKyVcpHUo2yCluwnbPutEueuxrG/Cys8j8wLO 276 svCN/jYNyR2NszOmg7ZWcOC/4z/4pWDVPUZr8qrkhj5MRKJc52MncfaDglvEdJrv 277 YX70obsCAQI= 278 -----END DH PARAMETERS----- 279 EOF 280 close(DHFILE); 281 282 #Likewise, we pregenerate the key material. This allows the 283 #other certificates to be pre-generated 284 open(KEYFILE, ">$keyfile"); 285 print KEYFILE <<EOF; 286 -----BEGIN RSA PRIVATE KEY----- 287 MIICXQIBAAKBgQDKg6pAwCHUMA1DfHDmWhZfd+F0C+9Jxcqvpw9ii9En3E1uflpc 288 ol3+S9/6I/uaTmJHZre+DF3dTzb/UOZo0Zem8N+IzzkgoGkFafjXuT3BL5UPY2/H 289 6H+pPqVIRLOmrWImai359YyoKhFyo37Y6HPeU8QcZ+u2rS9geapIWfeuowIDAQAB 290 AoGAAqDLzFRR/BF1kpsiUfL4WFvTarCe9duhwj7ORc6fs785qAXuwUYAJ0Uvzmy6 291 HqoGv3t3RfmeHDmjcpPHsbOKnsOQn2MgmthidQlPBMWtQMff5zdoYNUFiPS0XQBq 292 szNW4PRjaA9KkLQVTwnzdXGkBSkn/nGxkaVu7OR3vJOBoo0CQQDO4upypesnbe6p 293 9/xqfZ2uim8IwV1fLlFClV7WlCaER8tsQF4lEi0XSzRdXGUD/dilpY88Nb+xok/X 294 8Z8OvgAXAkEA+pcLsx1gN7kxnARxv54jdzQjC31uesJgMKQXjJ0h75aUZwTNHmZQ 295 vPxi6u62YiObrN5oivkixwFNncT9MxTxVQJBAMaWUm2SjlLe10UX4Zdm1MEB6OsC 296 kVoX37CGKO7YbtBzCfTzJGt5Mwc1DSLA2cYnGJqIfSFShptALlwedot0HikCQAJu 297 jNKEKnbf+TdGY8Q0SKvTebOW2Aeg80YFkaTvsXCdyXrmdQcifw4WdO9KucJiDhSz 298 Y9hVapz7ykEJtFtWjLECQQDIlfc63I5ZpXfg4/nN4IJXUW6AmPVOYIA5215itgki 299 cSlMYli1H9MEXH0pQMGv5Qyd0OYIx2DDg96mZ+aFvqSG 300 -----END RSA PRIVATE KEY----- 301 EOF 302 close(KEYFILE); 303 304 open(ADMINKEYFILE, ">$adminkeyfile"); 305 306 print ADMINKEYFILE <<EOF; 307 -----BEGIN RSA PRIVATE KEY----- 308 MIICXQIBAAKBgQD0+OL7TQBj0RejbIH1+g5GeRaWaM9xF43uE5y7jUHEsi5owhZF 309 5iIoHZeeL6cpDF5y1BZRs0JlA1VqMry1jjKlzFYVEMMFxB6esnXhl0Jpip1JkUMM 310 XLOP1m/0dqayuHBWozj9f/cdyCJr0wJIX1Z8Pr+EjYRGPn/MF0xdl3JRlwIDAQAB 311 AoGAP8mjCP628Ebc2eACQzOWjgEvwYCPK4qPmYOf1zJkArzG2t5XAGJ5WGrENRuB 312 cm3XFh1lpmaADl982UdW3gul4gXUy6w4XjKK4vVfhyHj0kZ/LgaXUK9BAGhroJ2L 313 osIOUsaC6jdx9EwSRctwdlF3wWJ8NK0g28AkvIk+FlolW4ECQQD7w5ouCDnf58CN 314 u4nARx4xv5XJXekBvOomkCQAmuOsdOb6b9wn3mm2E3au9fueITjb3soMR31AF6O4 315 eAY126rXAkEA+RgHzybzZEP8jCuznMqoN2fq/Vrs6+W3M8/G9mzGEMgLLpaf2Jiz 316 I9tLZ0+OFk9tkRaoCHPfUOCrVWJZ7Y53QQJBAMhoA6rw0WDyUcyApD5yXg6rusf4 317 ASpo/tqDkqUIpoL464Qe1tjFqtBM3gSXuhs9xsz+o0bzATirmJ+WqxrkKTECQHt2 318 OLCpKqwAspU7N+w32kaUADoRLisCEdrhWklbwpQgwsIVsCaoEOpt0CLloJRYTANE 319 yoZeAErTALjyZYZEPcECQQDlUi0N8DFxQ/lOwWyR3Hailft+mPqoPCa8QHlQZnlG 320 +cfgNl57YHMTZFwgUVFRdJNpjH/WdZ5QxDcIVli0q+Ko 321 -----END RSA PRIVATE KEY----- 322 EOF 323 324 #generated with 325 # hxtool issue-certificate --self-signed --issue-ca \ 326 # --ca-private-key="FILE:$KEYFILE" \ 327 # --subject="CN=CA,DC=samba,DC=example,DC=com" \ 328 # --certificate="FILE:$CAFILE" --lifetime="25 years" 329 330 open(CAFILE, ">$cafile"); 331 print CAFILE <<EOF; 332 -----BEGIN CERTIFICATE----- 333 MIICcTCCAdqgAwIBAgIUaBPmjnPVqyFqR5foICmLmikJTzgwCwYJKoZIhvcNAQEFMFIxEzAR 334 BgoJkiaJk/IsZAEZDANjb20xFzAVBgoJkiaJk/IsZAEZDAdleGFtcGxlMRUwEwYKCZImiZPy 335 LGQBGQwFc2FtYmExCzAJBgNVBAMMAkNBMCIYDzIwMDgwMzAxMTIyMzEyWhgPMjAzMzAyMjQx 336 MjIzMTJaMFIxEzARBgoJkiaJk/IsZAEZDANjb20xFzAVBgoJkiaJk/IsZAEZDAdleGFtcGxl 337 MRUwEwYKCZImiZPyLGQBGQwFc2FtYmExCzAJBgNVBAMMAkNBMIGfMA0GCSqGSIb3DQEBAQUA 338 A4GNADCBiQKBgQDKg6pAwCHUMA1DfHDmWhZfd+F0C+9Jxcqvpw9ii9En3E1uflpcol3+S9/6 339 I/uaTmJHZre+DF3dTzb/UOZo0Zem8N+IzzkgoGkFafjXuT3BL5UPY2/H6H+pPqVIRLOmrWIm 340 ai359YyoKhFyo37Y6HPeU8QcZ+u2rS9geapIWfeuowIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC 341 AaYwHQYDVR0OBBYEFMLZufegDKLZs0VOyFXYK1L6M8oyMA8GA1UdEwEB/wQFMAMBAf8wDQYJ 342 KoZIhvcNAQEFBQADgYEAAZJbCAAkaqgFJ0xgNovn8Ydd0KswQPjicwiODPgw9ZPoD2HiOUVO 343 yYDRg/dhFF9y656OpcHk4N7qZ2sl3RlHkzDu+dseETW+CnKvQIoXNyeARRJSsSlwrwcoD4JR 344 HTLk2sGigsWwrJ2N99sG/cqSJLJ1MFwLrs6koweBnYU0f/g= 345 -----END CERTIFICATE----- 346 EOF 347 348 #generated with GNUTLS internally in Samba. 349 350 open(CERTFILE, ">$certfile"); 351 print CERTFILE <<EOF; 352 -----BEGIN CERTIFICATE----- 353 MIICYTCCAcygAwIBAgIE5M7SRDALBgkqhkiG9w0BAQUwZTEdMBsGA1UEChMUU2Ft 354 YmEgQWRtaW5pc3RyYXRpb24xNDAyBgNVBAsTK1NhbWJhIC0gdGVtcG9yYXJ5IGF1 355 dG9nZW5lcmF0ZWQgY2VydGlmaWNhdGUxDjAMBgNVBAMTBVNhbWJhMB4XDTA2MDgw 356 NDA0MzY1MloXDTA4MDcwNDA0MzY1MlowZTEdMBsGA1UEChMUU2FtYmEgQWRtaW5p 357 c3RyYXRpb24xNDAyBgNVBAsTK1NhbWJhIC0gdGVtcG9yYXJ5IGF1dG9nZW5lcmF0 358 ZWQgY2VydGlmaWNhdGUxDjAMBgNVBAMTBVNhbWJhMIGcMAsGCSqGSIb3DQEBAQOB 359 jAAwgYgCgYDKg6pAwCHUMA1DfHDmWhZfd+F0C+9Jxcqvpw9ii9En3E1uflpcol3+ 360 S9/6I/uaTmJHZre+DF3dTzb/UOZo0Zem8N+IzzkgoGkFafjXuT3BL5UPY2/H6H+p 361 PqVIRLOmrWImai359YyoKhFyo37Y6HPeU8QcZ+u2rS9geapIWfeuowIDAQABoyUw 362 IzAMBgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAsGCSqGSIb3DQEB 363 BQOBgQAmkN6XxvDnoMkGcWLCTwzxGfNNSVcYr7TtL2aJh285Xw9zaxcm/SAZBFyG 364 LYOChvh6hPU7joMdDwGfbiLrBnMag+BtGlmPLWwp/Kt1wNmrRhduyTQFhN3PP6fz 365 nBr9vVny2FewB2gHmelaPS//tXdxivSXKz3NFqqXLDJjq7P8wA== 366 -----END CERTIFICATE----- 367 EOF 368 close(CERTFILE); 369 370 #KDC certificate 371 # hxtool request-create \ 372 # --subject="CN=krbtgt,CN=users,DC=samba,DC=example,DC=com" \ 373 # --key="FILE:$KEYFILE" $KDCREQ 374 375 # hxtool issue-certificate --ca-certificate=FILE:$CAFILE,$KEYFILE \ 376 # --type="pkinit-kdc" \ 377 # --pk-init-principal="krbtgt/SAMBA.EXAMPLE.COM@SAMBA.EXAMPLE.COM" \ 378 # --req="PKCS10:$KDCREQ" --certificate="FILE:$KDCCERTFILE" \ 379 # --lifetime="25 years" 380 381 open(KDCCERTFILE, ">$kdccertfile"); 382 print KDCCERTFILE <<EOF; 383 -----BEGIN CERTIFICATE----- 384 MIIDDDCCAnWgAwIBAgIUI2Tzj+JnMzMcdeabcNo30rovzFAwCwYJKoZIhvcNAQEFMFIxEzAR 385 BgoJkiaJk/IsZAEZDANjb20xFzAVBgoJkiaJk/IsZAEZDAdleGFtcGxlMRUwEwYKCZImiZPy 386 LGQBGQwFc2FtYmExCzAJBgNVBAMMAkNBMCIYDzIwMDgwMzAxMTMxOTIzWhgPMjAzMzAyMjQx 387 MzE5MjNaMGYxEzARBgoJkiaJk/IsZAEZDANjb20xFzAVBgoJkiaJk/IsZAEZDAdleGFtcGxl 388 MRUwEwYKCZImiZPyLGQBGQwFc2FtYmExDjAMBgNVBAMMBXVzZXJzMQ8wDQYDVQQDDAZrcmJ0 389 Z3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMqDqkDAIdQwDUN8cOZaFl934XQL70nF 390 yq+nD2KL0SfcTW5+WlyiXf5L3/oj+5pOYkdmt74MXd1PNv9Q5mjRl6bw34jPOSCgaQVp+Ne5 391 PcEvlQ9jb8fof6k+pUhEs6atYiZqLfn1jKgqEXKjftjoc95TxBxn67atL2B5qkhZ966jAgMB 392 AAGjgcgwgcUwDgYDVR0PAQH/BAQDAgWgMBIGA1UdJQQLMAkGBysGAQUCAwUwVAYDVR0RBE0w 393 S6BJBgYrBgEFAgKgPzA9oBMbEVNBTUJBLkVYQU1QTEUuQ09NoSYwJKADAgEBoR0wGxsGa3Ji 394 dGd0GxFTQU1CQS5FWEFNUExFLkNPTTAfBgNVHSMEGDAWgBTC2bn3oAyi2bNFTshV2CtS+jPK 395 MjAdBgNVHQ4EFgQUwtm596AMotmzRU7IVdgrUvozyjIwCQYDVR0TBAIwADANBgkqhkiG9w0B 396 AQUFAAOBgQBmrVD5MCmZjfHp1nEnHqTIh8r7lSmVtDx4s9MMjxm9oNrzbKXynvdhwQYFVarc 397 ge4yRRDXtSebErOl71zVJI9CVeQQpwcH+tA85oGA7oeFtO/S7ls581RUU6tGgyxV4veD+lJv 398 KPH5LevUtgD+q9H4LU4Sq5N3iFwBaeryB0g2wg== 399 -----END CERTIFICATE----- 400 EOF 401 402 # hxtool request-create \ 403 # --subject="CN=Administrator,CN=users,DC=samba,DC=example,DC=com" \ 404 # --key="FILE:$ADMINKEYFILE" $ADMINREQFILE 405 406 # hxtool issue-certificate --ca-certificate=FILE:$CAFILE,$KEYFILE \ 407 # --type="pkinit-client" \ 408 # --pk-init-principal="administrator@SAMBA.EXAMPLE.COM" \ 409 # --req="PKCS10:$ADMINREQFILE" --certificate="FILE:$ADMINCERTFILE" \ 410 # --lifetime="25 years" 411 412 open(ADMINCERTFILE, ">$admincertfile"); 413 print ADMINCERTFILE <<EOF; 414 -----BEGIN CERTIFICATE----- 415 MIIDHTCCAoagAwIBAgIUUggzW4lLRkMKe1DAR2NKatkMDYwwCwYJKoZIhvcNAQELMFIxEzAR 416 BgoJkiaJk/IsZAEZDANjb20xFzAVBgoJkiaJk/IsZAEZDAdleGFtcGxlMRUwEwYKCZImiZPy 417 LGQBGQwFc2FtYmExCzAJBgNVBAMMAkNBMCIYDzIwMDkwNzI3MDMzMjE1WhgPMjAzNDA3MjIw 418 MzMyMTVaMG0xEzARBgoJkiaJk/IsZAEZDANjb20xFzAVBgoJkiaJk/IsZAEZDAdleGFtcGxl 419 MRUwEwYKCZImiZPyLGQBGQwFc2FtYmExDjAMBgNVBAMMBXVzZXJzMRYwFAYDVQQDDA1BZG1p 420 bmlzdHJhdG9yMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD0+OL7TQBj0RejbIH1+g5G 421 eRaWaM9xF43uE5y7jUHEsi5owhZF5iIoHZeeL6cpDF5y1BZRs0JlA1VqMry1jjKlzFYVEMMF 422 xB6esnXhl0Jpip1JkUMMXLOP1m/0dqayuHBWozj9f/cdyCJr0wJIX1Z8Pr+EjYRGPn/MF0xd 423 l3JRlwIDAQABo4HSMIHPMA4GA1UdDwEB/wQEAwIFoDAoBgNVHSUEITAfBgcrBgEFAgMEBggr 424 BgEFBQcDAgYKKwYBBAGCNxQCAjBIBgNVHREEQTA/oD0GBisGAQUCAqAzMDGgExsRU0FNQkEu 425 RVhBTVBMRS5DT02hGjAYoAMCAQGhETAPGw1BZG1pbmlzdHJhdG9yMB8GA1UdIwQYMBaAFMLZ 426 ufegDKLZs0VOyFXYK1L6M8oyMB0GA1UdDgQWBBQg81bLyfCA88C2B/BDjXlGuaFaxjAJBgNV 427 HRMEAjAAMA0GCSqGSIb3DQEBCwUAA4GBAEf/OSHUDJaGdtWGNuJeqcVYVMwrfBAc0OSwVhz1 428 7/xqKHWo8wIMPkYRtaRHKLNDsF8GkhQPCpVsa6mX/Nt7YQnNvwd+1SBP5E8GvwWw9ZzLJvma 429 nk2n89emuayLpVtp00PymrDLRBcNaRjFReQU8f0o509kiVPHduAp3jOiy13l 430 -----END CERTIFICATE----- 431 EOF 432 close(ADMINCERTFILE); 433 434 # hxtool issue-certificate --ca-certificate=FILE:$CAFILE,$KEYFILE \ 435 # --type="pkinit-client" \ 436 # --ms-upn="administrator@samba.example.com" \ 437 # --req="PKCS10:$ADMINREQFILE" --certificate="FILE:$ADMINCERTUPNFILE" \ 438 # --lifetime="25 years" 439 440 open(ADMINCERTUPNFILE, ">$admincertupnfile"); 441 print ADMINCERTUPNFILE <<EOF; 442 -----BEGIN CERTIFICATE----- 443 MIIDDzCCAnigAwIBAgIUUp3CJMuNaEaAdPKp3QdNIwG7a4wwCwYJKoZIhvcNAQELMFIxEzAR 444 BgoJkiaJk/IsZAEZDANjb20xFzAVBgoJkiaJk/IsZAEZDAdleGFtcGxlMRUwEwYKCZImiZPy 445 LGQBGQwFc2FtYmExCzAJBgNVBAMMAkNBMCIYDzIwMDkwNzI3MDMzMzA1WhgPMjAzNDA3MjIw 446 MzMzMDVaMG0xEzARBgoJkiaJk/IsZAEZDANjb20xFzAVBgoJkiaJk/IsZAEZDAdleGFtcGxl 447 MRUwEwYKCZImiZPyLGQBGQwFc2FtYmExDjAMBgNVBAMMBXVzZXJzMRYwFAYDVQQDDA1BZG1p 448 bmlzdHJhdG9yMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD0+OL7TQBj0RejbIH1+g5G 449 eRaWaM9xF43uE5y7jUHEsi5owhZF5iIoHZeeL6cpDF5y1BZRs0JlA1VqMry1jjKlzFYVEMMF 450 xB6esnXhl0Jpip1JkUMMXLOP1m/0dqayuHBWozj9f/cdyCJr0wJIX1Z8Pr+EjYRGPn/MF0xd 451 l3JRlwIDAQABo4HEMIHBMA4GA1UdDwEB/wQEAwIFoDAoBgNVHSUEITAfBgcrBgEFAgMEBggr 452 BgEFBQcDAgYKKwYBBAGCNxQCAjA6BgNVHREEMzAxoC8GCisGAQQBgjcUAgOgIQwfYWRtaW5p 453 c3RyYXRvckBzYW1iYS5leGFtcGxlLmNvbTAfBgNVHSMEGDAWgBTC2bn3oAyi2bNFTshV2CtS 454 +jPKMjAdBgNVHQ4EFgQUIPNWy8nwgPPAtgfwQ415RrmhWsYwCQYDVR0TBAIwADANBgkqhkiG 455 9w0BAQsFAAOBgQBk42+egeUB3Ji2PC55fbt3FNKxvmm2xUUFkV9POK/YR9rajKOwk5jtYSeS 456 Zd7J9s//rNFNa7waklFkDaY56+QWTFtdvxfE+KoHaqt6X8u6pqi7p3M4wDKQox+9Dx8yWFyq 457 Wfz/8alZ5aMezCQzXJyIaJsCLeKABosSwHcpAFmxlQ== 458 -----END CERTIFICATE----- 459 EOF 460 } 461 462 sub mk_krb5_conf($$) 463 { 464 my ($self, $ctx) = @_; 465 466 unless (open(KRB5CONF, ">$ctx->{krb5_conf}")) { 467 warn("can't open $ctx->{krb5_conf}$?"); 468 return undef; 469 } 470 print KRB5CONF " 471 #Generated krb5.conf for $ctx->{realm} 472 473 [libdefaults] 474 default_realm = $ctx->{realm} 475 dns_lookup_realm = false 476 dns_lookup_kdc = false 477 ticket_lifetime = 24h 478 forwardable = yes 479 allow_weak_crypto = yes 480 481 [realms] 482 $ctx->{realm} = { 483 kdc = $ctx->{kdc_ipv4}:88 484 admin_server = $ctx->{kdc_ipv4}:88 485 default_domain = $ctx->{dnsname} 486 } 487 $ctx->{dnsname} = { 488 kdc = $ctx->{kdc_ipv4}:88 489 admin_server = $ctx->{kdc_ipv4}:88 490 default_domain = $ctx->{dnsname} 491 } 492 $ctx->{domain} = { 493 kdc = $ctx->{kdc_ipv4}:88 494 admin_server = $ctx->{kdc_ipv4}:88 495 default_domain = $ctx->{dnsname} 496 } 497 498 [appdefaults] 499 pkinit_anchors = FILE:$ctx->{tlsdir}/ca.pem 500 501 [kdc] 502 enable-pkinit = true 503 pkinit_identity = FILE:$ctx->{tlsdir}/kdc.pem,$ctx->{tlsdir}/key.pem 504 pkinit_anchors = FILE:$ctx->{tlsdir}/ca.pem 505 506 [domain_realm] 507 .$ctx->{dnsname} = $ctx->{realm} 508 "; 509 close(KRB5CONF); 510 } 511 512 sub provision_raw_prepare($$$$$$$$$$) 513 { 514 my ($self, $prefix, $server_role, $netbiosname, $netbiosalias, 275 sub setup_namespaces($$:$$) 276 { 277 my ($self, $localenv, $upn_array, $spn_array) = @_; 278 279 @{$upn_array} = [] unless defined($upn_array); 280 my $upn_args = ""; 281 foreach my $upn (@{$upn_array}) { 282 $upn_args .= " --add-upn-suffix=$upn"; 283 } 284 285 @{$spn_array} = [] unless defined($spn_array); 286 my $spn_args = ""; 287 foreach my $spn (@{$spn_array}) { 288 $spn_args .= " --add-spn-suffix=$spn"; 289 } 290 291 my $samba_tool = Samba::bindir_path($self, "samba-tool"); 292 293 my $cmd_env = ""; 294 $cmd_env .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$localenv->{SOCKET_WRAPPER_DEFAULT_IFACE}\" "; 295 if (defined($localenv->{RESOLV_WRAPPER_CONF})) { 296 $cmd_env .= "RESOLV_WRAPPER_CONF=\"$localenv->{RESOLV_WRAPPER_CONF}\" "; 297 } else { 298 $cmd_env .= "RESOLV_WRAPPER_HOSTS=\"$localenv->{RESOLV_WRAPPER_HOSTS}\" "; 299 } 300 $cmd_env .= " KRB5_CONFIG=\"$localenv->{KRB5_CONFIG}\""; 301 302 my $cmd_config = " $localenv->{CONFIGURATION}"; 303 304 my $namespaces = $cmd_env; 305 $namespaces .= " $samba_tool domain trust namespaces $upn_args $spn_args"; 306 $namespaces .= $cmd_config; 307 unless (system($namespaces) == 0) { 308 warn("Failed to add namespaces \n$namespaces"); 309 return; 310 } 311 312 return; 313 } 314 315 sub setup_trust($$$$$) 316 { 317 my ($self, $localenv, $remoteenv, $type, $extra_args) = @_; 318 319 $localenv->{TRUST_SERVER} = $remoteenv->{SERVER}; 320 $localenv->{TRUST_SERVER_IP} = $remoteenv->{SERVER_IP}; 321 $localenv->{TRUST_SERVER_IPV6} = $remoteenv->{SERVER_IPV6}; 322 $localenv->{TRUST_NETBIOSNAME} = $remoteenv->{NETBIOSNAME}; 323 $localenv->{TRUST_USERNAME} = $remoteenv->{USERNAME}; 324 $localenv->{TRUST_PASSWORD} = $remoteenv->{PASSWORD}; 325 $localenv->{TRUST_DOMAIN} = $remoteenv->{DOMAIN}; 326 $localenv->{TRUST_REALM} = $remoteenv->{REALM}; 327 328 my $samba_tool = Samba::bindir_path($self, "samba-tool"); 329 # setup the trust 330 my $cmd_env = ""; 331 $cmd_env .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$localenv->{SOCKET_WRAPPER_DEFAULT_IFACE}\" "; 332 if (defined($localenv->{RESOLV_WRAPPER_CONF})) { 333 $cmd_env .= "RESOLV_WRAPPER_CONF=\"$localenv->{RESOLV_WRAPPER_CONF}\" "; 334 } else { 335 $cmd_env .= "RESOLV_WRAPPER_HOSTS=\"$localenv->{RESOLV_WRAPPER_HOSTS}\" "; 336 } 337 $cmd_env .= " KRB5_CONFIG=\"$localenv->{KRB5_CONFIG}\""; 338 339 my $cmd_config = " $localenv->{CONFIGURATION}"; 340 my $cmd_creds = $cmd_config; 341 $cmd_creds .= " -U$localenv->{TRUST_DOMAIN}\\\\$localenv->{TRUST_USERNAME}\%$localenv->{TRUST_PASSWORD}"; 342 343 my $create = $cmd_env; 344 $create .= " $samba_tool domain trust create --type=${type} $localenv->{TRUST_REALM}"; 345 $create .= " $extra_args"; 346 $create .= $cmd_creds; 347 unless (system($create) == 0) { 348 warn("Failed to create trust \n$create"); 349 return undef; 350 } 351 352 return $localenv 353 } 354 355 sub provision_raw_prepare($$$$$$$$$$$) 356 { 357 my ($self, $prefix, $server_role, $hostname, 515 358 $domain, $realm, $functional_level, 516 $ swiface, $password, $kdc_ipv4) = @_;359 $password, $kdc_ipv4, $kdc_ipv6) = @_; 517 360 my $ctx; 361 my $netbiosname = uc($hostname); 518 362 519 363 unless(-d $prefix or mkdir($prefix, 0777)) { … … 530 374 } 531 375 376 377 my $swiface = Samba::get_interface($hostname); 378 532 379 $ctx->{prefix} = $prefix; 533 380 $ctx->{prefix_abs} = $prefix_abs; 534 535 $ctx->{dns_host_file} = "$ENV{SELFTEST_PREFIX}/dns_host_file";536 381 537 382 $ctx->{server_role} = $server_role; 383 $ctx->{hostname} = $hostname; 538 384 $ctx->{netbiosname} = $netbiosname; 539 $ctx->{netbiosalias} = $netbiosalias;540 385 $ctx->{swiface} = $swiface; 541 386 $ctx->{password} = $password; 542 387 $ctx->{kdc_ipv4} = $kdc_ipv4; 543 388 $ctx->{kdc_ipv6} = $kdc_ipv6; 389 if ($functional_level eq "2000") { 390 $ctx->{supported_enctypes} = "arcfour-hmac-md5 des-cbc-md5 des-cbc-crc" 391 } 392 393 # 394 # Set smbd log level here. 395 # 544 396 $ctx->{server_loglevel} =$ENV{SERVER_LOG_LEVEL} || 1; 545 397 $ctx->{username} = "Administrator"; … … 547 399 $ctx->{realm} = uc($realm); 548 400 $ctx->{dnsname} = lc($realm); 549 $ctx->{sid_generator} = "internal";550 401 551 402 $ctx->{functional_level} = $functional_level; … … 555 406 $ctx->{unix_name} = $unix_name; 556 407 $ctx->{unix_uid} = $>; 408 my @mygid = split(" ", $(); 409 $ctx->{unix_gid} = $mygid[0]; 557 410 $ctx->{unix_gids_str} = $); 558 411 @{$ctx->{unix_gids}} = split(" ", $ctx->{unix_gids_str}); … … 565 418 $ctx->{ncalrpcdir} = "$prefix_abs/ncalrpc"; 566 419 $ctx->{lockdir} = "$prefix_abs/lockdir"; 420 $ctx->{logdir} = "$prefix_abs/logs"; 421 $ctx->{statedir} = "$prefix_abs/statedir"; 422 $ctx->{cachedir} = "$prefix_abs/cachedir"; 567 423 $ctx->{winbindd_socket_dir} = "$prefix_abs/winbindd_socket"; 568 424 $ctx->{winbindd_privileged_socket_dir} = "$prefix_abs/winbindd_privileged_socket"; … … 570 426 $ctx->{nsswrap_passwd} = "$ctx->{etcdir}/passwd"; 571 427 $ctx->{nsswrap_group} = "$ctx->{etcdir}/group"; 428 $ctx->{nsswrap_hosts} = "$ENV{SELFTEST_PREFIX}/hosts"; 429 if ($ENV{SAMBA_DNS_FAKING}) { 430 $ctx->{dns_host_file} = "$ENV{SELFTEST_PREFIX}/dns_host_file"; 431 $ctx->{samba_dnsupdate} = "$ENV{SRCDIR_ABS}/source4/scripting/bin/samba_dnsupdate -s $ctx->{smb_conf} --all-interfaces --use-file=$ctx->{dns_host_file}"; 432 } else { 433 $ctx->{resolv_conf} = "$ctx->{etcdir}/resolv.conf"; 434 $ctx->{samba_dnsupdate} = "$ENV{SRCDIR_ABS}/source4/scripting/bin/samba_dnsupdate -s $ctx->{smb_conf}"; 435 } 572 436 573 437 $ctx->{tlsdir} = "$ctx->{privatedir}/tls"; 574 438 575 439 $ctx->{ipv4} = "127.0.0.$swiface"; 576 $ctx->{interfaces} = "$ctx->{ipv4}/8"; 440 $ctx->{ipv6} = sprintf("fd00:0000:0000:0000:0000:0000:5357:5f%02x", $swiface); 441 $ctx->{interfaces} = "$ctx->{ipv4}/8 $ctx->{ipv6}/64"; 577 442 578 443 push(@{$ctx->{directories}}, $ctx->{privatedir}); 579 444 push(@{$ctx->{directories}}, $ctx->{etcdir}); 580 445 push(@{$ctx->{directories}}, $ctx->{piddir}); 581 push(@{$ctx->{directories}}, $ctx->{ncalrpcdir});582 446 push(@{$ctx->{directories}}, $ctx->{lockdir}); 447 push(@{$ctx->{directories}}, $ctx->{logdir}); 448 push(@{$ctx->{directories}}, $ctx->{statedir}); 449 push(@{$ctx->{directories}}, $ctx->{cachedir}); 583 450 584 451 $ctx->{smb_conf_extra_options} = ""; 585 452 586 453 my @provision_options = (); 454 push (@provision_options, "KRB5_CONFIG=\"$ctx->{krb5_config}\""); 587 455 push (@provision_options, "NSS_WRAPPER_PASSWD=\"$ctx->{nsswrap_passwd}\""); 588 456 push (@provision_options, "NSS_WRAPPER_GROUP=\"$ctx->{nsswrap_group}\""); 457 push (@provision_options, "NSS_WRAPPER_HOSTS=\"$ctx->{nsswrap_hosts}\""); 458 if (defined($ctx->{resolv_conf})) { 459 push (@provision_options, "RESOLV_WRAPPER_CONF=\"$ctx->{resolv_conf}\""); 460 } else { 461 push (@provision_options, "RESOLV_WRAPPER_HOSTS=\"$ctx->{dns_host_file}\""); 462 } 589 463 if (defined($ENV{GDB_PROVISION})) { 590 464 push (@provision_options, "gdb --args"); … … 604 478 push (@provision_options, $ENV{PYTHON}); 605 479 } 606 push (@provision_options, "$self->{srcdir}/source4/setup/provision"); 480 push (@provision_options, Samba::bindir_path($self, "samba-tool")); 481 push (@provision_options, "domain"); 482 push (@provision_options, "provision"); 607 483 push (@provision_options, "--configfile=$ctx->{smb_conf}"); 608 push (@provision_options, "--host-name=$ctx->{ netbiosname}");484 push (@provision_options, "--host-name=$ctx->{hostname}"); 609 485 push (@provision_options, "--host-ip=$ctx->{ipv4}"); 610 486 push (@provision_options, "--quiet"); … … 632 508 mkdir($_, 0777) foreach (@{$ctx->{directories}}); 633 509 510 ## 511 ## lockdir and piddir must be 0755 512 ## 513 chmod 0755, $ctx->{lockdir}; 514 chmod 0755, $ctx->{piddir}; 515 634 516 unless (open(CONFFILE, ">$ctx->{smb_conf}")) { 635 517 warn("can't open $ctx->{smb_conf}$?"); 636 518 return undef; 637 519 } 520 521 Samba::prepare_keyblobs($ctx); 522 my $crlfile = "$ctx->{tlsdir}/crl.pem"; 523 $crlfile = "" unless -e ${crlfile}; 524 638 525 print CONFFILE " 639 526 [global] 640 527 netbios name = $ctx->{netbiosname} 641 netbios aliases = $ctx->{netbiosalias} 642 posix:eadb = $ctx->{lockdir}/eadb.tdb 528 posix:eadb = $ctx->{statedir}/eadb.tdb 643 529 workgroup = $ctx->{domain} 644 530 realm = $ctx->{realm} … … 647 533 ncalrpc dir = $ctx->{ncalrpcdir} 648 534 lock dir = $ctx->{lockdir} 535 state directory = $ctx->{statedir} 536 cache directory = $ctx->{cachedir} 649 537 winbindd socket directory = $ctx->{winbindd_socket_dir} 650 538 winbindd privileged socket directory = $ctx->{winbindd_privileged_socket_dir} 651 539 ntp signd socket directory = $ctx->{ntp_signd_socket_dir} 652 540 winbind separator = / 653 name resolve order = file bcast654 541 interfaces = $ctx->{interfaces} 655 542 tls dh params file = $ctx->{tlsdir}/dhparms.pem 656 panic action = $RealBin/gdb_backtrace \%PID% \%PROG% 543 tls crlfile = ${crlfile} 544 tls verify peer = no_check 545 panic action = $RealBin/gdb_backtrace \%d 657 546 wins support = yes 658 547 server role = $ctx->{server_role} 659 server services = +echo 548 server services = +echo +smb -s3fs 549 dcerpc endpoint servers = +winreg +srvsvc 660 550 notify:inotify = false 661 551 ldb:nosync = true 552 ldap server require strong auth = yes 662 553 #We don't want to pass our self-tests if the PAC code is wrong 663 554 gensec:require_pac = true 555 log file = $ctx->{logdir}/log.\%m 664 556 log level = $ctx->{server_loglevel} 665 557 lanman auth = Yes 666 558 rndc command = true 667 dns update command = $ENV{SRCDIR_ABS}/source4/scripting/bin/samba_dnsupdate --all-interfaces --use-file=$ctx->{dns_host_file} 668 spn update command = $ENV{SRCDIR_ABS}/source4/scripting/bin/samba_spnupdate 669 resolv:host file = $ctx->{dns_host_file} 559 dns update command = $ctx->{samba_dnsupdate} 560 spn update command = $ENV{SRCDIR_ABS}/source4/scripting/bin/samba_spnupdate -s $ctx->{smb_conf} 670 561 dreplsrv:periodic_startup_interval = 0 562 dsdb:schema update allowed = yes 563 564 vfs objects = dfs_samba4 acl_xattr fake_acls xattr_tdb streams_depot 565 566 # remove this again, when our smb2 client library 567 # supports signin on compound related requests 568 server signing = on 569 570 idmap_ldb:use rfc2307=yes 571 winbind enum users = yes 572 winbind enum groups = yes 671 573 "; 672 673 if (defined($ctx->{sid_generator}) && $ctx->{sid_generator} ne "internal") {674 print CONFFILE "675 sid generator = $ctx->{sid_generator}";676 }677 574 678 575 print CONFFILE " … … 684 581 close(CONFFILE); 685 582 686 $self->mk_keyblobs($ctx->{tlsdir}); 687 688 $self->mk_krb5_conf($ctx); 583 #Default the KDC IP to the server's IP 584 if (not defined($ctx->{kdc_ipv4})) { 585 $ctx->{kdc_ipv4} = $ctx->{ipv4}; 586 } 587 if (not defined($ctx->{kdc_ipv6})) { 588 $ctx->{kdc_ipv6} = $ctx->{ipv6}; 589 } 590 591 Samba::mk_krb5_conf($ctx); 689 592 690 593 open(PWD, ">$ctx->{nsswrap_passwd}"); 691 print PWD " 692 root:x:0:0:root gecos:$ctx->{prefix_abs}:/bin/false 693 $ctx->{unix_name}:x:$ctx->{unix_uid}:@{$ctx->{unix_gids}}[0]:$ctx->{unix_name} gecos:$ctx->{prefix_abs}:/bin/false 694 nobody:x:65534:65533:nobody gecos:$ctx->{prefix_abs}:/bin/false 594 if ($ctx->{unix_uid} != 0) { 595 print PWD "root:x:0:0:root gecos:$ctx->{prefix_abs}:/bin/false\n"; 596 } 597 print PWD "$ctx->{unix_name}:x:$ctx->{unix_uid}:65531:$ctx->{unix_name} gecos:$ctx->{prefix_abs}:/bin/false\n"; 598 print PWD "nobody:x:65534:65533:nobody gecos:$ctx->{prefix_abs}:/bin/false 599 pdbtest:x:65533:65533:pdbtest gecos:$ctx->{prefix_abs}:/bin/false 600 pdbtest2:x:65532:65533:pdbtest gecos:$ctx->{prefix_abs}:/bin/false 601 pdbtest3:x:65531:65533:pdbtest gecos:$ctx->{prefix_abs}:/bin/false 602 pdbtest4:x:65530:65533:pdbtest gecos:$ctx->{prefix_abs}:/bin/false 695 603 "; 696 604 close(PWD); 605 my $uid_rfc2307test = 65533; 697 606 698 607 open(GRP, ">$ctx->{nsswrap_group}"); 699 print GRP " 700 root:x:0: 701 wheel:x:10: 702 users:x:100: 608 if ($ctx->{unix_gid} != 0) { 609 print GRP "root:x:0:\n"; 610 } 611 print GRP "$ctx->{unix_name}:x:$ctx->{unix_gid}:\n"; 612 print GRP "wheel:x:10: 613 users:x:65531: 703 614 nobody:x:65533: 704 615 nogroup:x:65534:nobody 705 616 "; 706 617 close(GRP); 618 my $gid_rfc2307test = 65532; 619 620 my $hostname = lc($ctx->{hostname}); 621 open(HOSTS, ">>$ctx->{nsswrap_hosts}"); 622 if ($hostname eq "localdc") { 623 print HOSTS "$ctx->{ipv4} ${hostname}.$ctx->{dnsname} $ctx->{dnsname} ${hostname}\n"; 624 print HOSTS "$ctx->{ipv6} ${hostname}.$ctx->{dnsname} $ctx->{dnsname} ${hostname}\n"; 625 } else { 626 print HOSTS "$ctx->{ipv4} ${hostname}.$ctx->{dnsname} ${hostname}\n"; 627 print HOSTS "$ctx->{ipv6} ${hostname}.$ctx->{dnsname} ${hostname}\n"; 628 } 629 close(HOSTS); 630 631 if (defined($ctx->{resolv_conf})) { 632 open(RESOLV_CONF, ">$ctx->{resolv_conf}"); 633 print RESOLV_CONF "nameserver $ctx->{kdc_ipv4}\n"; 634 print RESOLV_CONF "nameserver $ctx->{kdc_ipv6}\n"; 635 close(RESOLV_CONF); 636 } 707 637 708 638 my $configuration = "--configfile=$ctx->{smb_conf}"; 709 639 710 640 #Ensure the config file is valid before we start 711 my $testparm = $self->scriptdir_path("bin/testparm");641 my $testparm = Samba::bindir_path($self, "samba-tool") . " testparm"; 712 642 if (system("$testparm $configuration -v --suppress-prompt >/dev/null 2>&1") != 0) { 713 643 system("$testparm -v --suppress-prompt $configuration >&2"); … … 723 653 KRB5_CONFIG => $ctx->{krb5_conf}, 724 654 PIDDIR => $ctx->{piddir}, 725 SERVER => $ctx->{ netbiosname},655 SERVER => $ctx->{hostname}, 726 656 SERVER_IP => $ctx->{ipv4}, 657 SERVER_IPV6 => $ctx->{ipv6}, 727 658 NETBIOSNAME => $ctx->{netbiosname}, 728 NETBIOSALIAS => $ctx->{netbiosalias},729 659 DOMAIN => $ctx->{domain}, 730 660 USERNAME => $ctx->{username}, … … 733 663 LDAPDIR => $ctx->{ldapdir}, 734 664 LDAP_INSTANCE => $ctx->{ldap_instance}, 735 WINBINDD_SOCKET_DIR => $ctx->{winbindd_socket_dir},665 SELFTEST_WINBINDD_SOCKET_DIR => $ctx->{winbindd_socket_dir}, 736 666 NCALRPCDIR => $ctx->{ncalrpcdir}, 737 667 LOCKDIR => $ctx->{lockdir}, 668 STATEDIR => $ctx->{statedir}, 669 CACHEDIR => $ctx->{cachedir}, 670 PRIVATEDIR => $ctx->{privatedir}, 738 671 SERVERCONFFILE => $ctx->{smb_conf}, 739 672 CONFIGURATION => $configuration, … … 741 674 NSS_WRAPPER_PASSWD => $ctx->{nsswrap_passwd}, 742 675 NSS_WRAPPER_GROUP => $ctx->{nsswrap_group}, 676 NSS_WRAPPER_HOSTS => $ctx->{nsswrap_hosts}, 743 677 SAMBA_TEST_FIFO => "$ctx->{prefix}/samba_test.fifo", 744 678 SAMBA_TEST_LOG => "$ctx->{prefix}/samba_test.log", 745 679 SAMBA_TEST_LOG_POS => 0, 680 NSS_WRAPPER_MODULE_SO_PATH => Samba::nss_wrapper_winbind_so_path($self), 681 NSS_WRAPPER_MODULE_FN_PREFIX => "winbind", 682 LOCAL_PATH => $ctx->{share}, 683 UID_RFC2307TEST => $uid_rfc2307test, 684 GID_RFC2307TEST => $gid_rfc2307test, 685 SERVER_ROLE => $ctx->{server_role} 746 686 }; 687 688 if (defined($ctx->{resolv_conf})) { 689 $ret->{RESOLV_WRAPPER_CONF} = $ctx->{resolv_conf}; 690 } else { 691 $ret->{RESOLV_WRAPPER_HOSTS} = $ctx->{dns_host_file}; 692 } 747 693 748 694 return $ret; … … 762 708 } 763 709 710 my $testallowed_account = "testallowed"; 711 my $samba_tool_cmd = ""; 712 $samba_tool_cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" "; 713 $samba_tool_cmd .= Samba::bindir_path($self, "samba-tool") 714 . " user add --configfile=$ctx->{smb_conf} $testallowed_account $ctx->{password}"; 715 unless (system($samba_tool_cmd) == 0) { 716 warn("Unable to add testallowed user: \n$samba_tool_cmd\n"); 717 return undef; 718 } 719 720 my $ldbmodify = ""; 721 $ldbmodify .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" "; 722 $ldbmodify .= Samba::bindir_path($self, "ldbmodify"); 723 my $base_dn = "DC=".join(",DC=", split(/\./, $ctx->{realm})); 724 725 if ($ctx->{server_role} ne "domain controller") { 726 $base_dn = "DC=$ctx->{netbiosname}"; 727 } 728 729 my $user_dn = "cn=$testallowed_account,cn=users,$base_dn"; 730 $testallowed_account = "testallowed account"; 731 open(LDIF, "|$ldbmodify -H $ctx->{privatedir}/sam.ldb"); 732 print LDIF "dn: $user_dn 733 changetype: modify 734 replace: samAccountName 735 samAccountName: $testallowed_account 736 - 737 "; 738 close(LDIF); 739 740 open(LDIF, "|$ldbmodify -H $ctx->{privatedir}/sam.ldb"); 741 print LDIF "dn: $user_dn 742 changetype: modify 743 replace: userPrincipalName 744 userPrincipalName: testallowed upn\@$ctx->{realm} 745 replace: servicePrincipalName 746 servicePrincipalName: host/testallowed 747 - 748 "; 749 close(LDIF); 750 751 $samba_tool_cmd = ""; 752 $samba_tool_cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" "; 753 $samba_tool_cmd .= Samba::bindir_path($self, "samba-tool") 754 . " user add --configfile=$ctx->{smb_conf} testdenied $ctx->{password}"; 755 unless (system($samba_tool_cmd) == 0) { 756 warn("Unable to add testdenied user: \n$samba_tool_cmd\n"); 757 return undef; 758 } 759 760 my $user_dn = "cn=testdenied,cn=users,$base_dn"; 761 open(LDIF, "|$ldbmodify -H $ctx->{privatedir}/sam.ldb"); 762 print LDIF "dn: $user_dn 763 changetype: modify 764 replace: userPrincipalName 765 userPrincipalName: testdenied_upn\@$ctx->{realm}.upn 766 - 767 "; 768 close(LDIF); 769 770 $samba_tool_cmd = ""; 771 $samba_tool_cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" "; 772 $samba_tool_cmd .= Samba::bindir_path($self, "samba-tool") 773 . " group addmembers --configfile=$ctx->{smb_conf} 'Allowed RODC Password Replication Group' '$testallowed_account'"; 774 unless (system($samba_tool_cmd) == 0) { 775 warn("Unable to add '$testallowed_account' user to 'Allowed RODC Password Replication Group': \n$samba_tool_cmd\n"); 776 return undef; 777 } 778 764 779 return $ret; 765 780 } 766 781 767 sub provision($$$$$$$$$ )768 { 769 my ($self, $prefix, $server_role, $ netbiosname, $netbiosalias,782 sub provision($$$$$$$$$$) 783 { 784 my ($self, $prefix, $server_role, $hostname, 770 785 $domain, $realm, $functional_level, 771 $swiface, $password, $kdc_ipv4, $extra_smbconf_options) = @_; 786 $password, $kdc_ipv4, $kdc_ipv6, $extra_smbconf_options, $extra_smbconf_shares, 787 $extra_provision_options) = @_; 772 788 773 789 my $ctx = $self->provision_raw_prepare($prefix, $server_role, 774 $ netbiosname, $netbiosalias,790 $hostname, 775 791 $domain, $realm, $functional_level, 776 $swiface, $password, $kdc_ipv4); 777 778 $ctx->{tmpdir} = "$ctx->{prefix_abs}/tmp"; 779 push(@{$ctx->{directories}}, "$ctx->{tmpdir}"); 780 push(@{$ctx->{directories}}, "$ctx->{tmpdir}/test1"); 781 push(@{$ctx->{directories}}, "$ctx->{tmpdir}/test2"); 792 $password, $kdc_ipv4, $kdc_ipv6); 793 794 if (defined($extra_provision_options)) { 795 push (@{$ctx->{provision_options}}, @{$extra_provision_options}); 796 } else { 797 push (@{$ctx->{provision_options}}, "--use-ntvfs"); 798 } 799 800 $ctx->{share} = "$ctx->{prefix_abs}/share"; 801 push(@{$ctx->{directories}}, "$ctx->{share}"); 802 push(@{$ctx->{directories}}, "$ctx->{share}/test1"); 803 push(@{$ctx->{directories}}, "$ctx->{share}/test2"); 804 805 # precreate directories for printer drivers 806 push(@{$ctx->{directories}}, "$ctx->{share}/W32X86"); 807 push(@{$ctx->{directories}}, "$ctx->{share}/x64"); 808 push(@{$ctx->{directories}}, "$ctx->{share}/WIN40"); 809 782 810 my $msdfs = "no"; 783 811 $msdfs = "yes" if ($server_role eq "domain controller"); … … 786 814 max xmit = 32K 787 815 server max protocol = SMB2 788 $extra_smbconf_options789 816 host msdfs = $msdfs 790 817 lanman auth = yes 818 allow nt4 crypto = yes 819 820 # fruit:copyfile is a global option 821 fruit:copyfile = yes 822 823 $extra_smbconf_options 791 824 792 825 [tmp] 793 path = $ctx->{ tmpdir}826 path = $ctx->{share} 794 827 read only = no 795 posix:sharedelay = 10000 828 posix:sharedelay = 100000 796 829 posix:oplocktimeout = 3 797 830 posix:writetimeupdatedelay = 500000 798 831 832 [xcopy_share] 833 path = $ctx->{share} 834 read only = no 835 posix:sharedelay = 100000 836 posix:oplocktimeout = 3 837 posix:writetimeupdatedelay = 500000 838 create mask = 777 839 force create mode = 777 840 841 [posix_share] 842 path = $ctx->{share} 843 read only = no 844 create mask = 0777 845 force create mode = 0 846 directory mask = 0777 847 force directory mode = 0 848 799 849 [test1] 800 path = $ctx->{ tmpdir}/test1850 path = $ctx->{share}/test1 801 851 read only = no 802 posix:sharedelay = 10000 852 posix:sharedelay = 100000 803 853 posix:oplocktimeout = 3 804 posix:writetimeupdatedelay = 50000 854 posix:writetimeupdatedelay = 500000 805 855 806 856 [test2] 807 path = $ctx->{ tmpdir}/test2857 path = $ctx->{share}/test2 808 858 read only = no 809 posix:sharedelay = 10000 859 posix:sharedelay = 100000 810 860 posix:oplocktimeout = 3 811 posix:writetimeupdatedelay = 50000 861 posix:writetimeupdatedelay = 500000 812 862 813 863 [cifs] 864 path = $ctx->{share}/_ignore_cifs_ 814 865 read only = no 815 866 ntvfs handler = cifs 816 867 cifs:server = $ctx->{netbiosname} 817 868 cifs:share = tmp 818 #There is no username specified here, instead the client is expected 819 #to log in with kerberos, and the serverwill use delegated credentials. 869 cifs:use-s4u2proxy = yes 870 # There is no username specified here, instead the client is expected 871 # to log in with kerberos, and the serverwill use delegated credentials. 872 # Or the server tries s4u2self/s4u2proxy to impersonate the client 820 873 821 874 [simple] 822 path = $ctx->{ tmpdir}875 path = $ctx->{share} 823 876 read only = no 824 877 ntvfs handler = simple 825 878 826 879 [sysvol] 827 path = $ctx->{ lockdir}/sysvol828 read only = yes880 path = $ctx->{statedir}/sysvol 881 read only = no 829 882 830 883 [netlogon] 831 path = $ctx->{ lockdir}/sysvol/$ctx->{dnsname}/scripts884 path = $ctx->{statedir}/sysvol/$ctx->{dnsname}/scripts 832 885 read only = no 833 886 … … 835 888 copy = simple 836 889 ntvfs handler = cifsposix 890 891 [vfs_fruit] 892 path = $ctx->{share} 893 vfs objects = catia fruit streams_xattr acl_xattr 894 ea support = yes 895 fruit:ressource = file 896 fruit:metadata = netatalk 897 fruit:locking = netatalk 898 fruit:encoding = native 899 900 $extra_smbconf_shares 837 901 "; 838 902 … … 845 909 $ldap_uri = "ldapi://$ldap_uri"; 846 910 $ctx->{ldap_uri} = $ldap_uri; 847 if ($self->{ldap} eq "fedora-ds") {848 $ctx->{sid_generator} = "backend";849 }850 911 851 912 $ctx->{ldap_instance} = lc($ctx->{netbiosname}); … … 876 937 } 877 938 878 sub provision_ member($$$)939 sub provision_s4member($$$) 879 940 { 880 941 my ($self, $prefix, $dcvars) = @_; 881 942 print "PROVISIONING MEMBER..."; 882 943 my $extra_smb_conf = " 944 passdb backend = samba_dsdb 945 winbindd:use external pipes = true 946 947 rpc_server:default = external 948 rpc_server:svcctl = embedded 949 rpc_server:srvsvc = embedded 950 rpc_server:eventlog = embedded 951 rpc_server:ntsvcs = embedded 952 rpc_server:winreg = embedded 953 rpc_server:spoolss = embedded 954 rpc_daemon:spoolssd = embedded 955 rpc_server:tcpip = no 956 "; 883 957 my $ret = $self->provision($prefix, 884 958 "member server", 885 "localmember", 886 "member3", 959 "s4member", 887 960 "SAMBADOMAIN", 888 961 "samba.example.com", 889 962 "2008", 890 3,891 963 "locMEMpass3", 892 964 $dcvars->{SERVER_IP}, 893 ""); 965 $dcvars->{SERVER_IPV6}, 966 $extra_smb_conf, "", undef); 894 967 unless ($ret) { 895 968 return undef; 896 969 } 897 970 898 my $samba_tool = $self->bindir_path("samba-tool"); 971 my $samba_tool = Samba::bindir_path($self, "samba-tool"); 972 my $cmd = ""; 973 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" "; 974 if (defined($ret->{RESOLV_WRAPPER_CONF})) { 975 $cmd .= "RESOLV_WRAPPER_CONF=\"$ret->{RESOLV_WRAPPER_CONF}\" "; 976 } else { 977 $cmd .= "RESOLV_WRAPPER_HOSTS=\"$ret->{RESOLV_WRAPPER_HOSTS}\" "; 978 } 979 $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" "; 980 $cmd .= "$samba_tool domain join $ret->{CONFIGURATION} $dcvars->{REALM} member"; 981 $cmd .= " -U$dcvars->{DC_USERNAME}\%$dcvars->{DC_PASSWORD}"; 982 $cmd .= " --machinepass=machine$ret->{PASSWORD}"; 983 984 unless (system($cmd) == 0) { 985 warn("Join failed\n$cmd"); 986 return undef; 987 } 988 989 $ret->{MEMBER_SERVER} = $ret->{SERVER}; 990 $ret->{MEMBER_SERVER_IP} = $ret->{SERVER_IP}; 991 $ret->{MEMBER_SERVER_IPV6} = $ret->{SERVER_IPV6}; 992 $ret->{MEMBER_NETBIOSNAME} = $ret->{NETBIOSNAME}; 993 $ret->{MEMBER_USERNAME} = $ret->{USERNAME}; 994 $ret->{MEMBER_PASSWORD} = $ret->{PASSWORD}; 995 996 $ret->{DC_SERVER} = $dcvars->{DC_SERVER}; 997 $ret->{DC_SERVER_IP} = $dcvars->{DC_SERVER_IP}; 998 $ret->{DC_SERVER_IPV6} = $dcvars->{DC_SERVER_IPV6}; 999 $ret->{DC_NETBIOSNAME} = $dcvars->{DC_NETBIOSNAME}; 1000 $ret->{DC_USERNAME} = $dcvars->{DC_USERNAME}; 1001 $ret->{DC_PASSWORD} = $dcvars->{DC_PASSWORD}; 1002 1003 return $ret; 1004 } 1005 1006 sub provision_rpc_proxy($$$) 1007 { 1008 my ($self, $prefix, $dcvars) = @_; 1009 print "PROVISIONING RPC PROXY..."; 1010 1011 my $extra_smbconf_options = " 1012 passdb backend = samba_dsdb 1013 1014 # rpc_proxy 1015 dcerpc_remote:binding = ncacn_ip_tcp:$dcvars->{SERVER} 1016 dcerpc endpoint servers = epmapper, remote 1017 dcerpc_remote:interfaces = rpcecho 1018 1019 [cifs_to_dc] 1020 path = /tmp/_ignore_cifs_to_dc_/_none_ 1021 read only = no 1022 ntvfs handler = cifs 1023 cifs:server = $dcvars->{SERVER} 1024 cifs:share = cifs 1025 cifs:use-s4u2proxy = yes 1026 # There is no username specified here, instead the client is expected 1027 # to log in with kerberos, and the serverwill use delegated credentials. 1028 # Or the server tries s4u2self/s4u2proxy to impersonate the client 1029 1030 "; 1031 1032 my $ret = $self->provision($prefix, 1033 "member server", 1034 "localrpcproxy", 1035 "SAMBADOMAIN", 1036 "samba.example.com", 1037 "2008", 1038 "locRPCproxypass4", 1039 $dcvars->{SERVER_IP}, 1040 $dcvars->{SERVER_IPV6}, 1041 $extra_smbconf_options, "", undef); 1042 1043 unless ($ret) { 1044 return undef; 1045 } 1046 1047 my $samba_tool = Samba::bindir_path($self, "samba-tool"); 1048 1049 # The joind runs in the context of the rpc_proxy/member for now 1050 my $cmd = ""; 1051 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" "; 1052 if (defined($ret->{RESOLV_WRAPPER_CONF})) { 1053 $cmd .= "RESOLV_WRAPPER_CONF=\"$ret->{RESOLV_WRAPPER_CONF}\" "; 1054 } else { 1055 $cmd .= "RESOLV_WRAPPER_HOSTS=\"$ret->{RESOLV_WRAPPER_HOSTS}\" "; 1056 } 1057 $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" "; 1058 $cmd .= "$samba_tool domain join $ret->{CONFIGURATION} $dcvars->{REALM} member"; 1059 $cmd .= " -U$dcvars->{DC_USERNAME}\%$dcvars->{DC_PASSWORD}"; 1060 $cmd .= " --machinepass=machine$ret->{PASSWORD}"; 1061 1062 unless (system($cmd) == 0) { 1063 warn("Join failed\n$cmd"); 1064 return undef; 1065 } 1066 1067 # Setting up delegation runs in the context of the DC for now 1068 $cmd = ""; 1069 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$dcvars->{SOCKET_WRAPPER_DEFAULT_IFACE}\" "; 1070 $cmd .= "KRB5_CONFIG=\"$dcvars->{KRB5_CONFIG}\" "; 1071 $cmd .= "$samba_tool delegation for-any-protocol '$ret->{NETBIOSNAME}\$' on"; 1072 $cmd .= " $dcvars->{CONFIGURATION}"; 1073 print $cmd; 1074 1075 unless (system($cmd) == 0) { 1076 warn("Delegation failed\n$cmd"); 1077 return undef; 1078 } 1079 1080 # Setting up delegation runs in the context of the DC for now 1081 $cmd = ""; 1082 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$dcvars->{SOCKET_WRAPPER_DEFAULT_IFACE}\" "; 1083 $cmd .= "KRB5_CONFIG=\"$dcvars->{KRB5_CONFIG}\" "; 1084 $cmd .= "$samba_tool delegation add-service '$ret->{NETBIOSNAME}\$' cifs/$dcvars->{SERVER}"; 1085 $cmd .= " $dcvars->{CONFIGURATION}"; 1086 1087 unless (system($cmd) == 0) { 1088 warn("Delegation failed\n$cmd"); 1089 return undef; 1090 } 1091 1092 $ret->{RPC_PROXY_SERVER} = $ret->{SERVER}; 1093 $ret->{RPC_PROXY_SERVER_IP} = $ret->{SERVER_IP}; 1094 $ret->{RPC_PROXY_SERVER_IPV6} = $ret->{SERVER_IPV6}; 1095 $ret->{RPC_PROXY_NETBIOSNAME} = $ret->{NETBIOSNAME}; 1096 $ret->{RPC_PROXY_USERNAME} = $ret->{USERNAME}; 1097 $ret->{RPC_PROXY_PASSWORD} = $ret->{PASSWORD}; 1098 1099 $ret->{DC_SERVER} = $dcvars->{DC_SERVER}; 1100 $ret->{DC_SERVER_IP} = $dcvars->{DC_SERVER_IP}; 1101 $ret->{DC_SERVER_IPV6} = $dcvars->{DC_SERVER_IPV6}; 1102 $ret->{DC_NETBIOSNAME} = $dcvars->{DC_NETBIOSNAME}; 1103 $ret->{DC_USERNAME} = $dcvars->{DC_USERNAME}; 1104 $ret->{DC_PASSWORD} = $dcvars->{DC_PASSWORD}; 1105 1106 return $ret; 1107 } 1108 1109 sub provision_promoted_dc($$$) 1110 { 1111 my ($self, $prefix, $dcvars) = @_; 1112 print "PROVISIONING PROMOTED DC..."; 1113 1114 # We do this so that we don't run the provision. That's the job of 'samba-tool domain dcpromo'. 1115 my $ctx = $self->provision_raw_prepare($prefix, "domain controller", 1116 "promotedvdc", 1117 "SAMBADOMAIN", 1118 "samba.example.com", 1119 "2008", 1120 $dcvars->{PASSWORD}, 1121 $dcvars->{SERVER_IP}, 1122 $dcvars->{SERVER_IPV6}); 1123 1124 push (@{$ctx->{provision_options}}, "--use-ntvfs"); 1125 1126 $ctx->{smb_conf_extra_options} = " 1127 max xmit = 32K 1128 server max protocol = SMB2 1129 1130 [sysvol] 1131 path = $ctx->{statedir}/sysvol 1132 read only = yes 1133 1134 [netlogon] 1135 path = $ctx->{statedir}/sysvol/$ctx->{dnsname}/scripts 1136 read only = no 1137 1138 "; 1139 1140 my $ret = $self->provision_raw_step1($ctx); 1141 unless ($ret) { 1142 return undef; 1143 } 1144 1145 my $samba_tool = Samba::bindir_path($self, "samba-tool"); 1146 my $cmd = ""; 1147 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" "; 1148 if (defined($ret->{RESOLV_WRAPPER_CONF})) { 1149 $cmd .= "RESOLV_WRAPPER_CONF=\"$ret->{RESOLV_WRAPPER_CONF}\" "; 1150 } else { 1151 $cmd .= "RESOLV_WRAPPER_HOSTS=\"$ret->{RESOLV_WRAPPER_HOSTS}\" "; 1152 } 1153 $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" "; 1154 $cmd .= "$samba_tool domain join $ret->{CONFIGURATION} $dcvars->{REALM} MEMBER --realm=$dcvars->{REALM}"; 1155 $cmd .= " -U$dcvars->{DC_USERNAME}\%$dcvars->{DC_PASSWORD}"; 1156 $cmd .= " --machinepass=machine$ret->{PASSWORD}"; 1157 1158 unless (system($cmd) == 0) { 1159 warn("Join failed\n$cmd"); 1160 return undef; 1161 } 1162 1163 my $samba_tool = Samba::bindir_path($self, "samba-tool"); 899 1164 my $cmd = ""; 900 1165 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" "; 901 1166 $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" "; 902 $cmd .= "$samba_tool join $ret->{CONFIGURATION} $dcvars->{REALM} member";1167 $cmd .= "$samba_tool domain dcpromo $ret->{CONFIGURATION} $dcvars->{REALM} DC --realm=$dcvars->{REALM}"; 903 1168 $cmd .= " -U$dcvars->{DC_USERNAME}\%$dcvars->{DC_PASSWORD}"; 1169 $cmd .= " --machinepass=machine$ret->{PASSWORD} --use-ntvfs --dns-backend=BIND9_DLZ"; 904 1170 905 1171 unless (system($cmd) == 0) { … … 908 1174 } 909 1175 910 $ret->{MEMBER_SERVER} = $ret->{SERVER}; 911 $ret->{MEMBER_SERVER_IP} = $ret->{SERVER_IP}; 912 $ret->{MEMBER_NETBIOSNAME} = $ret->{NETBIOSNAME}; 913 $ret->{MEMBER_NETBIOSALIAS} = $ret->{NETBIOSALIAS}; 914 $ret->{MEMBER_USERNAME} = $ret->{USERNAME}; 915 $ret->{MEMBER_PASSWORD} = $ret->{PASSWORD}; 1176 $ret->{PROMOTED_DC_SERVER} = $ret->{SERVER}; 1177 $ret->{PROMOTED_DC_SERVER_IP} = $ret->{SERVER_IP}; 1178 $ret->{PROMOTED_DC_SERVER_IPV6} = $ret->{SERVER_IPV6}; 1179 $ret->{PROMOTED_DC_NETBIOSNAME} = $ret->{NETBIOSNAME}; 916 1180 917 1181 $ret->{DC_SERVER} = $dcvars->{DC_SERVER}; 918 1182 $ret->{DC_SERVER_IP} = $dcvars->{DC_SERVER_IP}; 1183 $ret->{DC_SERVER_IPV6} = $dcvars->{DC_SERVER_IPV6}; 919 1184 $ret->{DC_NETBIOSNAME} = $dcvars->{DC_NETBIOSNAME}; 920 $ret->{DC_NETBIOSALIAS} = $dcvars->{DC_NETBIOSALIAS};921 1185 $ret->{DC_USERNAME} = $dcvars->{DC_USERNAME}; 922 1186 $ret->{DC_PASSWORD} = $dcvars->{DC_PASSWORD}; … … 925 1189 } 926 1190 927 sub provision_ rpc_proxy($$$)1191 sub provision_vampire_dc($$$) 928 1192 { 929 1193 my ($self, $prefix, $dcvars) = @_; 930 print "PROVISIONING RPC PROXY..."; 931 932 my $extra_smbconf_options = "dcerpc_remote:binding = ncacn_ip_tcp:localdc 933 dcerpc endpoint servers = epmapper, remote 934 dcerpc_remote:interfaces = rpcecho 1194 print "PROVISIONING VAMPIRE DC..."; 1195 1196 # We do this so that we don't run the provision. That's the job of 'net vampire'. 1197 my $ctx = $self->provision_raw_prepare($prefix, "domain controller", 1198 "localvampiredc", 1199 "SAMBADOMAIN", 1200 "samba.example.com", 1201 "2008", 1202 $dcvars->{PASSWORD}, 1203 $dcvars->{SERVER_IP}, 1204 $dcvars->{SERVER_IPV6}); 1205 1206 push (@{$ctx->{provision_options}}, "--use-ntvfs"); 1207 1208 $ctx->{smb_conf_extra_options} = " 1209 max xmit = 32K 1210 server max protocol = SMB2 1211 1212 [sysvol] 1213 path = $ctx->{statedir}/sysvol 1214 read only = yes 1215 1216 [netlogon] 1217 path = $ctx->{statedir}/sysvol/$ctx->{dnsname}/scripts 1218 read only = no 1219 935 1220 "; 936 1221 1222 my $ret = $self->provision_raw_step1($ctx); 1223 unless ($ret) { 1224 return undef; 1225 } 1226 1227 my $samba_tool = Samba::bindir_path($self, "samba-tool"); 1228 my $cmd = ""; 1229 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" "; 1230 if (defined($ret->{RESOLV_WRAPPER_CONF})) { 1231 $cmd .= "RESOLV_WRAPPER_CONF=\"$ret->{RESOLV_WRAPPER_CONF}\" "; 1232 } else { 1233 $cmd .= "RESOLV_WRAPPER_HOSTS=\"$ret->{RESOLV_WRAPPER_HOSTS}\" "; 1234 } 1235 $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" "; 1236 $cmd .= "$samba_tool domain join $ret->{CONFIGURATION} $dcvars->{REALM} DC --realm=$dcvars->{REALM}"; 1237 $cmd .= " -U$dcvars->{DC_USERNAME}\%$dcvars->{DC_PASSWORD} --domain-critical-only"; 1238 $cmd .= " --machinepass=machine$ret->{PASSWORD} --use-ntvfs"; 1239 1240 unless (system($cmd) == 0) { 1241 warn("Join failed\n$cmd"); 1242 return undef; 1243 } 1244 1245 $ret->{VAMPIRE_DC_SERVER} = $ret->{SERVER}; 1246 $ret->{VAMPIRE_DC_SERVER_IP} = $ret->{SERVER_IP}; 1247 $ret->{VAMPIRE_DC_SERVER_IPV6} = $ret->{SERVER_IPV6}; 1248 $ret->{VAMPIRE_DC_NETBIOSNAME} = $ret->{NETBIOSNAME}; 1249 1250 $ret->{DC_SERVER} = $dcvars->{DC_SERVER}; 1251 $ret->{DC_SERVER_IP} = $dcvars->{DC_SERVER_IP}; 1252 $ret->{DC_SERVER_IPV6} = $dcvars->{DC_SERVER_IPV6}; 1253 $ret->{DC_NETBIOSNAME} = $dcvars->{DC_NETBIOSNAME}; 1254 $ret->{DC_USERNAME} = $dcvars->{DC_USERNAME}; 1255 $ret->{DC_PASSWORD} = $dcvars->{DC_PASSWORD}; 1256 $ret->{DC_REALM} = $dcvars->{DC_REALM}; 1257 1258 return $ret; 1259 } 1260 1261 sub provision_subdom_dc($$$) 1262 { 1263 my ($self, $prefix, $dcvars) = @_; 1264 print "PROVISIONING SUBDOMAIN DC..."; 1265 1266 # We do this so that we don't run the provision. That's the job of 'net vampire'. 1267 my $ctx = $self->provision_raw_prepare($prefix, "domain controller", 1268 "localsubdc", 1269 "SAMBASUBDOM", 1270 "sub.samba.example.com", 1271 "2008", 1272 $dcvars->{PASSWORD}, 1273 undef); 1274 1275 push (@{$ctx->{provision_options}}, "--use-ntvfs"); 1276 1277 $ctx->{smb_conf_extra_options} = " 1278 max xmit = 32K 1279 server max protocol = SMB2 1280 1281 [sysvol] 1282 path = $ctx->{statedir}/sysvol 1283 read only = yes 1284 1285 [netlogon] 1286 path = $ctx->{statedir}/sysvol/$ctx->{dnsname}/scripts 1287 read only = no 1288 1289 "; 1290 1291 my $ret = $self->provision_raw_step1($ctx); 1292 unless ($ret) { 1293 return undef; 1294 } 1295 1296 Samba::mk_krb5_conf($ctx); 1297 1298 my $samba_tool = Samba::bindir_path($self, "samba-tool"); 1299 my $cmd = ""; 1300 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" "; 1301 if (defined($ret->{RESOLV_WRAPPER_CONF})) { 1302 $cmd .= "RESOLV_WRAPPER_CONF=\"$ret->{RESOLV_WRAPPER_CONF}\" "; 1303 } else { 1304 $cmd .= "RESOLV_WRAPPER_HOSTS=\"$ret->{RESOLV_WRAPPER_HOSTS}\" "; 1305 } 1306 $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" "; 1307 $cmd .= "$samba_tool domain join $ret->{CONFIGURATION} $ctx->{dnsname} subdomain "; 1308 $cmd .= "--parent-domain=$dcvars->{REALM} -U$dcvars->{DC_USERNAME}\@$dcvars->{REALM}\%$dcvars->{DC_PASSWORD}"; 1309 $cmd .= " --machinepass=machine$ret->{PASSWORD} --use-ntvfs"; 1310 $cmd .= " --adminpass=$ret->{PASSWORD}"; 1311 1312 unless (system($cmd) == 0) { 1313 warn("Join failed\n$cmd"); 1314 return undef; 1315 } 1316 1317 $ret->{SUBDOM_DC_SERVER} = $ret->{SERVER}; 1318 $ret->{SUBDOM_DC_SERVER_IP} = $ret->{SERVER_IP}; 1319 $ret->{SUBDOM_DC_SERVER_IPV6} = $ret->{SERVER_IPV6}; 1320 $ret->{SUBDOM_DC_NETBIOSNAME} = $ret->{NETBIOSNAME}; 1321 1322 $ret->{DC_SERVER} = $dcvars->{DC_SERVER}; 1323 $ret->{DC_SERVER_IP} = $dcvars->{DC_SERVER_IP}; 1324 $ret->{DC_SERVER_IPV6} = $dcvars->{DC_SERVER_IPV6}; 1325 $ret->{DC_NETBIOSNAME} = $dcvars->{DC_NETBIOSNAME}; 1326 $ret->{DC_USERNAME} = $dcvars->{DC_USERNAME}; 1327 $ret->{DC_PASSWORD} = $dcvars->{DC_PASSWORD}; 1328 1329 return $ret; 1330 } 1331 1332 sub provision_ad_dc_ntvfs($$) 1333 { 1334 my ($self, $prefix) = @_; 1335 1336 # We keep the old 'winbind' name here in server services to 1337 # ensure upgrades which used that name still work with the now 1338 # alias. 1339 1340 print "PROVISIONING AD DC (NTVFS)..."; 1341 my $extra_conf_options = "netbios aliases = localDC1-a 1342 server services = +winbind -winbindd 1343 ldap server require strong auth = allow_sasl_over_tls 1344 "; 937 1345 my $ret = $self->provision($prefix, 938 "member server", 939 "localrpcproxy", 940 "rpcproxy4", 1346 "domain controller", 1347 "localdc", 941 1348 "SAMBADOMAIN", 942 1349 "samba.example.com", 943 1350 "2008", 944 4, 945 "locRPCproxypass4", 946 $dcvars->{SERVER_IP}, 947 $extra_smbconf_options); 948 949 unless ($ret) { 950 return undef; 951 } 952 953 my $samba_tool = $self->bindir_path("samba-tool"); 954 my $cmd = ""; 955 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" "; 956 $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" "; 957 $cmd .= "$samba_tool join $ret->{CONFIGURATION} $dcvars->{REALM} member"; 958 $cmd .= " -U$dcvars->{DC_USERNAME}\%$dcvars->{DC_PASSWORD}"; 959 960 unless (system($cmd) == 0) { 961 warn("Join failed\n$cmd"); 962 return undef; 963 } 964 965 $ret->{RPC_PROXY_SERVER} = $ret->{SERVER}; 966 $ret->{RPC_PROXY_SERVER_IP} = $ret->{SERVER_IP}; 967 $ret->{RPC_PROXY_NETBIOSNAME} = $ret->{NETBIOSNAME}; 968 $ret->{RPC_PROXY_NETBIOSALIAS} = $ret->{NETBIOSALIAS}; 969 $ret->{RPC_PROXY_USERNAME} = $ret->{USERNAME}; 970 $ret->{RPC_PROXY_PASSWORD} = $ret->{PASSWORD}; 1351 "locDCpass1", 1352 undef, 1353 undef, 1354 $extra_conf_options, 1355 "", 1356 undef); 1357 1358 return undef unless(defined $ret); 1359 unless($self->add_wins_config("$prefix/private")) { 1360 warn("Unable to add wins configuration"); 1361 return undef; 1362 } 1363 $ret->{NETBIOSALIAS} = "localdc1-a"; 1364 $ret->{DC_SERVER} = $ret->{SERVER}; 1365 $ret->{DC_SERVER_IP} = $ret->{SERVER_IP}; 1366 $ret->{DC_SERVER_IPV6} = $ret->{SERVER_IPV6}; 1367 $ret->{DC_NETBIOSNAME} = $ret->{NETBIOSNAME}; 1368 $ret->{DC_USERNAME} = $ret->{USERNAME}; 1369 $ret->{DC_PASSWORD} = $ret->{PASSWORD}; 1370 $ret->{DC_REALM} = $ret->{REALM}; 971 1371 972 1372 return $ret; 973 1373 } 974 1374 975 sub provision_vampire_dc($$$) 1375 sub provision_fl2000dc($$) 1376 { 1377 my ($self, $prefix) = @_; 1378 1379 print "PROVISIONING DC WITH FOREST LEVEL 2000..."; 1380 my $extra_conf_options = " 1381 spnego:simulate_w2k=yes 1382 ntlmssp_server:force_old_spnego=yes 1383 "; 1384 my $ret = $self->provision($prefix, 1385 "domain controller", 1386 "dc5", 1387 "SAMBA2000", 1388 "samba2000.example.com", 1389 "2000", 1390 "locDCpass5", 1391 undef, 1392 undef, 1393 $extra_conf_options, 1394 "", 1395 undef); 1396 1397 unless($self->add_wins_config("$prefix/private")) { 1398 warn("Unable to add wins configuration"); 1399 return undef; 1400 } 1401 $ret->{DC_SERVER} = $ret->{SERVER}; 1402 $ret->{DC_SERVER_IP} = $ret->{SERVER_IP}; 1403 $ret->{DC_SERVER_IPV6} = $ret->{SERVER_IPV6}; 1404 $ret->{DC_NETBIOSNAME} = $ret->{NETBIOSNAME}; 1405 $ret->{DC_USERNAME} = $ret->{USERNAME}; 1406 $ret->{DC_PASSWORD} = $ret->{PASSWORD}; 1407 $ret->{DC_REALM} = $ret->{REALM}; 1408 1409 return $ret; 1410 } 1411 1412 sub provision_fl2003dc($$$) 976 1413 { 977 1414 my ($self, $prefix, $dcvars) = @_; 978 print "PROVISIONING VAMPIRE DC..."; 979 980 # We do this so that we don't run the provision. That's the job of 'net vampire'. 1415 1416 print "PROVISIONING DC WITH FOREST LEVEL 2003..."; 1417 my $extra_conf_options = "allow dns updates = nonsecure and secure"; 1418 my $ret = $self->provision($prefix, 1419 "domain controller", 1420 "dc6", 1421 "SAMBA2003", 1422 "samba2003.example.com", 1423 "2003", 1424 "locDCpass6", 1425 undef, 1426 undef, 1427 $extra_conf_options, 1428 "", 1429 undef); 1430 1431 unless (defined $ret) { 1432 return undef; 1433 } 1434 1435 $ret->{DC_SERVER} = $ret->{SERVER}; 1436 $ret->{DC_SERVER_IP} = $ret->{SERVER_IP}; 1437 $ret->{DC_SERVER_IPV6} = $ret->{SERVER_IPV6}; 1438 $ret->{DC_NETBIOSNAME} = $ret->{NETBIOSNAME}; 1439 $ret->{DC_USERNAME} = $ret->{USERNAME}; 1440 $ret->{DC_PASSWORD} = $ret->{PASSWORD}; 1441 1442 my @samba_tool_options; 1443 push (@samba_tool_options, Samba::bindir_path($self, "samba-tool")); 1444 push (@samba_tool_options, "domain"); 1445 push (@samba_tool_options, "passwordsettings"); 1446 push (@samba_tool_options, "set"); 1447 push (@samba_tool_options, "--configfile=$ret->{SERVERCONFFILE}"); 1448 push (@samba_tool_options, "--min-pwd-age=0"); 1449 push (@samba_tool_options, "--history-length=1"); 1450 1451 my $samba_tool_cmd = join(" ", @samba_tool_options); 1452 1453 unless (system($samba_tool_cmd) == 0) { 1454 warn("Unable to set min password age to 0: \n$samba_tool_cmd\n"); 1455 return undef; 1456 } 1457 1458 return $ret; 1459 1460 unless($self->add_wins_config("$prefix/private")) { 1461 warn("Unable to add wins configuration"); 1462 return undef; 1463 } 1464 1465 return $ret; 1466 } 1467 1468 sub provision_fl2008r2dc($$$) 1469 { 1470 my ($self, $prefix, $dcvars) = @_; 1471 1472 print "PROVISIONING DC WITH FOREST LEVEL 2008r2..."; 1473 my $extra_conf_options = "ldap server require strong auth = no"; 1474 my $ret = $self->provision($prefix, 1475 "domain controller", 1476 "dc7", 1477 "SAMBA2008R2", 1478 "samba2008R2.example.com", 1479 "2008_R2", 1480 "locDCpass7", 1481 undef, 1482 undef, 1483 $extra_conf_options, 1484 "", 1485 undef); 1486 1487 unless ($self->add_wins_config("$prefix/private")) { 1488 warn("Unable to add wins configuration"); 1489 return undef; 1490 } 1491 $ret->{DC_SERVER} = $ret->{SERVER}; 1492 $ret->{DC_SERVER_IP} = $ret->{SERVER_IP}; 1493 $ret->{DC_SERVER_IPV6} = $ret->{SERVER_IPV6}; 1494 $ret->{DC_NETBIOSNAME} = $ret->{NETBIOSNAME}; 1495 $ret->{DC_USERNAME} = $ret->{USERNAME}; 1496 $ret->{DC_PASSWORD} = $ret->{PASSWORD}; 1497 $ret->{DC_REALM} = $ret->{REALM}; 1498 1499 return $ret; 1500 } 1501 1502 1503 sub provision_rodc($$$) 1504 { 1505 my ($self, $prefix, $dcvars) = @_; 1506 print "PROVISIONING RODC..."; 1507 1508 # We do this so that we don't run the provision. That's the job of 'net join RODC'. 981 1509 my $ctx = $self->provision_raw_prepare($prefix, "domain controller", 982 "localvampiredc", 983 "dc2", 1510 "rodc", 984 1511 "SAMBADOMAIN", 985 1512 "samba.example.com", 986 1513 "2008", 987 2, $dcvars->{PASSWORD}, 988 $dcvars->{SERVER_IP}); 1514 $dcvars->{PASSWORD}, 1515 $dcvars->{SERVER_IP}, 1516 $dcvars->{SERVER_IPV6}); 1517 unless ($ctx) { 1518 return undef; 1519 } 1520 1521 push (@{$ctx->{provision_options}}, "--use-ntvfs"); 1522 1523 $ctx->{share} = "$ctx->{prefix_abs}/share"; 1524 push(@{$ctx->{directories}}, "$ctx->{share}"); 989 1525 990 1526 $ctx->{smb_conf_extra_options} = " … … 993 1529 994 1530 [sysvol] 995 path = $ctx->{ lockdir}/sysvol1531 path = $ctx->{statedir}/sysvol 996 1532 read only = yes 997 1533 998 1534 [netlogon] 999 path = $ctx->{lockdir}/sysvol/$ctx->{dnsname}/scripts 1000 read only = no 1001 1002 "; 1003 1004 my $ret = $self->provision_raw_step1($ctx); 1005 unless ($ret) { 1006 return undef; 1007 } 1008 1009 my $samba_tool = $self->bindir_path("samba-tool"); 1010 my $cmd = ""; 1011 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" "; 1012 $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" "; 1013 $cmd .= "$samba_tool join $ret->{CONFIGURATION} $dcvars->{REALM} DC --realm=$dcvars->{REALM}"; 1014 $cmd .= " -U$dcvars->{DC_USERNAME}\%$dcvars->{DC_PASSWORD}"; 1015 1016 unless (system($cmd) == 0) { 1017 warn("Join failed\n$cmd"); 1018 return undef; 1019 } 1020 1021 $ret->{VAMPIRE_DC_SERVER} = $ret->{SERVER}; 1022 $ret->{VAMPIRE_DC_SERVER_IP} = $ret->{SERVER_IP}; 1023 $ret->{VAMPIRE_DC_NETBIOSNAME} = $ret->{NETBIOSNAME}; 1024 $ret->{VAMPIRE_DC_NETBIOSALIAS} = $ret->{NETBIOSALIAS}; 1025 1026 $ret->{DC_SERVER} = $dcvars->{DC_SERVER}; 1027 $ret->{DC_SERVER_IP} = $dcvars->{DC_SERVER_IP}; 1028 $ret->{DC_NETBIOSNAME} = $dcvars->{DC_NETBIOSNAME}; 1029 $ret->{DC_NETBIOSALIAS} = $dcvars->{DC_NETBIOSALIAS}; 1030 $ret->{DC_USERNAME} = $dcvars->{DC_USERNAME}; 1031 $ret->{DC_PASSWORD} = $dcvars->{DC_PASSWORD}; 1032 1033 return $ret; 1034 } 1035 1036 sub provision_dc($$) 1037 { 1038 my ($self, $prefix) = @_; 1039 1040 print "PROVISIONING DC..."; 1041 my $ret = $self->provision($prefix, 1042 "domain controller", 1043 "localdc", 1044 "dc1", 1045 "SAMBADOMAIN", 1046 "samba.example.com", 1047 "2008", 1048 1, 1049 "locDCpass1", 1050 "127.0.0.1", ""); 1051 1052 return undef unless(defined $ret); 1053 unless($self->add_wins_config("$prefix/private")) { 1054 warn("Unable to add wins configuration"); 1055 return undef; 1056 } 1057 1058 $ret->{DC_SERVER} = $ret->{SERVER}; 1059 $ret->{DC_SERVER_IP} = $ret->{SERVER_IP}; 1060 $ret->{DC_NETBIOSNAME} = $ret->{NETBIOSNAME}; 1061 $ret->{DC_NETBIOSALIAS} = $ret->{NETBIOSALIAS}; 1062 $ret->{DC_USERNAME} = $ret->{USERNAME}; 1063 $ret->{DC_PASSWORD} = $ret->{PASSWORD}; 1064 1065 return $ret; 1066 } 1067 1068 sub provision_fl2000dc($$) 1069 { 1070 my ($self, $prefix) = @_; 1071 1072 print "PROVISIONING DC..."; 1073 my $ret = $self->provision($prefix, 1074 "domain controller", 1075 "dc5", 1076 "localfl2000dc", 1077 "SAMBA2000", 1078 "samba2000.example.com", 1079 "2000", 1080 5, 1081 "locDCpass5", 1082 "127.0.0.5", ""); 1083 1084 unless($self->add_wins_config("$prefix/private")) { 1085 warn("Unable to add wins configuration"); 1086 return undef; 1087 } 1088 1089 return $ret; 1090 } 1091 1092 sub provision_fl2003dc($$) 1093 { 1094 my ($self, $prefix) = @_; 1095 1096 print "PROVISIONING DC..."; 1097 my $ret = $self->provision($prefix, 1098 "domain controller", 1099 "dc6", 1100 "localfl2003dc", 1101 "SAMBA2003", 1102 "samba2003.example.com", 1103 "2003", 1104 6, 1105 "locDCpass6", 1106 "127.0.0.6", ""); 1107 1108 unless($self->add_wins_config("$prefix/private")) { 1109 warn("Unable to add wins configuration"); 1110 return undef; 1111 } 1112 1113 return $ret; 1114 } 1115 1116 sub provision_fl2008r2dc($$) 1117 { 1118 my ($self, $prefix) = @_; 1119 1120 print "PROVISIONING DC..."; 1121 my $ret = $self->provision($prefix, 1122 "domain controller", 1123 "dc7", 1124 "localfl2000r2dc", 1125 "SAMBA2008R2", 1126 "samba2008R2.example.com", 1127 "2008_R2", 1128 7, 1129 "locDCpass7", 1130 "127.0.0.7", ""); 1131 1132 unless ($self->add_wins_config("$prefix/private")) { 1133 warn("Unable to add wins configuration"); 1134 return undef; 1135 } 1136 1137 return $ret; 1138 } 1139 1140 1141 sub provision_rodc($$$) 1142 { 1143 my ($self, $prefix, $dcvars) = @_; 1144 print "PROVISIONING RODC..."; 1145 1146 # We do this so that we don't run the provision. That's the job of 'net join RODC'. 1147 my $ctx = $self->provision_raw_prepare($prefix, "domain controller", 1148 "rodc", 1149 "dc8", 1150 "SAMBADOMAIN", 1151 "samba.example.com", 1152 "2008", 1153 8, $dcvars->{PASSWORD}, 1154 $dcvars->{SERVER_IP}); 1155 unless ($ctx) { 1156 return undef; 1157 } 1158 1159 $ctx->{tmpdir} = "$ctx->{prefix_abs}/tmp"; 1160 push(@{$ctx->{directories}}, "$ctx->{tmpdir}"); 1161 1162 $ctx->{smb_conf_extra_options} = " 1163 max xmit = 32K 1164 server max protocol = SMB2 1165 1166 [sysvol] 1167 path = $ctx->{lockdir}/sysvol 1535 path = $ctx->{statedir}/sysvol/$ctx->{dnsname}/scripts 1168 1536 read only = yes 1169 1537 1170 [netlogon]1171 path = $ctx->{lockdir}/sysvol/$ctx->{dnsname}/scripts1172 read only = yes1173 1174 1538 [tmp] 1175 path = $ctx->{ tmpdir}1539 path = $ctx->{share} 1176 1540 read only = no 1177 1541 posix:sharedelay = 10000 1178 1542 posix:oplocktimeout = 3 1179 posix:writetimeupdatedelay = 50000 01543 posix:writetimeupdatedelay = 50000 1180 1544 1181 1545 "; … … 1186 1550 } 1187 1551 1188 my $samba_tool = $self->bindir_path("samba-tool");1552 my $samba_tool = Samba::bindir_path($self, "samba-tool"); 1189 1553 my $cmd = ""; 1190 1554 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" "; 1555 if (defined($ret->{RESOLV_WRAPPER_CONF})) { 1556 $cmd .= "RESOLV_WRAPPER_CONF=\"$ret->{RESOLV_WRAPPER_CONF}\" "; 1557 } else { 1558 $cmd .= "RESOLV_WRAPPER_HOSTS=\"$ret->{RESOLV_WRAPPER_HOSTS}\" "; 1559 } 1191 1560 $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" "; 1192 $cmd .= "$samba_tool join $ret->{CONFIGURATION} $dcvars->{REALM} RODC";1561 $cmd .= "$samba_tool domain join $ret->{CONFIGURATION} $dcvars->{REALM} RODC"; 1193 1562 $cmd .= " -U$dcvars->{DC_USERNAME}\%$dcvars->{DC_PASSWORD}"; 1563 $cmd .= " --server=$dcvars->{DC_SERVER} --use-ntvfs"; 1564 1565 unless (system($cmd) == 0) { 1566 warn("RODC join failed\n$cmd"); 1567 return undef; 1568 } 1569 1570 # This ensures deterministic behaviour for tests that want to have the 'testallowed account' 1571 # user password verified on the RODC 1572 my $testallowed_account = "testallowed account"; 1573 $cmd = "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" "; 1574 $cmd .= "$samba_tool rodc preload '$testallowed_account' $ret->{CONFIGURATION}"; 1194 1575 $cmd .= " --server=$dcvars->{DC_SERVER}"; 1195 1576 … … 1203 1584 # the proxy code 1204 1585 $ctx->{kdc_ipv4} = $ret->{SERVER_IP}; 1205 $self->mk_krb5_conf($ctx); 1586 $ctx->{kdc_ipv6} = $ret->{SERVER_IPV6}; 1587 Samba::mk_krb5_conf($ctx); 1206 1588 1207 1589 $ret->{RODC_DC_SERVER} = $ret->{SERVER}; 1208 1590 $ret->{RODC_DC_SERVER_IP} = $ret->{SERVER_IP}; 1591 $ret->{RODC_DC_SERVER_IPV6} = $ret->{SERVER_IPV6}; 1209 1592 $ret->{RODC_DC_NETBIOSNAME} = $ret->{NETBIOSNAME}; 1210 $ret->{RODC_DC_NETBIOSALIAS} = $ret->{NETBIOSALIAS};1211 1593 1212 1594 $ret->{DC_SERVER} = $dcvars->{DC_SERVER}; 1213 1595 $ret->{DC_SERVER_IP} = $dcvars->{DC_SERVER_IP}; 1596 $ret->{DC_SERVER_IPV6} = $dcvars->{DC_SERVER_IPV6}; 1214 1597 $ret->{DC_NETBIOSNAME} = $dcvars->{DC_NETBIOSNAME}; 1215 $ret->{DC_NETBIOSALIAS} = $dcvars->{DC_NETBIOSALIAS};1216 1598 $ret->{DC_USERNAME} = $dcvars->{DC_USERNAME}; 1217 1599 $ret->{DC_PASSWORD} = $dcvars->{DC_PASSWORD}; … … 1220 1602 } 1221 1603 1604 sub provision_ad_dc($$) 1605 { 1606 my ($self, $prefix) = @_; 1607 1608 my $prefix_abs = abs_path($prefix); 1609 1610 my $bindir_abs = abs_path($self->{bindir}); 1611 my $lockdir="$prefix_abs/lockdir"; 1612 my $conffile="$prefix_abs/etc/smb.conf"; 1613 1614 my $extra_smbconf_options = " 1615 server services = -smb +s3fs 1616 xattr_tdb:file = $prefix_abs/statedir/xattr.tdb 1617 1618 dbwrap_tdb_mutexes:* = yes 1619 1620 kernel oplocks = no 1621 kernel change notify = no 1622 1623 logging = file 1624 printing = bsd 1625 printcap name = /dev/null 1626 1627 max protocol = SMB3 1628 read only = no 1629 server signing = auto 1630 1631 smbd:sharedelay = 100000 1632 smbd:writetimeupdatedelay = 500000 1633 create mask = 755 1634 dos filemode = yes 1635 1636 dcerpc endpoint servers = -winreg -srvsvc 1637 1638 printcap name = /dev/null 1639 1640 addprinter command = $ENV{SRCDIR_ABS}/source3/script/tests/printing/modprinter.pl -a -s $conffile -- 1641 deleteprinter command = $ENV{SRCDIR_ABS}/source3/script/tests/printing/modprinter.pl -d -s $conffile -- 1642 1643 printing = vlp 1644 print command = $bindir_abs/vlp tdbfile=$lockdir/vlp.tdb print %p %s 1645 lpq command = $bindir_abs/vlp tdbfile=$lockdir/vlp.tdb lpq %p 1646 lp rm command = $bindir_abs/vlp tdbfile=$lockdir/vlp.tdb lprm %p %j 1647 lp pause command = $bindir_abs/vlp tdbfile=$lockdir/vlp.tdb lppause %p %j 1648 lp resume command = $bindir_abs/vlp tdbfile=$lockdir/vlp.tdb lpresume %p %j 1649 queue pause command = $bindir_abs/vlp tdbfile=$lockdir/vlp.tdb queuepause %p 1650 queue resume command = $bindir_abs/vlp tdbfile=$lockdir/vlp.tdb queueresume %p 1651 lpq cache time = 0 1652 print notify backchannel = yes 1653 "; 1654 1655 my $extra_smbconf_shares = " 1656 1657 [tmpenc] 1658 copy = tmp 1659 smb encrypt = required 1660 1661 [tmpcase] 1662 copy = tmp 1663 case sensitive = yes 1664 1665 [tmpguest] 1666 copy = tmp 1667 guest ok = yes 1668 1669 [hideunread] 1670 copy = tmp 1671 hide unreadable = yes 1672 1673 [durable] 1674 copy = tmp 1675 kernel share modes = no 1676 kernel oplocks = no 1677 posix locking = no 1678 1679 [print\$] 1680 copy = tmp 1681 1682 [print1] 1683 copy = tmp 1684 printable = yes 1685 1686 [print2] 1687 copy = print1 1688 [print3] 1689 copy = print1 1690 [lp] 1691 copy = print1 1692 "; 1693 1694 print "PROVISIONING AD DC..."; 1695 my $ret = $self->provision($prefix, 1696 "domain controller", 1697 "addc", 1698 "ADDOMAIN", 1699 "addom.samba.example.com", 1700 "2008", 1701 "locDCpass1", 1702 undef, 1703 undef, 1704 $extra_smbconf_options, 1705 $extra_smbconf_shares, 1706 undef); 1707 1708 return undef unless(defined $ret); 1709 unless($self->add_wins_config("$prefix/private")) { 1710 warn("Unable to add wins configuration"); 1711 return undef; 1712 } 1713 1714 $ret->{DC_SERVER} = $ret->{SERVER}; 1715 $ret->{DC_SERVER_IP} = $ret->{SERVER_IP}; 1716 $ret->{DC_SERVER_IPV6} = $ret->{SERVER_IPV6}; 1717 $ret->{DC_NETBIOSNAME} = $ret->{NETBIOSNAME}; 1718 $ret->{DC_USERNAME} = $ret->{USERNAME}; 1719 $ret->{DC_PASSWORD} = $ret->{PASSWORD}; 1720 1721 return $ret; 1722 } 1723 1724 sub provision_chgdcpass($$) 1725 { 1726 my ($self, $prefix) = @_; 1727 1728 print "PROVISIONING CHGDCPASS..."; 1729 my $extra_provision_options = undef; 1730 push (@{$extra_provision_options}, "--dns-backend=BIND9_DLZ"); 1731 my $ret = $self->provision($prefix, 1732 "domain controller", 1733 "chgdcpass", 1734 "CHDCDOMAIN", 1735 "chgdcpassword.samba.example.com", 1736 "2008", 1737 "chgDCpass1", 1738 undef, 1739 undef, 1740 "", 1741 "", 1742 $extra_provision_options); 1743 1744 return undef unless(defined $ret); 1745 unless($self->add_wins_config("$prefix/private")) { 1746 warn("Unable to add wins configuration"); 1747 return undef; 1748 } 1749 1750 # Remove secrets.tdb from this environment to test that we 1751 # still start up on systems without the new matching 1752 # secrets.tdb records. 1753 unless (unlink("$ret->{PRIVATEDIR}/secrets.tdb") || unlink("$ret->{PRIVATEDIR}/secrets.ntdb")) { 1754 warn("Unable to remove $ret->{PRIVATEDIR}/secrets.tdb added during provision"); 1755 return undef; 1756 } 1757 1758 $ret->{DC_SERVER} = $ret->{SERVER}; 1759 $ret->{DC_SERVER_IP} = $ret->{SERVER_IP}; 1760 $ret->{DC_SERVER_IPV6} = $ret->{SERVER_IPV6}; 1761 $ret->{DC_NETBIOSNAME} = $ret->{NETBIOSNAME}; 1762 $ret->{DC_USERNAME} = $ret->{USERNAME}; 1763 $ret->{DC_PASSWORD} = $ret->{PASSWORD}; 1764 1765 return $ret; 1766 } 1767 1222 1768 sub teardown_env($$) 1223 1769 { … … 1225 1771 my $pid; 1226 1772 1227 close(DATA); 1228 1229 if (open(IN, "<$envvars->{PIDDIR}/samba.pid")) { 1230 $pid = <IN>; 1231 close(IN); 1232 1233 # Give the process 20 seconds to exit. gcov needs 1234 # this time to write out the covarge data 1235 my $count = 0; 1236 until (kill(0, $pid) == 0) { 1237 # if no process sucessfully signalled, then we are done 1238 sleep(1); 1239 $count++; 1240 last if $count > 20; 1241 } 1242 1243 # If it is still around, kill it 1244 if ($count > 20) { 1245 print "server process $pid took more than $count seconds to exit, killing\n"; 1246 kill 9, $pid; 1247 } 1248 } 1249 1250 my $failed = $? >> 8; 1773 # This should cause samba to terminate gracefully 1774 close($envvars->{STDIN_PIPE}); 1775 1776 $pid = $envvars->{SAMBA_PID}; 1777 my $count = 0; 1778 my $childpid; 1779 1780 # This should give it time to write out the gcov data 1781 until ($count > 30) { 1782 if (Samba::cleanup_child($pid, "samba") == -1) { 1783 last; 1784 } 1785 sleep(1); 1786 $count++; 1787 } 1788 1789 if ($count > 30 || kill(0, $pid)) { 1790 kill "TERM", $pid; 1791 1792 until ($count > 40) { 1793 if (Samba::cleanup_child($pid, "samba") == -1) { 1794 last; 1795 } 1796 sleep(1); 1797 $count++; 1798 } 1799 # If it is still around, kill it 1800 warn "server process $pid took more than $count seconds to exit, killing\n"; 1801 kill 9, $pid; 1802 } 1251 1803 1252 1804 $self->slapd_stop($envvars) if ($self->{ldap}); … … 1254 1806 print $self->getlog_env($envvars); 1255 1807 1256 return $failed;1808 return; 1257 1809 } 1258 1810 … … 1280 1832 { 1281 1833 my ($self, $envvars) = @_; 1282 1283 return (-p $envvars->{SAMBA_TEST_FIFO}); 1834 my $samba_pid = $envvars->{SAMBA_PID}; 1835 1836 if (not defined($samba_pid)) { 1837 return 0; 1838 } elsif ($samba_pid > 0) { 1839 my $childpid = Samba::cleanup_child($samba_pid, "samba"); 1840 1841 if ($childpid == 0) { 1842 return 1; 1843 } 1844 return 0; 1845 } else { 1846 return 1; 1847 } 1848 1284 1849 } 1285 1850 … … 1287 1852 { 1288 1853 my ($self, $envname, $path) = @_; 1854 my $target3 = $self->{target3}; 1289 1855 1290 1856 $ENV{ENVNAME} = $envname; 1291 1857 1292 if ($envname eq "dc") { 1293 return $self->setup_dc("$path/dc"); 1858 if (defined($self->{vars}->{$envname})) { 1859 return $self->{vars}->{$envname}; 1860 } 1861 1862 if ($envname eq "ad_dc_ntvfs") { 1863 return $self->setup_ad_dc_ntvfs("$path/ad_dc_ntvfs"); 1294 1864 } elsif ($envname eq "fl2000dc") { 1295 1865 return $self->setup_fl2000dc("$path/fl2000dc"); 1296 1866 } elsif ($envname eq "fl2003dc") { 1297 return $self->setup_fl2003dc("$path/fl2003dc"); 1867 if (not defined($self->{vars}->{ad_dc})) { 1868 $self->setup_ad_dc("$path/ad_dc"); 1869 } 1870 return $self->setup_fl2003dc("$path/fl2003dc", $self->{vars}->{ad_dc}); 1298 1871 } elsif ($envname eq "fl2008r2dc") { 1299 return $self->setup_fl2008r2dc("$path/fl2008r2dc"); 1872 if (not defined($self->{vars}->{ad_dc})) { 1873 $self->setup_ad_dc("$path/ad_dc"); 1874 } 1875 return $self->setup_fl2008r2dc("$path/fl2008r2dc", $self->{vars}->{ad_dc}); 1300 1876 } elsif ($envname eq "rpc_proxy") { 1301 if (not defined($self->{vars}->{ dc})) {1302 $self->setup_ dc("$path/dc");1303 } 1304 return $self->setup_rpc_proxy("$path/rpc_proxy", $self->{vars}->{ dc});1877 if (not defined($self->{vars}->{ad_dc_ntvfs})) { 1878 $self->setup_ad_dc_ntvfs("$path/ad_dc_ntvfs"); 1879 } 1880 return $self->setup_rpc_proxy("$path/rpc_proxy", $self->{vars}->{ad_dc_ntvfs}); 1305 1881 } elsif ($envname eq "vampire_dc") { 1306 if (not defined($self->{vars}->{dc})) { 1307 $self->setup_dc("$path/dc"); 1308 } 1309 return $self->setup_vampire_dc("$path/vampire_dc", $self->{vars}->{dc}); 1310 } elsif ($envname eq "member") { 1311 if (not defined($self->{vars}->{dc})) { 1312 $self->setup_dc("$path/dc"); 1313 } 1314 return $self->setup_member("$path/member", $self->{vars}->{dc}); 1882 if (not defined($self->{vars}->{ad_dc_ntvfs})) { 1883 $self->setup_ad_dc_ntvfs("$path/ad_dc_ntvfs"); 1884 } 1885 return $self->setup_vampire_dc("$path/vampire_dc", $self->{vars}->{ad_dc_ntvfs}); 1886 } elsif ($envname eq "promoted_dc") { 1887 if (not defined($self->{vars}->{ad_dc_ntvfs})) { 1888 $self->setup_ad_dc_ntvfs("$path/ad_dc_ntvfs"); 1889 } 1890 return $self->setup_promoted_dc("$path/promoted_dc", $self->{vars}->{ad_dc_ntvfs}); 1891 } elsif ($envname eq "subdom_dc") { 1892 if (not defined($self->{vars}->{ad_dc_ntvfs})) { 1893 $self->setup_ad_dc_ntvfs("$path/ad_dc_ntvfs"); 1894 } 1895 return $self->setup_subdom_dc("$path/subdom_dc", $self->{vars}->{ad_dc_ntvfs}); 1896 } elsif ($envname eq "s4member") { 1897 if (not defined($self->{vars}->{ad_dc_ntvfs})) { 1898 $self->setup_ad_dc_ntvfs("$path/ad_dc_ntvfs"); 1899 } 1900 return $self->setup_s4member("$path/s4member", $self->{vars}->{ad_dc_ntvfs}); 1315 1901 } elsif ($envname eq "rodc") { 1316 if (not defined($self->{vars}->{dc})) { 1317 $self->setup_dc("$path/dc"); 1318 } 1319 return $self->setup_rodc("$path/rodc", $self->{vars}->{dc}); 1320 } elsif ($envname eq "all") { 1321 if (not defined($self->{vars}->{dc})) { 1322 $ENV{ENVNAME} = "dc"; 1323 $self->setup_dc("$path/dc"); 1324 } 1325 my $ret = $self->setup_member("$path/member", $self->{vars}->{dc}); 1326 if (not defined($self->{vars}->{rpc_proxy})) { 1327 $ENV{ENVNAME} = "rpc_proxy"; 1328 my $rpc_proxy_ret = $self->setup_rpc_proxy("$path/rpc_proxy", $self->{vars}->{dc}); 1329 1330 $ret->{RPC_PROXY_SERVER} = $rpc_proxy_ret->{SERVER}; 1331 $ret->{RPC_PROXY_SERVER_IP} = $rpc_proxy_ret->{SERVER_IP}; 1332 $ret->{RPC_PROXY_NETBIOSNAME} = $rpc_proxy_ret->{NETBIOSNAME}; 1333 $ret->{RPC_PROXY_NETBIOSALIAS} = $rpc_proxy_ret->{NETBIOSALIAS}; 1334 $ret->{RPC_PROXY_USERNAME} = $rpc_proxy_ret->{USERNAME}; 1335 $ret->{RPC_PROXY_PASSWORD} = $rpc_proxy_ret->{PASSWORD}; 1336 } 1337 if (not defined($self->{vars}->{fl2000dc})) { 1338 $ENV{ENVNAME} = "fl2000dc"; 1339 my $fl2000dc_ret = $self->setup_fl2000dc("$path/fl2000dc", $self->{vars}->{dc}); 1340 1341 $ret->{FL2000DC_SERVER} = $fl2000dc_ret->{SERVER}; 1342 $ret->{FL2000DC_SERVER_IP} = $fl2000dc_ret->{SERVER_IP}; 1343 $ret->{FL2000DC_NETBIOSNAME} = $fl2000dc_ret->{NETBIOSNAME}; 1344 $ret->{FL2000DC_NETBIOSALIAS} = $fl2000dc_ret->{NETBIOSALIAS}; 1345 $ret->{FL2000DC_USERNAME} = $fl2000dc_ret->{USERNAME}; 1346 $ret->{FL2000DC_PASSWORD} = $fl2000dc_ret->{PASSWORD}; 1347 } 1348 if (not defined($self->{vars}->{fl2003dc})) { 1349 $ENV{ENVNAME} = "fl2003dc"; 1350 my $fl2003dc_ret = $self->setup_fl2003dc("$path/fl2003dc", $self->{vars}->{dc}); 1351 1352 $ret->{FL2003DC_SERVER} = $fl2003dc_ret->{SERVER}; 1353 $ret->{FL2003DC_SERVER_IP} = $fl2003dc_ret->{SERVER_IP}; 1354 $ret->{FL2003DC_NETBIOSNAME} = $fl2003dc_ret->{NETBIOSNAME}; 1355 $ret->{FL2003DC_NETBIOSALIAS} = $fl2003dc_ret->{NETBIOSALIAS}; 1356 $ret->{FL2003DC_USERNAME} = $fl2003dc_ret->{USERNAME}; 1357 $ret->{FL2003DC_PASSWORD} = $fl2003dc_ret->{PASSWORD}; 1358 } 1359 if (not defined($self->{vars}->{fl2008r2dc})) { 1360 $ENV{ENVNAME} = "fl2008r2dc"; 1361 my $fl2008r2dc_ret = $self->setup_fl2008r2dc("$path/fl2008r2dc", $self->{vars}->{dc}); 1362 1363 $ret->{FL2008R2DC_SERVER} = $fl2008r2dc_ret->{SERVER}; 1364 $ret->{FL2008R2DC_SERVER_IP} = $fl2008r2dc_ret->{SERVER_IP}; 1365 $ret->{FL2008R2DC_NETBIOSNAME} = $fl2008r2dc_ret->{NETBIOSNAME}; 1366 $ret->{FL2008R2DC_NETBIOSALIAS} = $fl2008r2dc_ret->{NETBIOSALIAS}; 1367 $ret->{FL2008R2DC_USERNAME} = $fl2008r2dc_ret->{USERNAME}; 1368 $ret->{FL2008R2DC_PASSWORD} = $fl2008r2dc_ret->{PASSWORD}; 1369 } 1370 return $ret; 1902 if (not defined($self->{vars}->{ad_dc_ntvfs})) { 1903 $self->setup_ad_dc_ntvfs("$path/ad_dc_ntvfs"); 1904 } 1905 return $self->setup_rodc("$path/rodc", $self->{vars}->{ad_dc_ntvfs}); 1906 } elsif ($envname eq "chgdcpass") { 1907 return $self->setup_chgdcpass("$path/chgdcpass", $self->{vars}->{chgdcpass}); 1908 } elsif ($envname eq "ad_member") { 1909 if (not defined($self->{vars}->{ad_dc_ntvfs})) { 1910 $self->setup_ad_dc_ntvfs("$path/ad_dc_ntvfs"); 1911 } 1912 return $target3->setup_admember("$path/ad_member", $self->{vars}->{ad_dc_ntvfs}, 29); 1913 } elsif ($envname eq "ad_dc") { 1914 return $self->setup_ad_dc("$path/ad_dc"); 1915 } elsif ($envname eq "ad_dc_no_nss") { 1916 return $self->setup_ad_dc("$path/ad_dc_no_nss", "no_nss"); 1917 } elsif ($envname eq "ad_member_rfc2307") { 1918 if (not defined($self->{vars}->{ad_dc_ntvfs})) { 1919 $self->setup_ad_dc_ntvfs("$path/ad_dc_ntvfs"); 1920 } 1921 return $target3->setup_admember_rfc2307("$path/ad_member_rfc2307", 1922 $self->{vars}->{ad_dc_ntvfs}, 34); 1923 } elsif ($envname eq "none") { 1924 return $self->setup_none("$path/none"); 1371 1925 } else { 1372 warn("Samba4 can't provide environment '$envname'"); 1373 return undef; 1374 } 1375 } 1376 1377 sub setup_member($$$) 1926 return "UNKNOWN"; 1927 } 1928 } 1929 1930 sub setup_s4member($$$) 1378 1931 { 1379 1932 my ($self, $path, $dc_vars) = @_; 1380 1933 1381 my $env = $self->provision_ member($path, $dc_vars);1934 my $env = $self->provision_s4member($path, $dc_vars); 1382 1935 1383 1936 if (defined $env) { 1384 $self->check_or_start($env, ($ENV{SMBD_MAXTIME} or 7500));1385 1386 $self->wait_for_start($env);1387 1388 $self->{vars}->{ member} = $env;1937 if (not defined($self->check_or_start($env, "single"))) { 1938 return undef; 1939 } 1940 1941 $self->{vars}->{s4member} = $env; 1389 1942 } 1390 1943 … … 1399 1952 1400 1953 if (defined $env) { 1401 $self->check_or_start($env, ($ENV{SMBD_MAXTIME} or 7500));1402 1403 $self->wait_for_start($env);1954 if (not defined($self->check_or_start($env, "single"))) { 1955 return undef; 1956 } 1404 1957 1405 1958 $self->{vars}->{rpc_proxy} = $env; … … 1408 1961 } 1409 1962 1410 sub setup_ dc($$)1963 sub setup_ad_dc_ntvfs($$) 1411 1964 { 1412 1965 my ($self, $path) = @_; 1413 1966 1414 my $env = $self->provision_ dc($path);1967 my $env = $self->provision_ad_dc_ntvfs($path); 1415 1968 if (defined $env) { 1416 $self->check_or_start($env, 1417 ($ENV{SMBD_MAXTIME} or 7500)); 1418 1419 $self->wait_for_start($env); 1420 1421 $self->{vars}->{dc} = $env; 1969 if (not defined($self->check_or_start($env, "standard"))) { 1970 warn("Failed to start ad_dc_ntvfs"); 1971 return undef; 1972 } 1973 1974 $self->{vars}->{ad_dc_ntvfs} = $env; 1975 } 1976 return $env; 1977 } 1978 1979 sub setup_chgdcpass($$) 1980 { 1981 my ($self, $path) = @_; 1982 1983 my $env = $self->provision_chgdcpass($path); 1984 if (defined $env) { 1985 if (not defined($self->check_or_start($env, "single"))) { 1986 return undef; 1987 } 1988 1989 $self->{vars}->{chgdcpass} = $env; 1422 1990 } 1423 1991 return $env; … … 1430 1998 my $env = $self->provision_fl2000dc($path); 1431 1999 if (defined $env) { 1432 $self->check_or_start($env, 1433 ($ENV{SMBD_MAXTIME} or 7500)); 1434 1435 $self->wait_for_start($env); 2000 if (not defined($self->check_or_start($env, "single"))) { 2001 return undef; 2002 } 1436 2003 1437 2004 $self->{vars}->{fl2000dc} = $env; … … 1441 2008 } 1442 2009 1443 sub setup_fl2003dc($$ )1444 { 1445 my ($self, $path ) = @_;2010 sub setup_fl2003dc($$$) 2011 { 2012 my ($self, $path, $dc_vars) = @_; 1446 2013 1447 2014 my $env = $self->provision_fl2003dc($path); 1448 2015 1449 2016 if (defined $env) { 1450 $self->check_or_start($env, 1451 ($ENV{SMBD_MAXTIME} or 7500)); 1452 1453 $self->wait_for_start($env); 2017 if (not defined($self->check_or_start($env, "single"))) { 2018 return undef; 2019 } 2020 2021 $env = $self->setup_trust($env, $dc_vars, "external", "--no-aes-keys"); 1454 2022 1455 2023 $self->{vars}->{fl2003dc} = $env; … … 1458 2026 } 1459 2027 1460 sub setup_fl2008r2dc($$ )1461 { 1462 my ($self, $path ) = @_;2028 sub setup_fl2008r2dc($$$) 2029 { 2030 my ($self, $path, $dc_vars) = @_; 1463 2031 1464 2032 my $env = $self->provision_fl2008r2dc($path); 1465 2033 1466 2034 if (defined $env) { 1467 $self->check_or_start($env, 1468 ($ENV{SMBD_MAXTIME} or 7500)); 1469 1470 $self->wait_for_start($env); 2035 if (not defined($self->check_or_start($env, "single"))) { 2036 return undef; 2037 } 2038 2039 my $upn_array = ["$env->{REALM}.upn"]; 2040 my $spn_array = ["$env->{REALM}.spn"]; 2041 2042 $self->setup_namespaces($env, $upn_array, $spn_array); 2043 2044 $env = $self->setup_trust($env, $dc_vars, "forest", ""); 1471 2045 1472 2046 $self->{vars}->{fl2008r2dc} = $env; … … 1483 2057 1484 2058 if (defined $env) { 1485 $self->check_or_start($env, 1486 ($ENV{SMBD_MAXTIME} or 7500)); 1487 1488 $self->wait_for_start($env); 2059 if (not defined($self->check_or_start($env, "single"))) { 2060 return undef; 2061 } 1489 2062 1490 2063 $self->{vars}->{vampire_dc} = $env; … … 1492 2065 # force replicated DC to update repsTo/repsFrom 1493 2066 # for vampired partitions 1494 my $samba_tool = $self->bindir_path("samba-tool");2067 my $samba_tool = Samba::bindir_path($self, "samba-tool"); 1495 2068 my $cmd = ""; 1496 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$env->{SOCKET_WRAPPER_DEFAULT_IFACE}\""; 2069 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$env->{SOCKET_WRAPPER_DEFAULT_IFACE}\" "; 2070 if (defined($env->{RESOLV_WRAPPER_CONF})) { 2071 $cmd .= "RESOLV_WRAPPER_CONF=\"$env->{RESOLV_WRAPPER_CONF}\" "; 2072 } else { 2073 $cmd .= "RESOLV_WRAPPER_HOSTS=\"$env->{RESOLV_WRAPPER_HOSTS}\" "; 2074 } 1497 2075 $cmd .= " KRB5_CONFIG=\"$env->{KRB5_CONFIG}\""; 1498 $cmd .= " $samba_tool drs kcc $env->{DC_SERVER}"; 2076 $cmd .= " $samba_tool drs kcc -k no $env->{DC_SERVER}"; 2077 $cmd .= " $env->{CONFIGURATION}"; 1499 2078 $cmd .= " -U$dc_vars->{DC_USERNAME}\%$dc_vars->{DC_PASSWORD}"; 1500 2079 unless (system($cmd) == 0) { … … 1506 2085 # we need to synchronize data between DCs 1507 2086 my $base_dn = "DC=".join(",DC=", split(/\./, $dc_vars->{REALM})); 1508 $cmd = "SOCKET_WRAPPER_DEFAULT_IFACE=\"$env->{SOCKET_WRAPPER_DEFAULT_IFACE}\""; 2087 $cmd = ""; 2088 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$env->{SOCKET_WRAPPER_DEFAULT_IFACE}\" "; 2089 if (defined($env->{RESOLV_WRAPPER_CONF})) { 2090 $cmd .= "RESOLV_WRAPPER_CONF=\"$env->{RESOLV_WRAPPER_CONF}\" "; 2091 } else { 2092 $cmd .= "RESOLV_WRAPPER_HOSTS=\"$env->{RESOLV_WRAPPER_HOSTS}\" "; 2093 } 1509 2094 $cmd .= " KRB5_CONFIG=\"$env->{KRB5_CONFIG}\""; 1510 $cmd .= " $samba_tool drs replicate $env->{DC_SERVER} $env->{VAMPIRE_DC_SERVER}"; 2095 $cmd .= " $samba_tool drs replicate $env->{DC_SERVER} $env->{SERVER}"; 2096 $cmd .= " $dc_vars->{CONFIGURATION}"; 1511 2097 $cmd .= " -U$dc_vars->{DC_USERNAME}\%$dc_vars->{DC_PASSWORD}"; 1512 2098 # replicate Configuration NC … … 1527 2113 } 1528 2114 2115 sub setup_promoted_dc($$$) 2116 { 2117 my ($self, $path, $dc_vars) = @_; 2118 2119 my $env = $self->provision_promoted_dc($path, $dc_vars); 2120 2121 if (defined $env) { 2122 if (not defined($self->check_or_start($env, "single"))) { 2123 return undef; 2124 } 2125 2126 $self->{vars}->{promoted_dc} = $env; 2127 2128 # force source and replicated DC to update repsTo/repsFrom 2129 # for vampired partitions 2130 my $samba_tool = Samba::bindir_path($self, "samba-tool"); 2131 my $cmd = ""; 2132 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$env->{SOCKET_WRAPPER_DEFAULT_IFACE}\""; 2133 $cmd .= " KRB5_CONFIG=\"$env->{KRB5_CONFIG}\""; 2134 $cmd .= " $samba_tool drs kcc $env->{DC_SERVER}"; 2135 $cmd .= " $env->{CONFIGURATION}"; 2136 $cmd .= " -U$dc_vars->{DC_USERNAME}\%$dc_vars->{DC_PASSWORD}"; 2137 unless (system($cmd) == 0) { 2138 warn("Failed to exec kcc\n$cmd"); 2139 return undef; 2140 } 2141 2142 my $samba_tool = Samba::bindir_path($self, "samba-tool"); 2143 my $cmd = ""; 2144 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$env->{SOCKET_WRAPPER_DEFAULT_IFACE}\""; 2145 $cmd .= " KRB5_CONFIG=\"$env->{KRB5_CONFIG}\""; 2146 $cmd .= " $samba_tool drs kcc $env->{SERVER}"; 2147 $cmd .= " $env->{CONFIGURATION}"; 2148 $cmd .= " -U$dc_vars->{DC_USERNAME}\%$dc_vars->{DC_PASSWORD}"; 2149 unless (system($cmd) == 0) { 2150 warn("Failed to exec kcc\n$cmd"); 2151 return undef; 2152 } 2153 2154 # as 'vampired' dc may add data in its local replica 2155 # we need to synchronize data between DCs 2156 my $base_dn = "DC=".join(",DC=", split(/\./, $dc_vars->{REALM})); 2157 $cmd = "SOCKET_WRAPPER_DEFAULT_IFACE=\"$env->{SOCKET_WRAPPER_DEFAULT_IFACE}\""; 2158 $cmd .= " KRB5_CONFIG=\"$env->{KRB5_CONFIG}\""; 2159 $cmd .= " $samba_tool drs replicate $env->{DC_SERVER} $env->{SERVER}"; 2160 $cmd .= " $dc_vars->{CONFIGURATION}"; 2161 $cmd .= " -U$dc_vars->{DC_USERNAME}\%$dc_vars->{DC_PASSWORD}"; 2162 # replicate Configuration NC 2163 my $cmd_repl = "$cmd \"CN=Configuration,$base_dn\""; 2164 unless(system($cmd_repl) == 0) { 2165 warn("Failed to replicate\n$cmd_repl"); 2166 return undef; 2167 } 2168 # replicate Default NC 2169 $cmd_repl = "$cmd \"$base_dn\""; 2170 unless(system($cmd_repl) == 0) { 2171 warn("Failed to replicate\n$cmd_repl"); 2172 return undef; 2173 } 2174 } 2175 2176 return $env; 2177 } 2178 2179 sub setup_subdom_dc($$$) 2180 { 2181 my ($self, $path, $dc_vars) = @_; 2182 2183 my $env = $self->provision_subdom_dc($path, $dc_vars); 2184 2185 if (defined $env) { 2186 if (not defined($self->check_or_start($env, "single"))) { 2187 return undef; 2188 } 2189 2190 $self->{vars}->{subdom_dc} = $env; 2191 2192 # force replicated DC to update repsTo/repsFrom 2193 # for primary domain partitions 2194 my $samba_tool = Samba::bindir_path($self, "samba-tool"); 2195 my $cmd = ""; 2196 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$env->{SOCKET_WRAPPER_DEFAULT_IFACE}\""; 2197 $cmd .= " KRB5_CONFIG=\"$env->{KRB5_CONFIG}\""; 2198 $cmd .= " $samba_tool drs kcc $env->{DC_SERVER}"; 2199 $cmd .= " $env->{CONFIGURATION}"; 2200 $cmd .= " -U$dc_vars->{DC_USERNAME}\%$dc_vars->{DC_PASSWORD} --realm=$dc_vars->{DC_REALM}"; 2201 unless (system($cmd) == 0) { 2202 warn("Failed to exec kcc\n$cmd"); 2203 return undef; 2204 } 2205 2206 # as 'subdomain' dc may add data in its local replica 2207 # we need to synchronize data between DCs 2208 my $base_dn = "DC=".join(",DC=", split(/\./, $env->{REALM})); 2209 my $config_dn = "CN=Configuration,DC=".join(",DC=", split(/\./, $dc_vars->{REALM})); 2210 $cmd = "SOCKET_WRAPPER_DEFAULT_IFACE=\"$env->{SOCKET_WRAPPER_DEFAULT_IFACE}\""; 2211 $cmd .= " KRB5_CONFIG=\"$env->{KRB5_CONFIG}\""; 2212 $cmd .= " $samba_tool drs replicate $env->{DC_SERVER} $env->{SUBDOM_DC_SERVER}"; 2213 $cmd .= " $dc_vars->{CONFIGURATION}"; 2214 $cmd .= " -U$dc_vars->{DC_USERNAME}\%$dc_vars->{DC_PASSWORD} --realm=$dc_vars->{DC_REALM}"; 2215 # replicate Configuration NC 2216 my $cmd_repl = "$cmd \"$config_dn\""; 2217 unless(system($cmd_repl) == 0) { 2218 warn("Failed to replicate\n$cmd_repl"); 2219 return undef; 2220 } 2221 # replicate Default NC 2222 $cmd_repl = "$cmd \"$base_dn\""; 2223 unless(system($cmd_repl) == 0) { 2224 warn("Failed to replicate\n$cmd_repl"); 2225 return undef; 2226 } 2227 } 2228 2229 return $env; 2230 } 2231 1529 2232 sub setup_rodc($$$) 1530 2233 { … … 1537 2240 } 1538 2241 1539 $self->check_or_start($env, 1540 ($ENV{SMBD_MAXTIME} or 7500)); 1541 1542 $self->wait_for_start($env); 2242 if (not defined($self->check_or_start($env, "single"))) { 2243 return undef; 2244 } 2245 2246 # force source and replicated DC to update repsTo/repsFrom 2247 # for vampired partitions 2248 my $samba_tool = Samba::bindir_path($self, "samba-tool"); 2249 my $cmd = ""; 2250 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$env->{SOCKET_WRAPPER_DEFAULT_IFACE}\""; 2251 $cmd .= " KRB5_CONFIG=\"$env->{KRB5_CONFIG}\""; 2252 $cmd .= " $samba_tool drs kcc -k no $env->{DC_SERVER}"; 2253 $cmd .= " $env->{CONFIGURATION}"; 2254 $cmd .= " -U$dc_vars->{DC_USERNAME}\%$dc_vars->{DC_PASSWORD}"; 2255 unless (system($cmd) == 0) { 2256 warn("Failed to exec kcc\n$cmd"); 2257 return undef; 2258 } 2259 2260 my $samba_tool = Samba::bindir_path($self, "samba-tool"); 2261 my $cmd = ""; 2262 $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$env->{SOCKET_WRAPPER_DEFAULT_IFACE}\""; 2263 $cmd .= " KRB5_CONFIG=\"$env->{KRB5_CONFIG}\""; 2264 $cmd .= " $samba_tool drs kcc -k no $env->{SERVER}"; 2265 $cmd .= " $env->{CONFIGURATION}"; 2266 $cmd .= " -U$dc_vars->{DC_USERNAME}\%$dc_vars->{DC_PASSWORD}"; 2267 unless (system($cmd) == 0) { 2268 warn("Failed to exec kcc\n$cmd"); 2269 return undef; 2270 } 2271 2272 my $base_dn = "DC=".join(",DC=", split(/\./, $dc_vars->{REALM})); 2273 $cmd = "SOCKET_WRAPPER_DEFAULT_IFACE=\"$env->{SOCKET_WRAPPER_DEFAULT_IFACE}\""; 2274 $cmd .= " KRB5_CONFIG=\"$env->{KRB5_CONFIG}\""; 2275 $cmd .= " $samba_tool drs replicate $env->{SERVER} $env->{DC_SERVER}"; 2276 $cmd .= " $dc_vars->{CONFIGURATION}"; 2277 $cmd .= " -U$dc_vars->{DC_USERNAME}\%$dc_vars->{DC_PASSWORD}"; 2278 # replicate Configuration NC 2279 my $cmd_repl = "$cmd \"CN=Configuration,$base_dn\""; 2280 unless(system($cmd_repl) == 0) { 2281 warn("Failed to replicate\n$cmd_repl"); 2282 return undef; 2283 } 2284 # replicate Default NC 2285 $cmd_repl = "$cmd \"$base_dn\""; 2286 unless(system($cmd_repl) == 0) { 2287 warn("Failed to replicate\n$cmd_repl"); 2288 return undef; 2289 } 1543 2290 1544 2291 $self->{vars}->{rodc} = $env; … … 1547 2294 } 1548 2295 2296 sub setup_ad_dc($$) 2297 { 2298 my ($self, $path, $no_nss) = @_; 2299 2300 # If we didn't build with ADS, pretend this env was never available 2301 if (not $self->{target3}->have_ads()) { 2302 return "UNKNOWN"; 2303 } 2304 2305 my $env = $self->provision_ad_dc($path); 2306 unless ($env) { 2307 return undef; 2308 } 2309 2310 if (defined($no_nss) and $no_nss) { 2311 $env->{NSS_WRAPPER_MODULE_SO_PATH} = undef; 2312 $env->{NSS_WRAPPER_MODULE_FN_PREFIX} = undef; 2313 } 2314 2315 if (not defined($self->check_or_start($env, "single"))) { 2316 return undef; 2317 } 2318 2319 my $upn_array = ["$env->{REALM}.upn"]; 2320 my $spn_array = ["$env->{REALM}.spn"]; 2321 2322 $self->setup_namespaces($env, $upn_array, $spn_array); 2323 2324 $self->{vars}->{ad_dc} = $env; 2325 return $env; 2326 } 2327 2328 sub setup_none($$) 2329 { 2330 my ($self, $path) = @_; 2331 2332 my $ret = { 2333 KRB5_CONFIG => abs_path($path) . "/no_krb5.conf", 2334 SAMBA_PID => -1, 2335 } 2336 } 2337 1549 2338 1; -
vendor/current/selftest/valgrind_run
r414 r988 5 5 shift 1 6 6 7 CMD="$ENV valgrind -q --db-attach=yes --num-callers=30 $@" 7 CMD="$ENV valgrind --num-callers=30 8 --trace-children=yes --log-file=valgrind.%p.log 9 ${VALGRIND_OPT- --time-stamp=yes --track-fds=yes --read-var-info=yes --track-origins=yes --leak-check=yes} 10 $@" 11 8 12 echo $CMD 9 13 eval $CMD
Note:
See TracChangeset
for help on using the changeset viewer.