1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00
samba-mirror/testprogs/blackbox/test_alias_membership.sh
Pavel Filipenský 076d852467 testprogs: Add test_alias_membership
Signed-off-by: Pavel Filipenský <pfilipensky@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
2023-06-13 12:15:32 +00:00

195 lines
4.9 KiB
Bash
Executable File

#!/bin/bash
if [ $# -lt 1 ]; then
cat <<EOF
Usage: test_alias_membership.sh PREFIX
EOF
exit 1
fi
PREFIX=$1
ADDC_CONFIGFILE="$PREFIX/ad_dc/etc/smb.conf"
shift 5
failed=0
. "$(dirname "$0")/subunit.sh"
. "$(dirname "$0")/common_test_fns.inc"
net_tool="${BINDIR}/net"
wbinfo="${BINDIR}/wbinfo"
# Create the following membership structure and test if exactly the 9 users
# are listed as members of the alias A1.
#
# A1
# |- A1U1
# |- A1U2
# |
# |- G1
# | |- G1U1
# | |- G1U2
# |
# |- G2
# | |- G2U1
# | |- G2U2
# | |
# | |- G3
# | |- G3U1
# | |- G3U2
# |
# |- LG1
# |- user1
#
#
# Local entities:
#
# Alias: A1
# Group: LG1
# User: user1 (no need to create, already available)
#
# Domain entities:
#
# Group: ADDOMAIN/G1 ADDOMAIN/G2 ADDOMAIN/G3
# User: ADDOMAIN/A1U1 ADDOMAIN/A1U2
# ADDOMAIN/G1U1 ADDOMAIN/G1U2
# ADDOMAIN/G2U1 ADDOMAIN/G2U2
# ADDOMAIN/G3U1 ADDOMAIN/G3U2
LOCALPREFIX="IDMAPRIDMEMBER"
function create_group() {
_group_name="${1}"
GNUPGHOME="${PREFIX}/ad_dc/gnupg" "${PYTHON}" "${BINDIR}/samba-tool" \
group add "${_group_name}" --configfile="${ADDC_CONFIGFILE}"
_ret=$?
if [ ${_ret} -ne 0 ]; then
echo "Failed to create group ${_group_name}"
return 1
fi
return 0
}
function delete_group() {
_group_name="${1}"
GNUPGHOME="${PREFIX}/ad_dc/gnupg" "${PYTHON}" "${BINDIR}/samba-tool" \
group delete "${_group_name}" --configfile="${ADDC_CONFIGFILE}"
_ret=$?
if [ ${_ret} -ne 0 ]; then
echo "Failed to delete group ${_group_name}"
return 1
fi
return 0
}
function create_user() {
_user_name="${1}"
_password="${2}"
GNUPGHOME="${PREFIX}/ad_dc/gnupg" "${PYTHON}" "${BINDIR}/samba-tool" \
user create "${_user_name}" "${_password}" \
--configfile="${ADDC_CONFIGFILE}"
_ret=$?
if [ ${_ret} -ne 0 ]; then
echo "Failed to create user ${_user_name}"
return 1
fi
return 0
}
function delete_user() {
_user_name="${1}"
GNUPGHOME="${PREFIX}/ad_dc/gnupg" "${PYTHON}" "${BINDIR}/samba-tool" \
user delete "${_user_name}" --configfile="${ADDC_CONFIGFILE}"
_ret=$?
if [ ${_ret} -ne 0 ]; then
echo "Failed to delete user ${_user_name}"
return 1
fi
return 0
}
for G in G1 G2 G3
do
testit "create group '$G'" create_group "${G}" || failed=$((failed + 1))
done
for U in G1U1 G1U2 G2U1 G2U2 G3U1 G3U2 A1U1 A1U2
do
testit "create user '$U'" create_user "${U}" Passw0rd.7 || failed=$((failed + 1))
done
while read -a line
do
group=${line[0]}
member=${line[1]}
testit "add member '$member' to group '$group'" "$PYTHON" "$BINDIR/samba-tool" group addmembers --configfile="$ADDC_CONFIGFILE" "$group" "$member" || failed=$((failed + 1))
done <<___MEMBERS
G1 G1U1
G1 G1U2
G2 G2U1
G2 G2U2
G2 G3
G3 G3U1
G3 G3U2
___MEMBERS
testit "net sam createlocalgroup A1" "$VALGRIND" "$net_tool" sam createlocalgroup A1 || failed=$((failed + 1))
testit "net createdomaingroup LG1" "$VALGRIND" "$net_tool" sam createdomaingroup LG1 || failed=$((failed + 1))
testit "net sam addmem user1 to LG1" "$VALGRIND" "$net_tool" sam addmem LG1 "${LOCALPREFIX}\user1" || failed=$((failed + 1))
for M in "ADDOMAIN\A1U1" "ADDOMAIN\A1U2" "ADDOMAIN\G1" "ADDOMAIN\G2" "${LOCALPREFIX}\LG1"
do
testit "net sam addmem $M to A1" "$VALGRIND" "$net_tool" sam addmem A1 "$M" || failed=$((failed + 1))
done
# do not use testit_grep (that would call 9 times wbinfo) but use grep on the
# stored output
a1_alias=$( "$wbinfo" --group-info A1 )
for U in ADDOMAIN/a1u1 "${LOCALPREFIX}/user1" ADDOMAIN/g1u1 ADDOMAIN/g1u2 ADDOMAIN/g2u1 ADDOMAIN/g2u2 ADDOMAIN/g3u1 ADDOMAIN/g3u2 ADDOMAIN/a1u2;
do
count=$(echo "$a1_alias" | grep -c "$U")
testit "User $U is in alias" test "$count" -eq 1 || failed=$((failed + 1))
done
# check that there are exactly 8 commas separating the 9 users
count=$(echo "$a1_alias" | grep -o , | wc -l)
testit "There are 9 users" test "$count" -eq 8 || failed=$((failed + 1))
# cleanup
for M in "ADDOMAIN\A1U1" "ADDOMAIN\A1U2" "ADDOMAIN\G1" "ADDOMAIN\G2" "${LOCALPREFIX}\LG1"
do
testit "net sam delmem $M from A1" "$VALGRIND" "$net_tool" sam delmem A1 "$M" || failed=$((failed + 1))
done
testit "net sam delmem user1 from LG1" "$VALGRIND" "$net_tool" sam delmem LG1 "${LOCALPREFIX}\user1" || failed=$((failed + 1))
testit "net sam deletelocalgroup A1" "$VALGRIND" "$net_tool" sam deletelocalgroup A1 || failed=$((failed + 1))
testit "net sam deletedomaingroup LG1" "$VALGRIND" "$net_tool" sam deletedomaingroup LG1 || failed=$((failed + 1))
while read -a line
do
group=${line[0]}
member=${line[1]}
testit "del member '$member' from group '$group'" "$PYTHON" "$BINDIR/samba-tool" group removemembers --configfile="$ADDC_CONFIGFILE" "$group" "$member" || failed=$((failed + 1))
done <<___MEMBERS
G1 G1U1
G1 G1U2
G2 G2U1
G2 G2U2
G2 G3
G3 G3U1
G3 G3U2
___MEMBERS
for G in G1 G2 G3
do
testit "delete group '$G'" delete_group "${G}" || failed=$((failed + 1))
done
for U in G1U1 G1U2 G2U1 G2U2 G3U1 G3U2 A1U1 A1U2
do
testit "delete user '$U'" delete_user "${U}" || failed=$((failed + 1))
done
exit $failed