2008-03-31 15:54:39 +04:00
#!/bin/sh
2008-06-19 15:52:49 +04:00
# Tests for the "net registry" and "net rpc registry" commands.
# rpc tests are chose by specifying "rpc" as commandline parameter.
2008-03-31 15:54:39 +04:00
2008-04-04 20:26:34 +04:00
RPC = " $1 "
2008-03-31 15:54:39 +04:00
NET = " $VALGRIND ${ NET :- $BINDIR /net } $CONFIGURATION "
2008-04-04 20:26:34 +04:00
if test " x ${ RPC } " = "xrpc" ; then
NETREG = " ${ NET } -U ${ USERNAME } % ${ PASSWORD } -I ${ SERVER_IP } rpc registry "
else
NETREG = " ${ NET } registry "
fi
2008-03-31 15:54:39 +04:00
incdir = ` dirname $0 `
. $incdir /test_functions.sh
failed = 0
test_enumerate( )
{
KEY = " $1 "
${ NETREG } enumerate ${ KEY }
}
test_getsd( )
{
KEY = " $1 "
${ NETREG } getsd ${ KEY }
}
test_enumerate_nonexisting( )
{
KEY = " $1 "
${ NETREG } enumerate ${ KEY }
2008-04-01 17:43:35 +04:00
2008-03-31 15:54:39 +04:00
if test " x $? " = "x0" ; then
echo " ERROR: enumerate succeeded with key ' ${ KEY } ' "
false
else
true
fi
}
test_enumerate_no_key( )
{
${ NETREG } enumerate
if test " x $? " = "x0" ; then
echo "ERROR: enumerate succeeded without any key spcified"
false
else
true
fi
}
test_create_existing( )
{
KEY = "HKLM"
EXPECTED = " createkey opened existing ${ KEY } "
2008-04-01 17:43:35 +04:00
2008-03-31 15:54:39 +04:00
OUTPUT = ` ${ NETREG } createkey ${ KEY } `
if test " x $? " = "x0" ; then
if test " $OUTPUT " = " $EXPECTED " ; then
true
else
echo " got ' $OUTPUT ', expected ' $EXPECTED ' "
2008-04-01 17:43:35 +04:00
false
2008-03-31 15:54:39 +04:00
fi
else
2008-04-01 17:19:05 +04:00
printf "%s\n" " $OUTPUT "
2008-03-31 15:54:39 +04:00
false
fi
}
test_createkey( )
{
KEY = " $1 "
BASEKEY = ` dirname $KEY `
SUBKEY = ` basename $KEY `
2008-04-01 17:35:12 +04:00
OUTPUT = ` ${ NETREG } createkey ${ KEY } `
2008-03-31 15:54:39 +04:00
if test " x $? " != "x0" ; then
2008-04-01 17:35:12 +04:00
echo " ERROR: createkey ${ KEY } failed "
echo "output:"
printf "%s\n" " $OUTPUT "
2008-03-31 15:54:39 +04:00
false
return
fi
# check enumerate of basekey lists new key:
OUTPUT = ` ${ NETREG } enumerate ${ BASEKEY } `
if test " x $? " != "x0" ; then
echo " ERROR: failed to enumerate key ' ${ BASEKEY } ' "
echo "output:"
2008-04-01 17:19:05 +04:00
printf "%s\n" " $OUTPUT "
2008-03-31 15:54:39 +04:00
false
return
fi
EXPECTED = " Keyname = ${ SUBKEY } "
2008-04-01 17:19:05 +04:00
printf "%s\n" " $OUTPUT " | grep '^Keyname' | grep ${ SUBKEY }
2008-03-31 15:54:39 +04:00
if test " x $? " != "x0" ; then
echo " ERROR: did not find expexted ' $EXPECTED ' in output "
echo "output:"
2008-04-01 17:19:05 +04:00
printf "%s\n" " $OUTPUT "
2008-03-31 15:54:39 +04:00
false
fi
# check enumerate of new key works:
${ NETREG } enumerate ${ KEY }
}
test_deletekey( )
{
KEY = " $1 "
BASEKEY = ` dirname ${ KEY } `
SUBKEY = ` basename ${ KEY } `
2008-04-01 17:35:12 +04:00
OUTPUT = ` test_createkey " ${ KEY } " `
2008-03-31 15:54:39 +04:00
if test " x $? " != "x0" ; then
2008-04-01 17:35:12 +04:00
printf "%s\n" " ${ OUTPUT } "
2008-03-31 15:54:39 +04:00
false
return
fi
2008-04-01 17:35:12 +04:00
OUTPUT = ` ${ NETREG } deletekey ${ KEY } `
if test " x $? " != "x0" ; then
printf "%s\n" " ${ OUTPUT } "
false
return
fi
2008-03-31 15:54:39 +04:00
# check enumerate of basekey does not show key anymore:
OUTPUT = ` ${ NETREG } enumerate ${ BASEKEY } `
if test " x $? " != "x0" ; then
2008-04-01 17:19:05 +04:00
printf "%s\n" " $OUTPUT "
2008-03-31 15:54:39 +04:00
false
return
fi
UNEXPECTED = " Keyname = ${ SUBKEY } "
2008-04-01 17:19:05 +04:00
printf "%s\n" " $OUTPUT " | 'grep ^Keyname' | grep ${ SUBKEY }
2008-03-31 15:54:39 +04:00
if test " x $? " = "x0" ; then
echo " ERROR: found ' $UNEXPECTED ' after delete in output "
echo "output:"
2008-04-01 17:19:05 +04:00
printf "%s\n" " $OUTPUT "
2008-03-31 15:54:39 +04:00
false
fi
# check enumerate of key itself does not work anymore:
${ NETREG } enumerate ${ KEY }
if test " x $? " = "x0" ; then
echo " ERROR: 'enumerate ${ KEY } ' works after 'deletekey ${ KEY } ' "
false
else
true
fi
}
test_deletekey_nonexisting( )
{
KEY = " $1 "
2008-04-01 17:35:12 +04:00
OUTPUT = ` test_deletekey " ${ KEY } " `
2008-03-31 15:54:39 +04:00
if test " x $? " != "x0" ; then
2008-04-01 17:35:12 +04:00
printf "%s\n" " ${ OUTPUT } "
2008-03-31 15:54:39 +04:00
false
return
fi
${ NETREG } deletekey " ${ KEY } "
if test " x $? " = "x0" ; then
echo " ERROR: delete after delete succeeded for key ' ${ KEY } ' "
false
fi
}
test_createkey_with_subkey( )
{
KEY = " $1 "
KEY2 = ` dirname ${ KEY } `
SUBKEYNAME2 = ` basename ${ KEY } `
BASENAME = ` dirname ${ KEY2 } `
SUBKEYNAME1 = ` basename ${ KEY2 } `
2008-04-01 17:35:12 +04:00
OUTPUT = ` ${ NETREG } createkey ${ KEY } `
2008-03-31 15:54:39 +04:00
if test " x $? " != "x0" ; then
2008-04-01 17:35:12 +04:00
echo " ERROR: createkey ${ KEY } failed "
printf "%s\n" " ${ OUTPUT } "
2008-03-31 15:54:39 +04:00
false
return
fi
# check we can enumerate to level key
2008-04-01 17:35:12 +04:00
OUTPUT = ` ${ NETREG } enumerate ${ KEY } `
2008-03-31 15:54:39 +04:00
if test " x $? " != "x0" ; then
echo " ERROR: failed to enumerate ' ${ KEY } ' after creation "
2008-04-01 17:35:12 +04:00
printf "%s\n" " ${ OUTPUT } "
2008-03-31 15:54:39 +04:00
false
return
fi
# clear:
${ NETREG } deletekey ${ KEY } && ${ NETREG } deletekey ${ KEY2 }
}
test_deletekey_with_subkey( )
{
KEY = " $1 "
KEY2 = ` dirname ${ KEY } `
2008-04-01 17:35:12 +04:00
OUTPUT = ` ${ NETREG } createkey ${ KEY } `
2008-03-31 15:54:39 +04:00
if test " x $? " != "x0" ; then
2008-04-01 17:35:12 +04:00
printf "%s\n" " ${ OUTPUT } "
2008-03-31 15:54:39 +04:00
false
return
fi
OUTPUT = ` ${ NETREG } deletekey ${ KEY2 } `
if test " x $? " = "x0" ; then
echo "ERROR: delete of key with subkey succeeded"
echo "output:"
2008-04-01 17:19:05 +04:00
printf "%s\n" " $OUTPUT "
2008-03-31 15:54:39 +04:00
false
return
fi
${ NETREG } deletekey ${ KEY } && ${ NETREG } deletekey ${ KEY2 }
}
test_setvalue( )
{
KEY = " $1 "
VALNAME = " $2 "
VALTYPE = " $3 "
VALVALUE = " $4 "
2008-04-01 17:35:12 +04:00
OUTPUT = ` test_createkey ${ KEY } `
2008-03-31 15:54:39 +04:00
if test " x $? " != "x0" ; then
2008-04-01 17:35:12 +04:00
printf "%s\n" " ${ OUTPUT } "
2008-03-31 15:54:39 +04:00
false
return
fi
2008-04-01 17:35:12 +04:00
OUTPUT = ` ${ NETREG } setvalue ${ KEY } ${ VALNAME } ${ VALTYPE } ${ VALVALUE } `
2008-03-31 15:54:39 +04:00
if test " x $? " != "x0" ; then
echo " ERROR: failed to set value testval in key ${ KEY } "
2008-04-01 17:35:12 +04:00
printf "%s\n" " ${ OUTPUT } "
2008-03-31 15:54:39 +04:00
false
return
fi
OUTPUT = ` ${ NETREG } enumerate ${ KEY } `
if test " x $? " != "x0" ; then
echo " ERROR: failure calling enumerate for key ${ KEY } "
echo output:
2008-04-01 17:19:05 +04:00
printf "%s\n" " ${ OUTPUT } "
2008-03-31 15:54:39 +04:00
false
return
fi
2008-04-01 17:19:05 +04:00
printf "%s\n" " $OUTPUT " | {
2008-03-31 15:54:39 +04:00
FOUND = 0
while read LINE ; do
2008-04-01 14:48:25 +04:00
SEARCH1 = ` echo $LINE | grep '^Valuename' | grep ${ VALNAME } `
2008-03-31 15:54:39 +04:00
if test " x $? " = "x0" ; then
read LINE
read LINE
2008-04-01 14:48:25 +04:00
SEARCH2 = ` echo $LINE | grep '^Value ' | grep ${ VALVALUE } `
2008-03-31 15:54:39 +04:00
if test " x $? " = "x0" ; then
FOUND = 1
break
fi
fi
done
if test " x $FOUND " != "x1" ; then
echo " ERROR: did not find value ' ${ VALNAME } ' with enumerate "
echo "enumerate output:"
2008-04-01 17:19:05 +04:00
printf "%s\n" " $OUTPUT "
2008-03-31 15:54:39 +04:00
false
return
fi
}
}
test_deletevalue( )
{
KEY = " $1 "
VALNAME = " $2 "
${ NETREG } deletevalue ${ KEY } ${ VALNAME }
}
test_deletevalue_nonexisting( )
{
KEY = " $1 "
VALNAME = " $2 "
${ NETREG } deletevalue ${ KEY } ${ VALNAME }
if test " x $? " = "x0" ; then
echo " ERROR: succeeded deleting value ${ VALNAME } "
false
else
true
fi
}
test_setvalue_twice( )
{
KEY = " $1 "
VALNAME = " $2 "
VALTYPE1 = " $3 "
VALVALUE1 = " $4 "
VALTYPE2 = " $5 "
VALVALUE2 = " $6 "
OUTPUT = ` test_setvalue ${ KEY } ${ VALNAME } ${ VALTYPE1 } ${ VALVALUE1 } `
if test " x $? " != "x0" ; then
2008-04-01 17:51:51 +04:00
echo "ERROR: first setvalue call failed"
2008-04-01 17:19:05 +04:00
printf "%s\n" " $OUTPUT "
2008-03-31 15:54:39 +04:00
false
return
fi
${ NETREG } setvalue ${ KEY } ${ VALNAME } ${ VALTYPE2 } ${ VALVALUE2 }
}
2008-06-18 01:54:15 +04:00
give_administrative_rights( )
{
bin/net -s $SERVERCONFFILE sam createbuiltingroup Administrators
if test " x $? " != "x0" ; then
echo "ERROR: creating builtin group Administrators"
false
return
fi
bin/net -s $SERVERCONFFILE sam addmem BUILTIN\\ Administrators $USERNAME
if test " x $? " != "x0" ; then
echo " ERROR: adding user $USERNAME to BUILTIN\\Administrators "
false
else
true
fi
}
take_administrative_rights( )
{
bin/net -s $SERVERCONFFILE sam delmem BUILTIN\\ Administrators $USERNAME
if test " x $? " != "x0" ; then
echo " ERROR: removing user $USERNAME from BUILTIN\\Administrators "
false
else
true
fi
}
if test " x ${ RPC } " = "xrpc" ; then
testit " giving user ${ USERNAME } administrative rights " \
give_administrative_rights || \
failed = ` expr $failed +1`
fi
2008-03-31 15:54:39 +04:00
testit "enumerate HKLM" \
test_enumerate HKLM || \
failed = ` expr $failed + 1`
testit "enumerate nonexisting hive" \
test_enumerate_nonexisting XYZ || \
failed = ` expr $failed + 1`
testit "enumerate without key" \
test_enumerate_no_key || \
failed = ` expr $failed + 1`
2008-04-04 20:26:34 +04:00
# skip getsd test for registry currently: it fails
if test " x ${ RPC } " != "xrpc" ; then
2008-03-31 15:54:39 +04:00
testit "getsd HKLM" \
test_getsd HKLM || \
failed = ` expr $failed + 1`
2008-04-04 20:26:34 +04:00
fi
2008-03-31 15:54:39 +04:00
testit "create existing HKLM" \
test_create_existing || \
failed = ` expr $failed + 1`
testit "create key" \
test_createkey HKLM/testkey || \
failed = ` expr $failed + 1`
testit "delete key" \
test_deletekey HKLM/testkey || \
failed = ` expr $failed + 1`
testit "delete^2 key" \
test_deletekey_nonexisting HKLM/testkey || \
failed = ` expr $failed + 1`
testit "enumerate nonexisting key" \
test_enumerate_nonexisting HKLM/testkey || \
2008-07-09 02:33:14 +04:00
failed = ` expr $failed + 1`
2008-03-31 15:54:39 +04:00
testit "create key with subkey" \
test_createkey_with_subkey HKLM/testkey/subkey || \
failed = ` expr $failed + 1`
testit "delete key with subkey" \
test_deletekey_with_subkey HKLM/testkey/subkey || \
failed = ` expr $failed + 1`
testit "set value" \
test_setvalue HKLM/testkey testval sz moin || \
failed = ` expr $failed + 1`
testit "delete value" \
test_deletevalue HKLM/testkey testval || \
failed = ` expr $failed + 1`
testit "delete nonexisting value" \
test_deletevalue_nonexisting HKLM/testkey testval || \
failed = ` expr $failed + 1`
2008-04-01 17:50:24 +04:00
testit "set value to different type" \
2008-03-31 15:54:39 +04:00
test_setvalue_twice HKLM/testkey testval sz moin dword 42 || \
failed = ` expr $failed + 1`
testit "delete key with value" \
test_deletekey HKLM/testkey || \
failed = ` expr $failed + 1`
2008-06-18 01:54:15 +04:00
if test " x ${ RPC } " = "xrpc" ; then
testit " taking administrative rights from user ${ USERNAME } " \
take_administrative_rights || \
failed = ` expr $failed +1`
fi
2008-03-31 15:54:39 +04:00
testok $0 $failed