summaryrefslogtreecommitdiffstats
path: root/testprogs/blackbox/test_alias_membership.sh
diff options
context:
space:
mode:
Diffstat (limited to 'testprogs/blackbox/test_alias_membership.sh')
-rwxr-xr-xtestprogs/blackbox/test_alias_membership.sh194
1 files changed, 194 insertions, 0 deletions
diff --git a/testprogs/blackbox/test_alias_membership.sh b/testprogs/blackbox/test_alias_membership.sh
new file mode 100755
index 0000000..510940a
--- /dev/null
+++ b/testprogs/blackbox/test_alias_membership.sh
@@ -0,0 +1,194 @@
+#!/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