samba-tool tests: add test for 'samba-tool computer edit' command
authorBjörn Baumbach <bb@sernet.de>
Mon, 18 Mar 2019 11:00:24 +0000 (12:00 +0100)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 4 Jul 2019 02:07:21 +0000 (02:07 +0000)
Signed-off-by: Björn Baumbach <bb@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
python/samba/tests/samba_tool/computer_edit.sh [new file with mode: 0755]
source4/selftest/tests.py

diff --git a/python/samba/tests/samba_tool/computer_edit.sh b/python/samba/tests/samba_tool/computer_edit.sh
new file mode 100755 (executable)
index 0000000..fb6c668
--- /dev/null
@@ -0,0 +1,180 @@
+#!/bin/sh
+#
+# Test for 'samba-tool computer edit'
+
+if [ $# -lt 3 ]; then
+cat <<EOF
+Usage: computer_edit.sh SERVER USERNAME PASSWORD
+EOF
+exit 1;
+fi
+
+SERVER="$1"
+USERNAME="$2"
+PASSWORD="$3"
+
+STpath=$(pwd)
+. $STpath/testprogs/blackbox/subunit.sh
+
+display_name="Björns laptop"
+display_name_b64="QmrDtnJucyBsYXB0b3A="
+display_name_new="Bjoerns new laptop"
+# attribute value including control character
+# echo -e "test \a string" | base64
+display_name_con_b64="dGVzdCAHIHN0cmluZwo="
+
+tmpeditor=$(mktemp --suffix .sh -p $STpath/bin samba-tool-editor-XXXXXXXX)
+chmod +x $tmpeditor
+
+create_test_computer() {
+       $PYTHON ${STpath}/source4/scripting/bin/samba-tool \
+               computer create testmachine1 \
+               -H "ldap://$SERVER" "-U$USERNAME" "--password=$PASSWORD"
+}
+
+edit_computer() {
+       # create editor.sh
+       # enable computer account
+       cat >$tmpeditor <<-'EOF'
+#!/usr/bin/env bash
+computer_ldif="$1"
+SED=$(which sed)
+$SED -i -e 's/userAccountControl: 4098/userAccountControl: 4096/' $computer_ldif
+EOF
+
+       $PYTHON ${STpath}/source4/scripting/bin/samba-tool \
+               computer edit testmachine1 --editor=$tmpeditor \
+               -H "ldap://$SERVER" "-U$USERNAME" "--password=$PASSWORD"
+}
+
+# Test edit computer - add base64 attributes
+add_attribute_base64() {
+       # create editor.sh
+       cat >$tmpeditor <<EOF
+#!/usr/bin/env bash
+computer_ldif="\$1"
+
+grep -v '^$' \$computer_ldif > \${computer_ldif}.tmp
+echo "displayName:: $display_name_b64" >> \${computer_ldif}.tmp
+
+mv \${computer_ldif}.tmp \$computer_ldif
+EOF
+
+       $PYTHON ${STpath}/source4/scripting/bin/samba-tool computer edit \
+               testmachine1 --editor=$tmpeditor \
+               -H "ldap://$SERVER" "-U$USERNAME" "--password=$PASSWORD"
+}
+
+get_attribute_base64() {
+       $PYTHON ${STpath}/source4/scripting/bin/samba-tool computer show \
+               testmachine1 --attributes=displayName \
+               -H "ldap://$SERVER" "-U$USERNAME" "--password=$PASSWORD"
+}
+
+delete_attribute() {
+       # create editor.sh
+       cat >$tmpeditor <<EOF
+#!/usr/bin/env bash
+computer_ldif="\$1"
+
+grep -v '^displayName' \$computer_ldif >> \${computer_ldif}.tmp
+mv \${computer_ldif}.tmp \$computer_ldif
+EOF
+       $PYTHON ${STpath}/source4/scripting/bin/samba-tool computer edit \
+               testmachine1 --editor=$tmpeditor \
+               -H "ldap://$SERVER" "-U$USERNAME" "--password=$PASSWORD"
+}
+
+# Test edit computer - add base64 attribute value including control character
+add_attribute_base64_control() {
+       # create editor.sh
+       cat >$tmpeditor <<EOF
+#!/usr/bin/env bash
+computer_ldif="\$1"
+
+grep -v '^$' \$computer_ldif > \${computer_ldif}.tmp
+echo "displayName:: $display_name_con_b64" >> \${computer_ldif}.tmp
+
+mv \${computer_ldif}.tmp \$computer_ldif
+EOF
+       $PYTHON ${STpath}/source4/scripting/bin/samba-tool computer edit \
+               testmachine1 --editor=$tmpeditor \
+               -H "ldap://$SERVER" "-U$USERNAME" "--password=$PASSWORD"
+}
+
+get_attribute_base64_control() {
+       $PYTHON ${STpath}/source4/scripting/bin/samba-tool computer show \
+               testmachine1 --attributes=displayName \
+               -H "ldap://$SERVER" "-U$USERNAME" "--password=$PASSWORD"
+}
+
+
+# Test edit computer - change base64 attribute value including control character
+change_attribute_base64_control() {
+       # create editor.sh
+       cat >$tmpeditor <<EOF
+#!/usr/bin/env bash
+computer_ldif="\$1"
+
+sed -i -e 's/displayName:: $display_name_con_b64/displayName: $display_name/' \
+       \$computer_ldif
+EOF
+       $PYTHON ${STpath}/source4/scripting/bin/samba-tool computer edit \
+               testmachine1 --editor=$tmpeditor \
+               -H "ldap://$SERVER" "-U$USERNAME" "--password=$PASSWORD"
+}
+
+get_attribute_base64_control() {
+       $PYTHON ${STpath}/source4/scripting/bin/samba-tool computer show \
+               testmachine1 --attributes=displayName \
+               -H "ldap://$SERVER" "-U$USERNAME" "--password=$PASSWORD"
+}
+
+# Test edit computer - change attributes with LDB_FLAG_FORCE_NO_BASE64_LDIF
+change_attribute_force_no_base64() {
+       # create editor.sh
+       # Expects that the original attribute is available as clear text,
+       # because the LDB_FLAG_FORCE_NO_BASE64_LDIF should be used here.
+       cat >$tmpeditor <<EOF
+#!/usr/bin/env bash
+computer_ldif="\$1"
+
+sed -i -e 's/displayName: $display_name/displayName: $display_name_new/' \
+       \$computer_ldif
+EOF
+
+       $PYTHON ${STpath}/source4/scripting/bin/samba-tool computer edit \
+               testmachine1 --editor=$tmpeditor \
+               -H "ldap://$SERVER" "-U$USERNAME" "--password=$PASSWORD"
+}
+
+get_changed_attribute_force_no_base64() {
+       $PYTHON ${STpath}/source4/scripting/bin/samba-tool computer show \
+                testmachine1 --attributes=displayName \
+                -H "ldap://$SERVER" "-U$USERNAME" "--password=$PASSWORD"
+}
+
+delete_computer() {
+       $PYTHON ${STpath}/source4/scripting/bin/samba-tool \
+               computer delete testmachine1 \
+               -H "ldap://$SERVER" "-U$USERNAME" "--password=$PASSWORD"
+}
+
+failed=0
+
+testit "create_test_computer" create_test_computer || failed=`expr $failed + 1`
+testit "edit_computer" edit_computer || failed=`expr $failed + 1`
+testit "add_attribute_base64" add_attribute_base64 || failed=`expr $failed + 1`
+testit_grep "get_attribute_base64" "^displayName:: $display_name_b64" get_attribute_base64 || failed=`expr $failed + 1`
+testit "delete_attribute" delete_attribute || failed=`expr $failed + 1`
+testit "add_attribute_base64_control" add_attribute_base64_control || failed=`expr $failed + 1`
+testit_grep "get_attribute_base64_control" "^displayName:: $display_name_con_b64" get_attribute_base64_control || failed=`expr $failed + 1`
+testit "change_attribute_base64_control" change_attribute_base64_control || failed=`expr $failed + 1`
+testit_grep "get_attribute_base64_control" "^displayName:: $display_name_b64" get_attribute_base64_control || failed=`expr $failed + 1`
+testit "change_attribute_force_no_base64" change_attribute_force_no_base64 || failed=`expr $failed + 1`
+testit_grep "get_changed_attribute_force_no_base64" "^displayName: $display_name_new" get_changed_attribute_force_no_base64 || failed=`expr $failed + 1`
+testit "delete_computer" delete_computer || failed=`expr $failed + 1`
+
+rm -f $tmpeditor
+
+exit $failed
index 02ca009eaa88e592d497bfd40791d4c50a8823af..4758ebe51555048a3365a9b66991807ca00129ee 100755 (executable)
@@ -659,10 +659,11 @@ planpythontestsuite("none", "samba.tests.samba_tool.visualize")
 for env in all_fl_envs:
     planpythontestsuite(env + ":local", "samba.tests.samba_tool.fsmo")
 
-# test user.edit
+# test samba-tool user and computer edit command
 for env in all_fl_envs:
     env += ":local"
     plantestsuite("samba.tests.samba_tool.user_edit", env, [os.path.join(srcdir(), "python/samba/tests/samba_tool/user_edit.sh"), '$SERVER', '$USERNAME', '$PASSWORD'])
+    plantestsuite("samba.tests.samba_tool.computer_edit", env, [os.path.join(srcdir(), "python/samba/tests/samba_tool/computer_edit.sh"), '$SERVER', '$USERNAME', '$PASSWORD'])
 
 # We run this test against both AD DC implementations because it is
 # the only test we have of GPO get/set behaviour, and this involves