From: Pavel Filipenský Date: Mon, 4 Aug 2025 09:20:54 +0000 (+0200) Subject: tests: Add test for 'net ads join' to a preferred DC X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0034b13f23ab9d16d62dbf0619e24233c520dae3;p=thirdparty%2Fsamba.git tests: Add test for 'net ads join' to a preferred DC BUG: https://bugzilla.samba.org/show_bug.cgi?id=15905 Signed-off-by: Pavel Filipenský Reviewed-by: Alexander Bokovoy (backported from commit 36f6ac547c09f492d1dcab11570e8bcbd377cf26) --- diff --git a/selftest/knownfail b/selftest/knownfail index ab2d79d7114..7c0e9dd00e7 100644 --- a/selftest/knownfail +++ b/selftest/knownfail @@ -335,6 +335,7 @@ ^samba.tests.dcerpc.dnsserver.samba.tests.dcerpc.dnsserver.DnsserverTests.test_security_descriptor.* ^samba4.blackbox.dbcheck-links.release-4-5-0-pre1.dbcheck_dangling_multi_valued_clean ^samba4.blackbox.dbcheck-links.release-4-5-0-pre1.dangling_multi_valued_check_missing +^samba4.blackbox.net_ads_join.join # We currently don't send referrals for LDAP modify of non-replicated attrs ^samba4.ldap.rodc.python\(rodc\).__main__.RodcTests.test_modify_nonreplicated.* diff --git a/source4/selftest/tests.py b/source4/selftest/tests.py index 4013781a519..33e112119e3 100755 --- a/source4/selftest/tests.py +++ b/source4/selftest/tests.py @@ -902,6 +902,7 @@ plantestsuite("samba4.blackbox.rfc2307_mapping", plantestsuite("samba4.blackbox.chgdcpass", "chgdcpass", [os.path.join(bbdir, "test_chgdcpass.sh"), '$SERVER', r"CHGDCPASS\$", '$REALM', '$DOMAIN', '$PREFIX/chgdcpass', "aes256-cts-hmac-sha1-96", '$PREFIX/chgdcpass', smbclient3]) plantestsuite("samba4.blackbox.samba_upgradedns(chgdcpass:local)", "chgdcpass:local", [os.path.join(bbdir, "test_samba_upgradedns.sh"), '$SERVER', '$REALM', '$PREFIX', '$SELFTEST_PREFIX/chgdcpass']) plantestsuite("samba4.blackbox.net_ads", "ad_dc:client", [os.path.join(bbdir, "test_net_ads.sh"), '$DC_SERVER', '$DC_USERNAME', '$DC_PASSWORD', '$PREFIX_ABS']) +plantestsuite("samba4.blackbox.net_ads_join", "vampire_dc:client", [os.path.join(bbdir, "test_net_ads_join_to_preferred_dc.sh"), '$DC_SERVER', '$DC_USERNAME', '$DC_PASSWORD', '$PREFIX']) plantestsuite("samba4.blackbox.net_offlinejoin", "ad_dc:client", [os.path.join(bbdir, "test_net_offline.sh"), '$DC_SERVER', '$DC_USERNAME', '$DC_PASSWORD', '$PREFIX_ABS']) plantestsuite("samba4.blackbox.client_etypes_all(ad_dc:client)", "ad_dc:client", [os.path.join(bbdir, "test_client_etypes.sh"), '$DC_SERVER', '$DC_USERNAME', '$DC_PASSWORD', '$PREFIX_ABS', 'all', '17_18_23']) plantestsuite("samba4.blackbox.client_etypes_legacy(ad_dc:client)", "ad_dc:client", [os.path.join(bbdir, "test_client_etypes.sh"), '$DC_SERVER', '$DC_USERNAME', '$DC_PASSWORD', '$PREFIX_ABS', 'legacy', '23']) diff --git a/testprogs/blackbox/test_net_ads_join_to_preferred_dc.sh b/testprogs/blackbox/test_net_ads_join_to_preferred_dc.sh new file mode 100755 index 00000000000..1bebc2f4dbe --- /dev/null +++ b/testprogs/blackbox/test_net_ads_join_to_preferred_dc.sh @@ -0,0 +1,61 @@ +if [ $# -lt 4 ]; then + cat </dev/null | sha1sum | cut -b 1-10) + +RUNDIR=$(pwd) +cd $BASEDIR +WORKDIR=$(mktemp -d -p .) +WORKDIR=$(basename $WORKDIR) +cp -a client/* $WORKDIR/ +sed -ri "s@(dir|directory) = (.*)/client/@\1 = \2/$WORKDIR/@" $WORKDIR/client.conf +sed -ri "s/netbios name = .*/netbios name = $HOSTNAME/" $WORKDIR/client.conf +rm -f $WORKDIR/private/secrets.tdb +cd $RUNDIR + +failed=0 + +net_tool="$BINDIR/net --configfile=$BASEDIR/$WORKDIR/client.conf --option=security=ads" + +# Load test functions +. $(dirname $0)/subunit.sh +. "$(dirname "${0}")/common_test_fns.inc" + +# This test is run in environment with two DCs ('localdc' and 'localvampiredc') +# The 'net ads join' has these two steps: +# 1. create machine account at DC ('-S' points to 'localvampiredc') +# 2. create keytab and sync the KVNO from a DC +# +# It must be ensured that in step #2 the keytab code contacts the same DC +# ('localvampiredc'). The configuration below tries to break it. +# We disable [SAF/DOMAIN/...] and [SAFJOIN/DOMAIN/...] by setting TTL to '-1' +# And via setting 'password server' to 'localdc' we manage that +# get_dc_list() returns 'localdc' instead of 'localvampiredc' +# +# As long as the keytab code is not explicitly told to use the same DC as join, +# we get failure: +# gensec_gse_client_prepare_ccache: Kinit for F0D26C71F6$@SAMBA.EXAMPLE.COM to access ldap/localdc.samba.example.com failed: Client not found in Kerberos database: NT_STATUS_LOGON_FAILURE + +cat <>$BASEDIR/$WORKDIR/client.conf +sync machine password to keytab = $BASEDIR/keytab:account_name:machine_password:sync_kvno +password server = $DC_SERVER +saf: join ttl = -1 +saf: ttl = -1 +EOF + +testit "join" $VALGRIND $net_tool ads join -S$SERVER -U$DC_USERNAME%$DC_PASSWORD || failed=$(expr $failed + 1) + +testit "leave" $VALGRIND $net_tool ads leave -U$DC_USERNAME%$DC_PASSWORD || failed=$(expr $failed + 1) + +rm -rf $BASEDIR/$WORKDIR + +exit $failed