1
0
mirror of https://github.com/samba-team/samba.git synced 2025-05-01 22:50:23 +03:00
samba-mirror/source3/script/tests/test_update_keytab_clustered.sh
Stefan Metzmacher 690c800c33 s3:test_update_keytab_clustered: add net ads testjoin checks in more places
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15714

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Martin Schwenke <martin@meltin.net>
2024-09-20 04:41:37 +00:00

178 lines
4.6 KiB
Bash
Executable File

#!/bin/sh
if [ $# -lt 1 ]; then
cat <<EOF
Usage: test_update_keytab.sh DOMAIN CONFIGURATION
EOF
exit 1
fi
incdir="$(dirname "$0")/../../../testprogs/blackbox"
. "${incdir}/subunit.sh"
. "${incdir}/common_test_fns.inc"
DOMAIN="${1}"
CONFIGURATION="${2}"
shift 2
samba_wbinfo="$BINDIR/wbinfo"
samba_net="$BINDIR/net $CONFIGURATION"
samba_rpcclient="$BINDIR/rpcclient $CONFIGURATION"
smbclient="${BINDIR}/smbclient"
smbcontrol="$BINDIR/smbcontrol"
keytabs_sync_kvno="keytab0k keytab1k keytab2k keytab3k"
keytabs_nosync_kvno="keytab0 keytab1 keytab2 keytab3"
keytabs_all="$keytabs_sync_kvno $keytabs_nosync_kvno"
check_net_ads_testjoin()
{
UID_WRAPPER_ROOT=1 UID_WRAPPER_INITIAL_RUID=0 UID_WRAPPER_INITIAL_EUID=0 $samba_net ads testjoin
return $?
}
# find the biggest vno and store it into global variable vno
get_biggest_vno()
{
keytab="$1"
local cmd="UID_WRAPPER_ROOT=1 UID_WRAPPER_INITIAL_RUID=0 UID_WRAPPER_INITIAL_EUID=0 $samba_net ads keytab list $keytab"
eval echo "$cmd"
out=$(eval "$cmd")
ret=$?
echo "$out"
if [ $ret != 0 ] ; then
echo "command failed"
return 1
fi
#global variable vno
vno=$(echo "$out" | sort -n | tail -1 | awk '{printf $1}')
if [ -z "$vno" ] ; then
echo "There is no key with vno in the keytab list above."
return 1
fi
return 0
}
test_pwd_change()
{
testname="$1"
shift
# command to change the password
local cmd="$*";
# get biggest vno before password change
get_biggest_vno "$PREFIX_ABS/clusteredmember/node.0/keytab0"
old_vno_node0=$vno
get_biggest_vno "$PREFIX_ABS/clusteredmember/node.1/keytab0"
old_vno_node1=$vno
get_biggest_vno "$PREFIX_ABS/clusteredmember/node.2/keytab0"
old_vno_node2=$vno
if [ ! "$old_vno_node0" -gt 0 ] ; then
echo "There is no key with vno in the keytab list above."
return 1
fi
if [ "$old_vno_node0" -ne "$old_vno_node1" ] || [ "$old_vno_node0" -ne "$old_vno_node2" ] ; then
echo "VNOs differs on nodes!"
return 1
fi
# change the password
eval echo "$cmd"
out=$(eval "$cmd")
ret=$?
if [ $ret != 0 ] ; then
echo "$out"
echo "command failed"
return 1
fi
# test ads join
cmd="UID_WRAPPER_ROOT=1 UID_WRAPPER_INITIAL_RUID=0 UID_WRAPPER_INITIAL_EUID=0 $samba_net ads testjoin"
eval echo "$cmd"
out=$(eval "$cmd")
ret=$?
if [ $ret != 0 ] ; then
echo "$out"
echo "command failed"
return 1
fi
# if keytab was updated the bigest vno should be incremented by one
get_biggest_vno "$PREFIX_ABS/clusteredmember/node.0/keytab0"
new_vno_node0=$vno
get_biggest_vno "$PREFIX_ABS/clusteredmember/node.0/keytab0"
new_vno_node1=$vno
get_biggest_vno "$PREFIX_ABS/clusteredmember/node.0/keytab0"
new_vno_node2=$vno
if [ ! "$new_vno_node0" -eq $((old_vno_node0 + 1)) ] ; then
echo "Old vno=$old_vno_node0, new vno=$new_vno_node0. Increment by one failed."
return 1
fi
if [ "$new_vno_node0" -ne "$new_vno_node1" ] || [ "$new_vno_node0" -ne "$new_vno_node2" ] ; then
echo "VNOs differs on nodes!"
return 1
fi
return 0
}
test_keytab_create()
{
UID_WRAPPER_INITIAL_EUID=0 UID_WRAPPER_INITIAL_RUID=0 UID_WRAPPER_ROOT=1 $samba_net ads keytab create || return 1
return 0
}
DC_DNSNAME="${DC_SERVER}.${REALM}"
SMBCLIENT_UNC="//${DC_DNSNAME}/tmp"
install source3/script/updatekeytab_test.sh "$PREFIX_ABS/clusteredmember/updatekeytab.sh"
global_inject_conf=$(dirname $SMB_CONF_PATH)/global_inject.conf
echo "sync machine password script = $PREFIX_ABS/clusteredmember/updatekeytab.sh" >$global_inject_conf
UID_WRAPPER_ROOT=1 $smbcontrol winbindd reload-config
testit "net_ads_testjoin_initial" check_net_ads_testjoin || failed=$((failed + 1))
# To have both old and older password we do one unnecessary password change:
testit "wbinfo_change_secret_initial" \
"$samba_wbinfo" --change-secret --domain="${DOMAIN}" \
|| failed=$((failed + 1))
testit "wbinfo_check_secret_initial" \
"$samba_wbinfo" --check-secret --domain="${DOMAIN}" \
|| failed=$((failed + 1))
# Create/sync all keytabs
testit "net_ads_keytab_sync" test_keytab_create || failed=$((failed + 1))
testit "net_ads_testjoin_after_sync" check_net_ads_testjoin || failed=$((failed + 1))
testit "wbinfo_change_secret_after_sync" \
test_pwd_change "wbinfo_changesecret" \
"$samba_wbinfo --change-secret --domain=${DOMAIN}" \
|| failed=$((failed + 1))
testit "wbinfo_check_secret_after_sync" \
"$samba_wbinfo" --check-secret --domain="${DOMAIN}" \
|| failed=$((failed + 1))
test_smbclient "Test machine login with the changed secret" \
"ls" "${SMBCLIENT_UNC}" \
--machine-pass ||
failed=$((failed + 1))
testit "net_ads_testjoin_final" check_net_ads_testjoin || failed=$((failed + 1))
echo "" >$global_inject_conf
UID_WRAPPER_ROOT=1 $smbcontrol winbindd reload-config
testok "$0" "$failed"