1 #! /bin/sh 2 # $OpenLDAP$ 3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>. 4 ## 5 ## Copyright 1998-2024 The OpenLDAP Foundation. 6 ## All rights reserved. 7 ## 8 ## Redistribution and use in source and binary forms, with or without 9 ## modification, are permitted only as authorized by the OpenLDAP 10 ## Public License. 11 ## 12 ## A copy of this license is available in the file LICENSE in the 13 ## top-level directory of the distribution or, alternatively, at 14 ## <http://www.OpenLDAP.org/license.html>. 15 16 echo "running defines.sh" 17 . $SRCDIR/scripts/defines.sh 18 19 if test $BACKSQL = "sqlno" ; then 20 echo "SQL backend not available, test skipped" 21 exit 0 22 fi 23 24 if test $RDBMS = "rdbmsno" ; then 25 echo "SQL test not requested, test skipped" 26 exit 0 27 fi 28 29 mkdir -p $TESTDIR 30 31 echo "Starting slapd on TCP/IP port $PORT1..." 32 . $CONFFILTER $BACKEND < $SQLCONF > $CONF1 33 $SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 & 34 PID=$! 35 if test $WAIT != 0 ; then 36 echo PID $PID 37 read foo 38 fi 39 KILLPIDS="$PID" 40 41 echo "Testing SQL backend read operations..." 42 for i in 0 1 2 3 4 5; do 43 $LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \ 44 'objectclass=*' > /dev/null 2>&1 45 RC=$? 46 if test $RC = 0 ; then 47 break 48 fi 49 echo "Waiting 5 seconds for slapd to start..." 50 sleep 5 51 done 52 53 if test $RC != 0 ; then 54 echo "ldapsearch failed ($RC)!" 55 test $KILLSERVERS != no && kill -HUP $KILLPIDS 56 exit $RC 57 fi 58 59 BASEDN="dc=example,dc=com" 60 BINDDN="cn=Mitya Kovalev,${BASEDN}" 61 BINDPW="mit" 62 echo -n "Testing correct bind... " 63 $LDAPWHOAMI -H $URI1 -D "$BINDDN" -w $BINDPW 64 RC=$? 65 if test $RC != 0 ; then 66 echo "ldapwhoami failed ($RC)!" 67 test $KILLSERVERS != no && kill -HUP $KILLPIDS 68 exit $RC 69 fi 70 71 echo -n "Testing incorrect bind (should fail)... " 72 $LDAPWHOAMI -H $URI1 -D "$BINDDN" -w "XXX" 73 RC=$? 74 if test $RC = 0 ; then 75 echo "ldapwhoami should have failed ($RC)!" 76 test $KILLSERVERS != no && kill -HUP $KILLPIDS 77 exit 1 78 fi 79 80 echo "Testing baseobject search..." 81 echo "# Testing baseobject search..." >> $SEARCHOUT 82 $LDAPSEARCH -H $URI1 -b "$BASEDN" -s base -S "" \ 83 >> $SEARCHOUT 2>&1 84 85 RC=$? 86 if test $RC != 0 ; then 87 echo "ldapsearch failed ($RC)!" 88 test $KILLSERVERS != no && kill -HUP $KILLPIDS 89 exit $RC 90 fi 91 92 echo "Testing onelevel search..." 93 echo "# Testing onelevel search..." >> $SEARCHOUT 94 $LDAPSEARCH -H $URI1 -b "$BASEDN" -s one -S "" \ 95 >> $SEARCHOUT 2>&1 96 97 RC=$? 98 if test $RC != 0 ; then 99 echo "ldapsearch failed ($RC)!" 100 test $KILLSERVERS != no && kill -HUP $KILLPIDS 101 exit $RC 102 fi 103 104 echo "Testing subtree search..." 105 echo "# Testing subtree search..." >> $SEARCHOUT 106 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" \ 107 >> $SEARCHOUT 2>&1 108 109 RC=$? 110 if test $RC != 0 ; then 111 echo "ldapsearch failed ($RC)!" 112 test $KILLSERVERS != no && kill -HUP $KILLPIDS 113 exit $RC 114 fi 115 116 echo "Testing subtree search with manageDSAit..." 117 echo "# Testing subtree search with manageDSAit..." >> $SEARCHOUT 118 $LDAPSEARCH -H $URI1 -b "$BASEDN" -M -S "" '*' ref \ 119 >> $SEARCHOUT 2>&1 120 121 RC=$? 122 if test $RC != 0 ; then 123 echo "ldapsearch failed ($RC)!" 124 test $KILLSERVERS != no && kill -HUP $KILLPIDS 125 exit $RC 126 fi 127 128 echo "Testing invalid filter..." 129 echo "# Testing invalid filter..." >> $SEARCHOUT 130 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" "(foo=)" \ 131 >> $SEARCHOUT 2>&1 132 133 RC=$? 134 if test $RC != 0 ; then 135 echo "ldapsearch failed ($RC)!" 136 test $KILLSERVERS != no && kill -HUP $KILLPIDS 137 exit $RC 138 fi 139 140 echo "Testing exact search..." 141 echo "# Testing exact search..." >> $SEARCHOUT 142 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" "(sn=Kovalev)" \ 143 >> $SEARCHOUT 2>&1 144 145 RC=$? 146 if test $RC != 0 ; then 147 echo "ldapsearch failed ($RC)!" 148 test $KILLSERVERS != no && kill -HUP $KILLPIDS 149 exit $RC 150 fi 151 152 echo "Testing substrings initial search..." 153 echo "# Testing substrings initial search..." >> $SEARCHOUT 154 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" "(cn=m*)" \ 155 >> $SEARCHOUT 2>&1 156 157 RC=$? 158 if test $RC != 0 ; then 159 echo "ldapsearch failed ($RC)!" 160 test $KILLSERVERS != no && kill -HUP $KILLPIDS 161 exit $RC 162 fi 163 164 echo "Testing substrings any search..." 165 echo "# Testing substrings any search..." >> $SEARCHOUT 166 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" "(cn=*m*)" \ 167 >> $SEARCHOUT 2>&1 168 169 RC=$? 170 if test $RC != 0 ; then 171 echo "ldapsearch failed ($RC)!" 172 test $KILLSERVERS != no && kill -HUP $KILLPIDS 173 exit $RC 174 fi 175 176 echo "Testing substrings final search..." 177 echo "# Testing substrings final search..." >> $SEARCHOUT 178 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" "(cn=*v)" \ 179 >> $SEARCHOUT 2>&1 180 181 RC=$? 182 if test $RC != 0 ; then 183 echo "ldapsearch failed ($RC)!" 184 test $KILLSERVERS != no && kill -HUP $KILLPIDS 185 exit $RC 186 fi 187 188 echo "Testing approx search..." 189 echo "# Testing approx search..." >> $SEARCHOUT 190 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" "(sn~=kovalev)" \ 191 >> $SEARCHOUT 2>&1 192 193 RC=$? 194 if test $RC != 0 ; then 195 echo "ldapsearch failed ($RC)!" 196 test $KILLSERVERS != no && kill -HUP $KILLPIDS 197 exit $RC 198 fi 199 200 echo "Testing extensible filter search..." 201 echo "# Testing extensible filter search..." >> $SEARCHOUT 202 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" \ 203 "(sn:caseExactMatch:=Kovalev)" >> $SEARCHOUT 2>&1 204 205 RC=$? 206 if test $RC != 0 ; then 207 echo "ldapsearch failed ($RC)!" 208 test $KILLSERVERS != no && kill -HUP $KILLPIDS 209 exit $RC 210 fi 211 212 echo "Testing search for telephoneNumber..." 213 echo "# Testing search for telephoneNumber..." >> $SEARCHOUT 214 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" \ 215 "(telephoneNumber=3322334)" >> $SEARCHOUT 2>&1 216 217 RC=$? 218 if test $RC != 0 ; then 219 echo "ldapsearch failed ($RC)!" 220 test $KILLSERVERS != no && kill -HUP $KILLPIDS 221 exit $RC 222 fi 223 224 echo "Testing AND search..." 225 echo "# Testing AND search..." >> $SEARCHOUT 226 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" \ 227 "(&(sn=kovalev)(givenName=mitya))" >> $SEARCHOUT 2>&1 228 229 RC=$? 230 if test $RC != 0 ; then 231 echo "ldapsearch failed ($RC)!" 232 test $KILLSERVERS != no && kill -HUP $KILLPIDS 233 exit $RC 234 fi 235 236 echo "Testing AND search on objectClass..." 237 echo "# Testing AND search on objectClass..." >> $SEARCHOUT 238 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" \ 239 "(&(objectClass=organization)(objectClass=dcObject))" >> $SEARCHOUT 2>&1 240 241 RC=$? 242 if test $RC != 0 ; then 243 echo "ldapsearch failed ($RC)!" 244 test $KILLSERVERS != no && kill -HUP $KILLPIDS 245 exit $RC 246 fi 247 248 echo "Testing OR search..." 249 echo "# Testing OR search..." >> $SEARCHOUT 250 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" \ 251 "(|(sn=kovalev)(givenName=mitya))" >> $SEARCHOUT 2>&1 252 253 RC=$? 254 if test $RC != 0 ; then 255 echo "ldapsearch failed ($RC)!" 256 test $KILLSERVERS != no && kill -HUP $KILLPIDS 257 exit $RC 258 fi 259 260 echo "Testing OR search on objectClass..." 261 echo "# Testing OR search on objectClass..." >> $SEARCHOUT 262 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" \ 263 "(|(objectClass=document)(objectClass=organization))" \ 264 >> $SEARCHOUT 2>&1 265 266 RC=$? 267 if test $RC != 0 ; then 268 echo "ldapsearch failed ($RC)!" 269 test $KILLSERVERS != no && kill -HUP $KILLPIDS 270 exit $RC 271 fi 272 273 echo "Testing NOT search..." 274 echo "# Testing NOT search..." >> $SEARCHOUT 275 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" \ 276 '(!(sn=kovalev))' >> $SEARCHOUT 2>&1 277 278 RC=$? 279 if test $RC != 0 ; then 280 echo "ldapsearch failed ($RC)!" 281 test $KILLSERVERS != no && kill -HUP $KILLPIDS 282 exit $RC 283 fi 284 285 echo "Testing NOT search on objectClass..." 286 echo "# Testing NOT search on objectClass..." >> $SEARCHOUT 287 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" \ 288 '(!(objectClass=inetOrgPerson))' >> $SEARCHOUT 2>&1 289 290 RC=$? 291 if test $RC != 0 ; then 292 echo "ldapsearch failed ($RC)!" 293 test $KILLSERVERS != no && kill -HUP $KILLPIDS 294 exit $RC 295 fi 296 297 echo "Testing NOT search on \"auxiliary\" objectClass..." 298 echo "# Testing NOT search on \"auxiliary\" objectClass..." >> $SEARCHOUT 299 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" \ 300 '(!(objectClass=dcObject))' >> $SEARCHOUT 2>&1 301 302 RC=$? 303 if test $RC != 0 ; then 304 echo "ldapsearch failed ($RC)!" 305 test $KILLSERVERS != no && kill -HUP $KILLPIDS 306 exit $RC 307 fi 308 309 #### Needs work... 310 echo "Testing NOT presence search... (disabled)" 311 ###echo "# Testing NOT presence search..." >> $SEARCHOUT 312 ###$LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" \ 313 ### '(!(sn=*))' >> $SEARCHOUT 2>&1 314 ### 315 ###RC=$? 316 ###if test $RC != 0 ; then 317 ### echo "ldapsearch failed ($RC)!" 318 ### test $KILLSERVERS != no && kill -HUP $KILLPIDS 319 ### exit $RC 320 ###fi 321 322 echo "Testing attribute inheritance in filter..." 323 echo "# Testing attribute inheritance in filter..." >> $SEARCHOUT 324 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" \ 325 "(name=example)" >> $SEARCHOUT 2>&1 326 327 RC=$? 328 if test $RC != 0 ; then 329 echo "ldapsearch failed ($RC)!" 330 test $KILLSERVERS != no && kill -HUP $KILLPIDS 331 exit $RC 332 fi 333 334 # ITS#4604 335 echo "Testing undefined attribute in filter..." 336 echo "# Testing undefined attribute in filter..." >> $SEARCHOUT 337 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" \ 338 "(|(o=example)(foobar=x))" >> $SEARCHOUT 2>&1 339 340 RC=$? 341 if test $RC != 0 ; then 342 echo "ldapsearch failed ($RC)!" 343 test $KILLSERVERS != no && kill -HUP $KILLPIDS 344 exit $RC 345 fi 346 347 echo "Testing objectClass inheritance in filter..." 348 echo "# Testing objectClass inheritance in filter..." >> $SEARCHOUT 349 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" \ 350 "(objectClass=person)" >> $SEARCHOUT 2>&1 351 352 RC=$? 353 if test $RC != 0 ; then 354 echo "ldapsearch failed ($RC)!" 355 test $KILLSERVERS != no && kill -HUP $KILLPIDS 356 exit $RC 357 fi 358 359 echo "Testing \"auxiliary\" objectClass in filter..." 360 echo "# Testing \"auxiliary\" objectClass in filter..." >> $SEARCHOUT 361 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" \ 362 "(objectClass=dcObject)" >> $SEARCHOUT 2>&1 363 364 RC=$? 365 if test $RC != 0 ; then 366 echo "ldapsearch failed ($RC)!" 367 test $KILLSERVERS != no && kill -HUP $KILLPIDS 368 exit $RC 369 fi 370 371 echo "Testing hasSubordinates in filter..." 372 echo "# Testing hasSubordinates in filter..." >> $SEARCHOUT 373 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" \ 374 "(hasSubordinates=TRUE)" >> $SEARCHOUT 2>&1 375 376 RC=$? 377 if test $RC != 0 ; then 378 echo "ldapsearch failed ($RC)!" 379 test $KILLSERVERS != no && kill -HUP $KILLPIDS 380 exit $RC 381 fi 382 383 echo "Testing entryUUID in filter..." 384 echo "# Testing entryUUID in filter..." >> $SEARCHOUT 385 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" \ 386 "(entryUUID=00000001-0000-0001-0000-000000000000)" >> $SEARCHOUT 2>&1 387 388 RC=$? 389 if test $RC != 0 ; then 390 echo "ldapsearch failed ($RC)!" 391 test $KILLSERVERS != no && kill -HUP $KILLPIDS 392 exit $RC 393 fi 394 395 echo "Testing attribute inheritance in requested attributes..." 396 echo "# Testing attribute inheritance in requested attributes..." >> $SEARCHOUT 397 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" \ 398 "(sn=kovalev)" name >> $SEARCHOUT 2>&1 399 400 RC=$? 401 if test $RC != 0 ; then 402 echo "ldapsearch failed ($RC)!" 403 test $KILLSERVERS != no && kill -HUP $KILLPIDS 404 exit $RC 405 fi 406 407 echo "Testing objectClass in requested attributes..." 408 echo "# Testing objectClass in requested attributes..." >> $SEARCHOUT 409 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" \ 410 objectClass >> $SEARCHOUT 2>&1 411 412 RC=$? 413 if test $RC != 0 ; then 414 echo "ldapsearch failed ($RC)!" 415 test $KILLSERVERS != no && kill -HUP $KILLPIDS 416 exit $RC 417 fi 418 419 echo "Testing operational attributes in request..." 420 echo "# Testing operational attributes in request..." >> $SEARCHOUT 421 $LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" \ 422 '+' 2>&1 > $SEARCHFLT 423 424 RC=$? 425 if test $RC != 0 ; then 426 echo "ldapsearch failed ($RC)!" 427 test $KILLSERVERS != no && kill -HUP $KILLPIDS 428 exit $RC 429 fi 430 431 grep -v '^entryCSN:' $SEARCHFLT >> $SEARCHOUT 432 433 SIZELIMIT=4 434 echo "Testing size limit..." 435 $LDAPRSEARCH -H $URI1 -b "$BASEDN" \ 436 -z $SIZELIMIT -S "" '(objectClass=*)' >$SEARCHFLT 2>&1 437 RC=$? 438 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHFLT` 439 case $RC in 440 0) 441 if test x"$COUNT" != x ; then 442 if test "$COUNT" -gt "$SIZELIMIT" ; then 443 echo "...error: got $COUNT entries instead of the requested $SIZELIMIT" 444 test $KILLSERVERS != no && kill -HUP $KILLPIDS 445 exit 1 446 fi 447 echo "...didn't bump into the requested size limit ($SIZELIMIT; got $COUNT entries)" 448 else 449 echo "...error: did not expect ldapsearch success ($RC)!" 450 test $KILLSERVERS != no && kill -HUP $KILLPIDS 451 exit 1 452 fi 453 ;; 454 4) 455 if test x"$COUNT" != x ; then 456 if test "$COUNT" = "$SIZELIMIT" ; then 457 echo "...bumped into requested size limit ($SIZELIMIT)" 458 else 459 echo "...error: got $COUNT entries with a requested sizelimit of $SIZELIMIT" 460 test $KILLSERVERS != no && kill -HUP $KILLPIDS 461 exit $RC 462 fi 463 else 464 echo "...error: bumped into server-side size limit, but got no entries!" 465 test $KILLSERVERS != no && kill -HUP $KILLPIDS 466 exit $RC 467 fi 468 ;; 469 *) 470 echo "ldapsearch failed ($RC)!" 471 test $KILLSERVERS != no && kill -HUP $KILLPIDS 472 exit $RC 473 ;; 474 esac 475 476 echo -n "Testing compare (should be TRUE)... " 477 $LDAPCOMPARE -H $URI1 "$BINDDN" \ 478 "sn:kovalev" >> $TESTOUT 2>&1 479 480 RC=$? 481 case $RC in 482 6) 483 echo "TRUE" 484 ;; 485 5) echo "FALSE!" 486 test $KILLSERVERS != no && kill -HUP $KILLPIDS 487 exit $RC 488 ;; 489 *) echo "failed ($RC)!" 490 test $KILLSERVERS != no && kill -HUP $KILLPIDS 491 exit 1 492 ;; 493 esac 494 495 echo -n "Testing compare (should be FALSE)... " 496 $LDAPCOMPARE -H $URI1 "$BINDDN" \ 497 "cn:foobar" >> $TESTOUT 2>&1 498 499 RC=$? 500 case $RC in 501 6) 502 echo "TRUE!" 503 test $KILLSERVERS != no && kill -HUP $KILLPIDS 504 exit $RC 505 ;; 506 5) echo "FALSE" 507 ;; 508 *) echo "failed ($RC)!" 509 test $KILLSERVERS != no && kill -HUP $KILLPIDS 510 exit 1 511 ;; 512 esac 513 514 echo -n "Testing compare (should be UNDEFINED)... " 515 $LDAPCOMPARE -H $URI1 "$BINDDN" \ 516 "o:example" >> $TESTOUT 2>&1 517 518 RC=$? 519 case $RC in 520 6) 521 echo "TRUE!" 522 test $KILLSERVERS != no && kill -HUP $KILLPIDS 523 exit $RC 524 ;; 525 5) echo "FALSE!" 526 test $KILLSERVERS != no && kill -HUP $KILLPIDS 527 exit $RC 528 ;; 529 *) echo "failed ($RC)" 530 ;; 531 esac 532 533 echo -n "Testing compare on hasSubordinates (should be TRUE)... " 534 $LDAPCOMPARE -H $URI1 "$BASEDN" \ 535 "hasSubordinates:TRUE" >> $TESTOUT 2>&1 536 537 RC=$? 538 case $RC in 539 6) 540 echo "TRUE" 541 ;; 542 5) echo "FALSE!" 543 test $KILLSERVERS != no && kill -HUP $KILLPIDS 544 exit $RC 545 ;; 546 *) echo "failed ($RC)!" 547 test $KILLSERVERS != no && kill -HUP $KILLPIDS 548 exit 1 549 ;; 550 esac 551 552 echo "Filtering ldapsearch results..." 553 $LDIFFILTER < $SEARCHOUT > $SEARCHFLT 554 echo "Filtering original ldif..." 555 $LDIFFILTER < $SQLREAD > $LDIFFLT 556 echo "Comparing filter output..." 557 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT 558 559 if test $? != 0 ; then 560 echo "comparison failed - SQL search didn't succeed" 561 test $KILLSERVERS != no && kill -HUP $KILLPIDS 562 exit 1 563 fi 564 565 test $KILLSERVERS != no && kill -HUP $KILLPIDS 566 567 echo ">>>>> Test succeeded" 568 exit 0 569