1#!/bin/sh 2 3# Tests for the "net registry" and "net rpc registry" commands. 4# rpc tests are chose by specifying "rpc" as commandline parameter. 5 6RPC="$1" 7 8NET="$VALGRIND ${NET:-$BINDIR/net} $CONFIGURATION" 9 10if test "x${RPC}" = "xrpc" ; then 11 NETREG="${NET} -U${USERNAME}%${PASSWORD} -I ${SERVER_IP} rpc registry" 12else 13 NETREG="${NET} registry" 14fi 15 16test x"$TEST_FUNCTIONS_SH" != x"INCLUDED" && { 17incdir=`dirname $0` 18. $incdir/test_functions.sh 19} 20 21failed=0 22 23test_enumerate() 24{ 25 KEY="$1" 26 27 ${NETREG} enumerate ${KEY} 28} 29 30test_getsd() 31{ 32 KEY="$1" 33 34 ${NETREG} getsd ${KEY} 35} 36 37test_enumerate_nonexisting() 38{ 39 KEY="$1" 40 ${NETREG} enumerate ${KEY} 41 42 if test "x$?" = "x0" ; then 43 echo "ERROR: enumerate succeeded with key '${KEY}'" 44 false 45 else 46 true 47 fi 48} 49 50test_enumerate_no_key() 51{ 52 ${NETREG} enumerate 53 if test "x$?" = "x0" ; then 54 echo "ERROR: enumerate succeeded without any key spcified" 55 false 56 else 57 true 58 fi 59} 60 61test_create_existing() 62{ 63 KEY="HKLM" 64 EXPECTED="createkey opened existing ${KEY}" 65 66 OUTPUT=`${NETREG} createkey ${KEY}` 67 if test "x$?" = "x0" ; then 68 if test "$OUTPUT" = "$EXPECTED" ; then 69 true 70 else 71 echo "got '$OUTPUT', expected '$EXPECTED'" 72 false 73 fi 74 else 75 printf "%s\n" "$OUTPUT" 76 false 77 fi 78} 79 80test_createkey() 81{ 82 KEY="$1" 83 BASEKEY=`dirname $KEY` 84 SUBKEY=`basename $KEY` 85 86 OUTPUT=`${NETREG} createkey ${KEY}` 87 if test "x$?" != "x0" ; then 88 echo "ERROR: createkey ${KEY} failed" 89 echo "output:" 90 printf "%s\n" "$OUTPUT" 91 false 92 return 93 fi 94 95 # check enumerate of basekey lists new key: 96 OUTPUT=`${NETREG} enumerate ${BASEKEY}` 97 if test "x$?" != "x0" ; then 98 echo "ERROR: failed to enumerate key '${BASEKEY}'" 99 echo "output:" 100 printf "%s\n" "$OUTPUT" 101 false 102 return 103 fi 104 105 EXPECTED="Keyname = ${SUBKEY}" 106 printf "%s\n" "$OUTPUT" | grep '^Keyname' | grep ${SUBKEY} 107 if test "x$?" != "x0" ; then 108 echo "ERROR: did not find expexted '$EXPECTED' in output" 109 echo "output:" 110 printf "%s\n" "$OUTPUT" 111 false 112 fi 113 114 # check enumerate of new key works: 115 ${NETREG} enumerate ${KEY} 116} 117 118test_deletekey() 119{ 120 KEY="$1" 121 BASEKEY=`dirname ${KEY}` 122 SUBKEY=`basename ${KEY}` 123 124 OUTPUT=`test_createkey "${KEY}"` 125 if test "x$?" != "x0" ; then 126 printf "%s\n" "${OUTPUT}" 127 false 128 return 129 fi 130 131 OUTPUT=`${NETREG} deletekey ${KEY}` 132 if test "x$?" != "x0" ; then 133 printf "%s\n" "${OUTPUT}" 134 false 135 return 136 fi 137 138 # check enumerate of basekey does not show key anymore: 139 OUTPUT=`${NETREG} enumerate ${BASEKEY}` 140 if test "x$?" != "x0" ; then 141 printf "%s\n" "$OUTPUT" 142 false 143 return 144 fi 145 146 UNEXPECTED="Keyname = ${SUBKEY}" 147 printf "%s\n" "$OUTPUT" | 'grep ^Keyname' | grep ${SUBKEY} 148 if test "x$?" = "x0" ; then 149 echo "ERROR: found '$UNEXPECTED' after delete in output" 150 echo "output:" 151 printf "%s\n" "$OUTPUT" 152 false 153 fi 154 155 # check enumerate of key itself does not work anymore: 156 ${NETREG} enumerate ${KEY} 157 if test "x$?" = "x0" ; then 158 echo "ERROR: 'enumerate ${KEY}' works after 'deletekey ${KEY}'" 159 false 160 else 161 true 162 fi 163} 164 165test_deletekey_nonexisting() 166{ 167 KEY="$1" 168 169 OUTPUT=`test_deletekey "${KEY}"` 170 if test "x$?" != "x0" ; then 171 printf "%s\n" "${OUTPUT}" 172 false 173 return 174 fi 175 176 ${NETREG} deletekey "${KEY}" 177 if test "x$?" = "x0" ; then 178 echo "ERROR: delete after delete succeeded for key '${KEY}'" 179 false 180 fi 181} 182 183test_createkey_with_subkey() 184{ 185 KEY="$1" 186 KEY2=`dirname ${KEY}` 187 SUBKEYNAME2=`basename ${KEY}` 188 BASENAME=`dirname ${KEY2}` 189 SUBKEYNAME1=`basename ${KEY2}` 190 191 OUTPUT=`${NETREG} createkey ${KEY}` 192 if test "x$?" != "x0" ; then 193 echo "ERROR: createkey ${KEY} failed" 194 printf "%s\n" "${OUTPUT}" 195 false 196 return 197 fi 198 199 # check we can enumerate to level key 200 OUTPUT=`${NETREG} enumerate ${KEY}` 201 if test "x$?" != "x0" ; then 202 echo "ERROR: failed to enumerate '${KEY}' after creation" 203 printf "%s\n" "${OUTPUT}" 204 false 205 return 206 fi 207 208 # clear: 209 ${NETREG} deletekey ${KEY} && ${NETREG} deletekey ${KEY2} 210} 211 212test_deletekey_with_subkey() 213{ 214 KEY="$1" 215 KEY2=`dirname ${KEY}` 216 217 OUTPUT=`${NETREG} createkey ${KEY}` 218 if test "x$?" != "x0" ; then 219 printf "%s\n" "${OUTPUT}" 220 false 221 return 222 fi 223 224 OUTPUT=`${NETREG} deletekey ${KEY2}` 225 226 if test "x$?" = "x0" ; then 227 echo "ERROR: delete of key with subkey succeeded" 228 echo "output:" 229 printf "%s\n" "$OUTPUT" 230 false 231 return 232 fi 233 234 ${NETREG} deletekey ${KEY} && ${NETREG} deletekey ${KEY2} 235} 236 237test_setvalue() 238{ 239 KEY="$1" 240 VALNAME="$2" 241 VALTYPE="$3" 242 VALVALUE="$4" 243 244 OUTPUT=`test_createkey ${KEY}` 245 if test "x$?" != "x0" ; then 246 printf "%s\n" "${OUTPUT}" 247 false 248 return 249 fi 250 251 OUTPUT=`${NETREG} setvalue ${KEY} ${VALNAME} ${VALTYPE} ${VALVALUE}` 252 if test "x$?" != "x0" ; then 253 echo "ERROR: failed to set value testval in key ${KEY}" 254 printf "%s\n" "${OUTPUT}" 255 false 256 return 257 fi 258 259 OUTPUT=`${NETREG} enumerate ${KEY}` 260 if test "x$?" != "x0" ; then 261 echo "ERROR: failure calling enumerate for key ${KEY}" 262 echo output: 263 printf "%s\n" "${OUTPUT}" 264 false 265 return 266 fi 267 268 printf "%s\n" "$OUTPUT" | { 269 FOUND=0 270 while read LINE ; do 271 SEARCH1=`echo $LINE | grep '^Valuename' | grep ${VALNAME}` 272 if test "x$?" = "x0" ; then 273 read LINE 274 read LINE 275 SEARCH2=`echo $LINE | grep '^Value ' | grep ${VALVALUE}` 276 if test "x$?" = "x0" ; then 277 FOUND=1 278 break 279 fi 280 fi 281 done 282 283 if test "x$FOUND" != "x1" ; then 284 echo "ERROR: did not find value '${VALNAME}' with enumerate" 285 echo "enumerate output:" 286 printf "%s\n" "$OUTPUT" 287 false 288 return 289 fi 290 } 291} 292 293test_deletevalue() 294{ 295 KEY="$1" 296 VALNAME="$2" 297 298 ${NETREG} deletevalue ${KEY} ${VALNAME} 299} 300 301test_deletevalue_nonexisting() 302{ 303 KEY="$1" 304 VALNAME="$2" 305 306 ${NETREG} deletevalue ${KEY} ${VALNAME} 307 if test "x$?" = "x0" ; then 308 echo "ERROR: succeeded deleting value ${VALNAME}" 309 false 310 else 311 true 312 fi 313} 314 315test_setvalue_twice() 316{ 317 KEY="$1" 318 VALNAME="$2" 319 VALTYPE1="$3" 320 VALVALUE1="$4" 321 VALTYPE2="$5" 322 VALVALUE2="$6" 323 324 OUTPUT=`test_setvalue ${KEY} ${VALNAME} ${VALTYPE1} ${VALVALUE1}` 325 if test "x$?" != "x0" ; then 326 echo "ERROR: first setvalue call failed" 327 printf "%s\n" "$OUTPUT" 328 false 329 return 330 fi 331 332 ${NETREG} setvalue ${KEY} ${VALNAME} ${VALTYPE2} ${VALVALUE2} 333} 334 335give_administrative_rights() 336{ 337 bin/net -s $SERVERCONFFILE sam createbuiltingroup Administrators 338 if test "x$?" != "x0" ; then 339 echo "ERROR: creating builtin group Administrators" 340 false 341 return 342 fi 343 344 bin/net -s $SERVERCONFFILE sam addmem BUILTIN\\Administrators $USERNAME 345 if test "x$?" != "x0" ; then 346 echo "ERROR: adding user $USERNAME to BUILTIN\\Administrators" 347 false 348 else 349 true 350 fi 351} 352 353take_administrative_rights() 354{ 355 bin/net -s $SERVERCONFFILE sam delmem BUILTIN\\Administrators $USERNAME 356 if test "x$?" != "x0" ; then 357 echo "ERROR: removing user $USERNAME from BUILTIN\\Administrators" 358 false 359 else 360 true 361 fi 362} 363 364if test "x${RPC}" = "xrpc" ; then 365testit "giving user ${USERNAME} administrative rights" \ 366 give_administrative_rights 367 if [ "x$?" != "x0" ] ; then 368 failed=`expr $failed + 1` 369 testok $0 $failed 370 fi 371fi 372 373testit "enumerate HKLM" \ 374 test_enumerate HKLM || \ 375 failed=`expr $failed + 1` 376 377testit "enumerate nonexisting hive" \ 378 test_enumerate_nonexisting XYZ || \ 379 failed=`expr $failed + 1` 380 381testit "enumerate without key" \ 382 test_enumerate_no_key || \ 383 failed=`expr $failed + 1` 384 385# skip getsd test for registry currently: it fails 386if test "x${RPC}" != "xrpc" ; then 387testit "getsd HKLM" \ 388 test_getsd HKLM || \ 389 failed=`expr $failed + 1` 390fi 391 392testit "create existing HKLM" \ 393 test_create_existing || \ 394 failed=`expr $failed + 1` 395 396testit "create key" \ 397 test_createkey HKLM/testkey || \ 398 failed=`expr $failed + 1` 399 400testit "delete key" \ 401 test_deletekey HKLM/testkey || \ 402 failed=`expr $failed + 1` 403 404testit "delete^2 key" \ 405 test_deletekey_nonexisting HKLM/testkey || \ 406 failed=`expr $failed + 1` 407 408testit "enumerate nonexisting key" \ 409 test_enumerate_nonexisting HKLM/testkey || \ 410 failed=`expr $failed + 1` 411 412testit "create key with subkey" \ 413 test_createkey_with_subkey HKLM/testkey/subkey || \ 414 failed=`expr $failed + 1` 415 416testit "delete key with subkey" \ 417 test_deletekey_with_subkey HKLM/testkey/subkey || \ 418 failed=`expr $failed + 1` 419 420testit "set value" \ 421 test_setvalue HKLM/testkey testval sz moin || \ 422 failed=`expr $failed + 1` 423 424testit "delete value" \ 425 test_deletevalue HKLM/testkey testval || \ 426 failed=`expr $failed + 1` 427 428testit "delete nonexisting value" \ 429 test_deletevalue_nonexisting HKLM/testkey testval || \ 430 failed=`expr $failed + 1` 431 432testit "set value to different type" \ 433 test_setvalue_twice HKLM/testkey testval sz moin dword 42 || \ 434 failed=`expr $failed + 1` 435 436testit "delete key with value" \ 437 test_deletekey HKLM/testkey || \ 438 failed=`expr $failed + 1` 439 440if test "x${RPC}" = "xrpc" ; then 441testit "taking administrative rights from user ${USERNAME}" \ 442 take_administrative_rights || \ 443 failed=`expr $failed + 1` 444fi 445 446testok $0 $failed 447 448