1 #! /bin/sh 2 ## This work is part of OpenLDAP Software <http://www.openldap.org/>. 3 ## 4 ## Copyright 1998-2024 The OpenLDAP Foundation. 5 ## All rights reserved. 6 ## 7 ## Redistribution and use in source and binary forms, with or without 8 ## modification, are permitted only as authorized by the OpenLDAP 9 ## Public License. 10 ## 11 ## A copy of this license is available in the file LICENSE in the 12 ## top-level directory of the distribution or, alternatively, at 13 ## <http://www.OpenLDAP.org/license.html>. 14 15 echo "running defines.sh" 16 . $SRCDIR/scripts/defines.sh 17 18 if test $DYNLIST = "dynlistno" ; then 19 echo "dynlist overlay not available, test skipped" 20 exit 0 21 fi 22 23 if test $BACKEND = ldif ; then 24 # dynlist+ldif fails because back-ldif lacks bi_op_compare() 25 echo "$BACKEND backend unsuitable for dynlist overlay, test skipped" 26 exit 0 27 fi 28 29 mkdir -p $TESTDIR $DBDIR1 30 31 $SLAPPASSWD -g -n >$CONFIGPWF 32 echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf 33 34 DBIX=2 35 36 echo "Running slapadd to build slapd database..." 37 . $CONFFILTER $BACKEND < $DYNLISTCONF > $CONF1 38 $SLAPADD -f $CONF1 -l $LDIFORDERED 39 RC=$? 40 if test $RC != 0 ; then 41 echo "slapadd failed ($RC)!" 42 exit $RC 43 fi 44 45 46 echo "Starting slapd on TCP/IP port $PORT1..." 47 $SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 & 48 PID=$! 49 if test $WAIT != 0 ; then 50 echo PID $PID 51 read foo 52 fi 53 KILLPIDS="$PID" 54 55 sleep 1 56 57 echo "Testing slapd searching..." 58 for i in 0 1 2 3 4 5; do 59 $LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \ 60 '(objectclass=*)' > /dev/null 2>&1 61 RC=$? 62 if test $RC = 0 ; then 63 break 64 fi 65 echo "Waiting 5 seconds for slapd to start..." 66 sleep 5 67 done 68 69 if test $RC != 0 ; then 70 echo "ldapsearch failed ($RC)!" 71 test $KILLSERVERS != no && kill -HUP $KILLPIDS 72 exit $RC 73 fi 74 75 cat /dev/null > $SEARCHOUT 76 77 LISTDN="ou=Dynamic Lists,$BASEDN" 78 echo "Adding a dynamic list..." 79 $LDAPADD -v -D "$MANAGERDN" -H $URI1 -w $PASSWD \ 80 > $TESTOUT 2>&1 << EOMODS 81 dn: $LISTDN 82 objectClass: organizationalUnit 83 ou: Dynamic Lists 84 85 dn: cn=Dynamic List,$LISTDN 86 objectClass: groupOfURLs 87 cn: Dynamic List 88 memberURL: ldap:///ou=People,${BASEDN}?cn,mail?sub?(objectClass=person) 89 EOMODS 90 91 echo "Testing list search of all attrs..." 92 echo "# Testing list search of all attrs..." >> $SEARCHOUT 93 $LDAPSEARCH -S "" -b "$LISTDN" -H $URI1 \ 94 '(cn=Dynamic List)' '*' \ 95 >> $SEARCHOUT 2>&1 96 RC=$? 97 if test $RC != 0 ; then 98 echo "ldapsearch failed ($RC)!" 99 test $KILLSERVERS != no && kill -HUP $KILLPIDS 100 exit $RC 101 fi 102 103 echo "Testing list search of a listed attr..." 104 echo "# Testing list search of a listed attr..." >> $SEARCHOUT 105 $LDAPSEARCH -S "" -b "$LISTDN" -H $URI1 \ 106 '(cn=Dynamic List)' mail \ 107 >> $SEARCHOUT 2>&1 108 RC=$? 109 if test $RC != 0 ; then 110 echo "ldapsearch failed ($RC)!" 111 test $KILLSERVERS != no && kill -HUP $KILLPIDS 112 exit $RC 113 fi 114 115 echo "Testing list search of a non-listed attr..." 116 echo "# Testing list search of a non-listed attr..." >> $SEARCHOUT 117 $LDAPSEARCH -S "" -b "$LISTDN" -H $URI1 \ 118 '(cn=Dynamic List)' objectClass \ 119 >> $SEARCHOUT 2>&1 120 RC=$? 121 if test $RC != 0 ; then 122 echo "ldapsearch failed ($RC)!" 123 test $KILLSERVERS != no && kill -HUP $KILLPIDS 124 exit $RC 125 fi 126 127 echo "Testing list search with (critical) manageDSAit..." 128 echo "# Testing list search with (critical) manageDSAit..." >> $SEARCHOUT 129 $LDAPSEARCH -S "" -b "$LISTDN" -H $URI1 -MM \ 130 '(cn=Dynamic List)' '*' \ 131 >> $SEARCHOUT 2>&1 132 RC=$? 133 if test $RC != 0 ; then 134 echo "ldapsearch failed ($RC)!" 135 test $KILLSERVERS != no && kill -HUP $KILLPIDS 136 exit $RC 137 fi 138 139 echo "Testing filtered search with all attrs..." 140 echo "# Testing filtered search with all attrs..." >> $SEARCHOUT 141 $LDAPSEARCH -S "" -b "$LISTDN" -H $URI1 \ 142 '(mail=jdoe (at] woof.net)' '*' \ 143 >> $SEARCHOUT 2>&1 144 RC=$? 145 if test $RC != 0 ; then 146 echo "ldapsearch failed ($RC)!" 147 test $KILLSERVERS != no && kill -HUP $KILLPIDS 148 exit $RC 149 fi 150 151 echo "Testing filtered search of a listed attr..." 152 echo "# Testing filtered search of a listed attr..." >> $SEARCHOUT 153 $LDAPSEARCH -S "" -b "$LISTDN" -H $URI1 \ 154 '(mail=jdoe (at] woof.net)' mail \ 155 >> $SEARCHOUT 2>&1 156 RC=$? 157 if test $RC != 0 ; then 158 echo "ldapsearch failed ($RC)!" 159 test $KILLSERVERS != no && kill -HUP $KILLPIDS 160 exit $RC 161 fi 162 163 echo "Testing filtered search of a non-listed attr..." 164 echo "# Testing filtered search of a non-listed attr..." >> $SEARCHOUT 165 $LDAPSEARCH -S "" -b "$LISTDN" -H $URI1 \ 166 '(mail=jdoe (at] woof.net)' objectClass \ 167 >> $SEARCHOUT 2>&1 168 RC=$? 169 if test $RC != 0 ; then 170 echo "ldapsearch failed ($RC)!" 171 test $KILLSERVERS != no && kill -HUP $KILLPIDS 172 exit $RC 173 fi 174 175 echo "Testing filtered search of a non-present attr..." 176 echo "# Testing filtered search of a non-present attr..." >> $SEARCHOUT 177 $LDAPSEARCH -S "" -b "$LISTDN" -H $URI1 \ 178 '(mail=nobody@nowhere)' objectClass \ 179 >> $SEARCHOUT 2>&1 180 RC=$? 181 if test $RC != 0 ; then 182 echo "ldapsearch failed ($RC)!" 183 test $KILLSERVERS != no && kill -HUP $KILLPIDS 184 exit $RC 185 fi 186 187 echo "Testing list compare..." 188 echo "# Testing list compare..." >> $SEARCHOUT 189 $LDAPCOMPARE -H $URI1 \ 190 "cn=Dynamic List,$LISTDN" "cn:Bjorn Jensen" \ 191 >> $SEARCHOUT 2>&1 192 RC=$? 193 case $RC in 194 5) 195 echo "ldapcompare returned FALSE ($RC)!" 196 test $KILLSERVERS != no && kill -HUP $KILLPIDS 197 exit $RC 198 ;; 199 6) 200 echo "ldapcompare returned TRUE ($RC)" 201 ;; 202 0) 203 echo "ldapcompare returned success ($RC)!" 204 test $KILLSERVERS != no && kill -HUP $KILLPIDS 205 exit 1 206 ;; 207 *) 208 echo "ldapcompare failed ($RC)!" 209 test $KILLSERVERS != no && kill -HUP $KILLPIDS 210 exit $RC 211 ;; 212 esac 213 echo "" >> $SEARCHOUT 214 215 echo "Testing list compare (should return FALSE)..." 216 echo "# Testing list compare (should return FALSE)..." >> $SEARCHOUT 217 $LDAPCOMPARE -H $URI1 \ 218 "cn=Dynamic List,$LISTDN" "cn:FALSE" \ 219 >> $SEARCHOUT 2>&1 220 RC=$? 221 case $RC in 222 5) 223 echo "ldapcompare returned FALSE ($RC)" 224 ;; 225 6) 226 echo "ldapcompare returned TRUE ($RC)!" 227 test $KILLSERVERS != no && kill -HUP $KILLPIDS 228 exit $RC 229 ;; 230 0) 231 echo "ldapcompare returned success ($RC)!" 232 test $KILLSERVERS != no && kill -HUP $KILLPIDS 233 exit 1 234 ;; 235 *) 236 echo "ldapcompare failed ($RC)!" 237 test $KILLSERVERS != no && kill -HUP $KILLPIDS 238 exit $RC 239 ;; 240 esac 241 echo "" >> $SEARCHOUT 242 243 echo "Testing list compare (should return UNDEFINED)..." 244 echo "# Testing list compare (should return UNDEFINED)..." >> $SEARCHOUT 245 $LDAPCOMPARE -H $URI1 \ 246 "cn=Dynamic List,$LISTDN" "dc:UNDEFINED" \ 247 >> $SEARCHOUT 2>&1 248 RC=$? 249 case $RC in 250 5) 251 echo "ldapcompare returned FALSE ($RC)!" 252 test $KILLSERVERS != no && kill -HUP $KILLPIDS 253 exit $RC 254 ;; 255 6) 256 echo "ldapcompare returned TRUE ($RC)!" 257 test $KILLSERVERS != no && kill -HUP $KILLPIDS 258 exit $RC 259 ;; 260 16|32) 261 echo "ldapcompare returned UNDEFINED ($RC)" 262 ;; 263 0) 264 echo "ldapcompare returned success ($RC)!" 265 test $KILLSERVERS != no && kill -HUP $KILLPIDS 266 exit 1 267 ;; 268 *) 269 echo "ldapcompare failed ($RC)" 270 ;; 271 esac 272 echo "" >> $SEARCHOUT 273 274 echo "Testing list compare with manageDSAit..." 275 echo "# Testing list compare with manageDSAit..." >> $SEARCHOUT 276 $LDAPCOMPARE -H $URI1 -MM \ 277 "cn=Dynamic List,$LISTDN" "cn:Bjorn Jensen" \ 278 >> $SEARCHOUT 2>&1 279 RC=$? 280 case $RC in 281 5) 282 echo "ldapcompare returned FALSE ($RC)" 283 ;; 284 6) 285 echo "ldapcompare returned TRUE ($RC)!" 286 test $KILLSERVERS != no && kill -HUP $KILLPIDS 287 exit $RC 288 ;; 289 0) 290 echo "ldapcompare returned success ($RC)!" 291 test $KILLSERVERS != no && kill -HUP $KILLPIDS 292 exit 1 293 ;; 294 *) 295 echo "ldapcompare failed ($RC)!" 296 test $KILLSERVERS != no && kill -HUP $KILLPIDS 297 exit $RC 298 ;; 299 esac 300 echo "" >> $SEARCHOUT 301 302 echo "Reconfiguring slapd..." 303 $LDAPMODIFY -x -D cn=config -H $URI1 -y $CONFIGPWF > \ 304 $TESTOUT 2>&1 << EOMODS 305 version: 1 306 dn: olcOverlay={0}dynlist,olcDatabase={$DBIX}$BACKEND,cn=config 307 changetype: modify 308 delete: olcDynListAttrSet 309 olcDynListAttrSet: {0} 310 - 311 add: olcDynListAttrSet 312 olcDynListAttrSet: groupOfURLs memberURL sn:cn mail 313 - 314 EOMODS 315 316 RC=$? 317 if test $RC != 0 ; then 318 echo "ldapmodify failed ($RC)!" 319 test $KILLSERVERS != no && kill -HUP $KILLPIDS 320 exit $RC 321 fi 322 323 echo "==========================================================" >> $LOG1 324 325 echo "Testing attribute mapping" 326 327 echo "Testing list search of all (mapped) attrs..." 328 echo "# Testing list search of all (mapped) attrs..." >> $SEARCHOUT 329 $LDAPSEARCH -S "" -b "$LISTDN" -H $URI1 \ 330 '(cn=Dynamic List)' '*' \ 331 >> $SEARCHOUT 2>&1 332 RC=$? 333 if test $RC != 0 ; then 334 echo "ldapsearch failed ($RC)!" 335 test $KILLSERVERS != no && kill -HUP $KILLPIDS 336 exit $RC 337 fi 338 339 echo "Testing list search of a (mapped) listed attr..." 340 echo "# Testing list search of a (mapped) listed attr..." >> $SEARCHOUT 341 $LDAPSEARCH -S "" -b "$LISTDN" -H $URI1 \ 342 '(cn=Dynamic List)' sn \ 343 >> $SEARCHOUT 2>&1 344 RC=$? 345 if test $RC != 0 ; then 346 echo "ldapsearch failed ($RC)!" 347 test $KILLSERVERS != no && kill -HUP $KILLPIDS 348 exit $RC 349 fi 350 351 echo "Testing list search of a (n unmapped) listed attr..." 352 echo "# Testing list search of a (n unmapped) listed attr..." >> $SEARCHOUT 353 $LDAPSEARCH -S "" -b "$LISTDN" -H $URI1 \ 354 '(cn=Dynamic List)' mail \ 355 >> $SEARCHOUT 2>&1 356 RC=$? 357 if test $RC != 0 ; then 358 echo "ldapsearch failed ($RC)!" 359 test $KILLSERVERS != no && kill -HUP $KILLPIDS 360 exit $RC 361 fi 362 363 echo "Testing list compare (mapped attrs) ..." 364 echo "# Testing list compare (mapped attrs) ..." >> $SEARCHOUT 365 $LDAPCOMPARE -H $URI1 \ 366 "cn=Dynamic List,$LISTDN" "sn:Bjorn Jensen" \ 367 >> $SEARCHOUT 2>&1 368 RC=$? 369 case $RC in 370 5) 371 echo "ldapcompare returned FALSE ($RC)!" 372 test $KILLSERVERS != no && kill -HUP $KILLPIDS 373 exit $RC 374 ;; 375 6) 376 echo "ldapcompare returned TRUE ($RC)" 377 ;; 378 0) 379 echo "ldapcompare returned success ($RC)!" 380 test $KILLSERVERS != no && kill -HUP $KILLPIDS 381 exit 1 382 ;; 383 *) 384 echo "ldapcompare failed ($RC)!" 385 test $KILLSERVERS != no && kill -HUP $KILLPIDS 386 exit $RC 387 ;; 388 esac 389 echo "" >> $SEARCHOUT 390 391 echo "Testing list compare (mapped attrs; should return FALSE)..." 392 echo "# Testing list compare (mapped attrs; should return FALSE)..." >> $SEARCHOUT 393 $LDAPCOMPARE -H $URI1 \ 394 "cn=Dynamic List,$LISTDN" "sn:FALSE" \ 395 >> $SEARCHOUT 2>&1 396 RC=$? 397 case $RC in 398 5) 399 echo "ldapcompare returned FALSE ($RC)" 400 ;; 401 6) 402 echo "ldapcompare returned TRUE ($RC)!" 403 test $KILLSERVERS != no && kill -HUP $KILLPIDS 404 exit $RC 405 ;; 406 0) 407 echo "ldapcompare returned success ($RC)!" 408 test $KILLSERVERS != no && kill -HUP $KILLPIDS 409 exit 1 410 ;; 411 *) 412 echo "ldapcompare failed ($RC)!" 413 test $KILLSERVERS != no && kill -HUP $KILLPIDS 414 exit $RC 415 ;; 416 esac 417 echo "" >> $SEARCHOUT 418 419 echo "Reconfiguring slapd..." 420 $LDAPMODIFY -x -D cn=config -H $URI1 -y $CONFIGPWF > \ 421 $TESTOUT 2>&1 << EOMODS 422 version: 1 423 dn: olcOverlay={0}dynlist,olcDatabase={$DBIX}$BACKEND,cn=config 424 changetype: modify 425 delete: olcDynListAttrSet 426 olcDynListAttrSet: {0} 427 - 428 add: olcDynListAttrSet 429 olcDynListAttrSet: groupOfURLs memberURL member 430 - 431 EOMODS 432 433 RC=$? 434 if test $RC != 0 ; then 435 echo "ldapmodify failed ($RC)!" 436 test $KILLSERVERS != no && kill -HUP $KILLPIDS 437 exit $RC 438 fi 439 440 echo "==========================================================" >> $LOG1 441 442 echo "Adding a dynamic list..." 443 $LDAPADD -v -D "$MANAGERDN" -H $URI1 -w $PASSWD \ 444 > $TESTOUT 2>&1 << EOMODS 445 dn: cn=Dynamic List of Members,$LISTDN 446 objectClass: groupOfURLs 447 cn: Dynamic List of Members 448 memberURL: ldap:///ou=People,${BASEDN}??sub?(objectClass=person) 449 EOMODS 450 451 echo "Testing list search of all attrs..." 452 echo "# Testing list search of all attrs..." >> $SEARCHOUT 453 $LDAPSEARCH -S "" -b "$LISTDN" -H $URI1 \ 454 '(cn=Dynamic List of Members)' '*' \ 455 >> $SEARCHOUT 2>&1 456 RC=$? 457 if test $RC != 0 ; then 458 echo "ldapsearch failed ($RC)!" 459 test $KILLSERVERS != no && kill -HUP $KILLPIDS 460 exit $RC 461 fi 462 463 echo "Testing list search of a listed attr..." 464 echo "# Testing list search of a listed attr..." >> $SEARCHOUT 465 $LDAPSEARCH -S "" -b "$LISTDN" -H $URI1 \ 466 '(cn=Dynamic List of Members)' member \ 467 >> $SEARCHOUT 2>&1 468 RC=$? 469 if test $RC != 0 ; then 470 echo "ldapsearch failed ($RC)!" 471 test $KILLSERVERS != no && kill -HUP $KILLPIDS 472 exit $RC 473 fi 474 475 echo "Testing list search of a non-listed attr..." 476 echo "# Testing list search of a non-listed attr..." >> $SEARCHOUT 477 $LDAPSEARCH -S "" -b "$LISTDN" -H $URI1 \ 478 '(cn=Dynamic List of Members)' objectClass \ 479 >> $SEARCHOUT 2>&1 480 RC=$? 481 if test $RC != 0 ; then 482 echo "ldapsearch failed ($RC)!" 483 test $KILLSERVERS != no && kill -HUP $KILLPIDS 484 exit $RC 485 fi 486 487 echo "Testing list search with (critical) manageDSAit..." 488 echo "# Testing list search with (critical) manageDSAit..." >> $SEARCHOUT 489 $LDAPSEARCH -S "" -b "$LISTDN" -H $URI1 -MM \ 490 '(&(cn=Dynamic List of Members)(objectClass=groupOfURLs))' '*' \ 491 >> $SEARCHOUT 2>&1 492 RC=$? 493 if test $RC != 0 ; then 494 echo "ldapsearch failed ($RC)!" 495 test $KILLSERVERS != no && kill -HUP $KILLPIDS 496 exit $RC 497 fi 498 499 CMPDN="$BJORNSDN" 500 echo "Testing list compare..." 501 echo "# Testing list compare..." >> $SEARCHOUT 502 $LDAPCOMPARE -H $URI1 \ 503 "cn=Dynamic List of Members,$LISTDN" "member:$CMPDN" \ 504 >> $SEARCHOUT 2>&1 505 RC=$? 506 case $RC in 507 5) 508 echo "ldapcompare returned FALSE ($RC)!" 509 test $KILLSERVERS != no && kill -HUP $KILLPIDS 510 exit $RC 511 ;; 512 6) 513 echo "ldapcompare returned TRUE ($RC)" 514 ;; 515 0) 516 echo "ldapcompare returned success ($RC)!" 517 test $KILLSERVERS != no && kill -HUP $KILLPIDS 518 exit 1 519 ;; 520 *) 521 echo "ldapcompare failed ($RC)!" 522 test $KILLSERVERS != no && kill -HUP $KILLPIDS 523 exit $RC 524 ;; 525 esac 526 echo "" >> $SEARCHOUT 527 528 CMPDN="$BADBJORNSDN" 529 echo "Testing list compare (should return FALSE)..." 530 echo "# Testing list compare... (should return FALSE)" >> $SEARCHOUT 531 $LDAPCOMPARE -H $URI1 \ 532 "cn=Dynamic List of Members,$LISTDN" "member:$CMPDN" \ 533 >> $SEARCHOUT 2>&1 534 RC=$? 535 case $RC in 536 5) 537 echo "ldapcompare returned FALSE ($RC)" 538 ;; 539 6) 540 echo "ldapcompare returned TRUE ($RC)!" 541 test $KILLSERVERS != no && kill -HUP $KILLPIDS 542 exit $RC 543 ;; 544 0) 545 echo "ldapcompare returned success ($RC)!" 546 test $KILLSERVERS != no && kill -HUP $KILLPIDS 547 exit 1 548 ;; 549 *) 550 echo "ldapcompare failed ($RC)!" 551 test $KILLSERVERS != no && kill -HUP $KILLPIDS 552 exit $RC 553 ;; 554 esac 555 echo "" >> $SEARCHOUT 556 557 CMPDN="$BJORNSDN" 558 echo "Testing list compare (should return FALSE)..." 559 echo "# Testing list compare (should return FALSE)..." >> $SEARCHOUT 560 $LDAPCOMPARE -H $URI1 \ 561 "cn=Dynamic List of Members,$LISTDN" "member:cn=Foo Bar" \ 562 >> $SEARCHOUT 2>&1 563 RC=$? 564 case $RC in 565 5) 566 echo "ldapcompare returned FALSE ($RC)" 567 ;; 568 6) 569 echo "ldapcompare returned TRUE ($RC)!" 570 test $KILLSERVERS != no && kill -HUP $KILLPIDS 571 exit $RC 572 ;; 573 0) 574 echo "ldapcompare returned success ($RC)!" 575 test $KILLSERVERS != no && kill -HUP $KILLPIDS 576 exit 1 577 ;; 578 *) 579 echo "ldapcompare failed ($RC)!" 580 test $KILLSERVERS != no && kill -HUP $KILLPIDS 581 exit $RC 582 ;; 583 esac 584 echo "" >> $SEARCHOUT 585 586 echo "Testing list compare with manageDSAit (should return UNDEFINED)..." 587 echo "# Testing list compare with manageDSAit (should return UNDEFINED)..." >> $SEARCHOUT 588 $LDAPCOMPARE -H $URI1 -MM \ 589 "cn=Dynamic List,$LISTDN" "member:$CMPDN" \ 590 >> $SEARCHOUT 2>&1 591 RC=$? 592 case $RC in 593 5) 594 echo "ldapcompare returned FALSE ($RC)" 595 test $KILLSERVERS != no && kill -HUP $KILLPIDS 596 exit $RC 597 ;; 598 6) 599 echo "ldapcompare returned TRUE ($RC)!" 600 test $KILLSERVERS != no && kill -HUP $KILLPIDS 601 exit $RC 602 ;; 603 16|32) 604 echo "ldapcompare returned UNDEFINED ($RC)" 605 ;; 606 0) 607 echo "ldapcompare returned success ($RC)!" 608 test $KILLSERVERS != no && kill -HUP $KILLPIDS 609 exit 1 610 ;; 611 *) 612 echo "ldapcompare failed ($RC)!" 613 test $KILLSERVERS != no && kill -HUP $KILLPIDS 614 exit $RC 615 ;; 616 esac 617 echo "" >> $SEARCHOUT 618 619 echo "==========================================================" >> $LOG1 620 621 echo "Testing dgIdentity..." 622 623 # Set ACL, require authentication to get list contents 624 $LDAPMODIFY -x -D cn=config -H $URI1 -y $CONFIGPWF > \ 625 $TESTOUT 2>&1 << EOMODS 626 version: 1 627 dn: olcDatabase={$DBIX}$BACKEND,cn=config 628 changetype: modify 629 add: olcAccess 630 olcAccess: to dn.base="cn=Dynamic List of Members,$LISTDN" by * read 631 olcAccess: to * by users read by * search 632 EOMODS 633 634 RC=$? 635 if test $RC != 0 ; then 636 echo "ldapmodify failed ($RC)!" 637 test $KILLSERVERS != no && kill -HUP $KILLPIDS 638 exit $RC 639 fi 640 641 echo "Testing list search without dgIdentity..." 642 echo "# Testing list search without dgIdentity..." >> $SEARCHOUT 643 $LDAPSEARCH -S "" -b "$LISTDN" -H $URI1 \ 644 '(cn=Dynamic List of Members)' '*' \ 645 >> $SEARCHOUT 2>&1 646 RC=$? 647 if test $RC != 0 ; then 648 echo "ldapsearch failed ($RC)!" 649 test $KILLSERVERS != no && kill -HUP $KILLPIDS 650 exit $RC 651 fi 652 653 $LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD \ 654 > $TESTOUT 2>&1 << EOMODS 655 dn: cn=Dynamic List of Members,$LISTDN 656 changetype: modify 657 add: objectClass 658 objectClass: dgIdentityAux 659 - 660 add: dgIdentity 661 dgIdentity: $CMPDN 662 EOMODS 663 664 RC=$? 665 if test $RC != 0 ; then 666 echo "ldapmodify failed ($RC)!" 667 test $KILLSERVERS != no && kill -HUP $KILLPIDS 668 exit $RC 669 fi 670 671 echo "Testing list search with dgIdentity..." 672 echo "# Testing list search with dgIdentity..." >> $SEARCHOUT 673 $LDAPSEARCH -S "" -b "$LISTDN" -H $URI1 \ 674 '(cn=Dynamic List of Members)' '*' \ 675 >> $SEARCHOUT 2>&1 676 RC=$? 677 if test $RC != 0 ; then 678 echo "ldapsearch failed ($RC)!" 679 test $KILLSERVERS != no && kill -HUP $KILLPIDS 680 exit $RC 681 fi 682 683 echo "Testing dgAuthz..." 684 685 CMPDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,$BASEDN" 686 $LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD \ 687 > $TESTOUT 2>&1 << EOMODS 688 dn: cn=Dynamic List of Members,$LISTDN 689 changetype: modify 690 add: dgAuthz 691 dgAuthz: dn:$BABSDN 692 EOMODS 693 694 RC=$? 695 if test $RC != 0 ; then 696 echo "ldapmodify failed ($RC)!" 697 test $KILLSERVERS != no && kill -HUP $KILLPIDS 698 exit $RC 699 fi 700 701 echo "Testing list search with dgIdentity and dgAuthz anonymously..." 702 echo "# Testing list search with dgIdentity and dgAuthz anonymously..." >> $SEARCHOUT 703 $LDAPSEARCH -S "" -b "$LISTDN" -H $URI1 \ 704 '(cn=Dynamic List of Members)' '*' \ 705 >> $SEARCHOUT 2>&1 706 RC=$? 707 if test $RC != 0 ; then 708 echo "ldapsearch failed ($RC)!" 709 test $KILLSERVERS != no && kill -HUP $KILLPIDS 710 exit $RC 711 fi 712 713 echo "Testing list search with dgIdentity and dgAuthz as the authorized identity..." 714 echo "# Testing list search with dgIdentity and dgAuthz as the authorized identity..." >> $SEARCHOUT 715 $LDAPSEARCH -S "" -b "$LISTDN" -H $URI1 \ 716 -D "$BABSDN" -w bjensen \ 717 '(cn=Dynamic List of Members)' '*' \ 718 >> $SEARCHOUT 2>&1 719 RC=$? 720 if test $RC != 0 ; then 721 echo "ldapsearch failed ($RC)!" 722 test $KILLSERVERS != no && kill -HUP $KILLPIDS 723 exit $RC 724 fi 725 726 echo "Reconfiguring slapd..." 727 $LDAPMODIFY -x -D cn=config -H $URI1 -y $CONFIGPWF > \ 728 $TESTOUT 2>&1 << EOMODS 729 version: 1 730 dn: olcOverlay={0}dynlist,olcDatabase={$DBIX}$BACKEND,cn=config 731 changetype: modify 732 delete: olcDynListAttrSet 733 olcDynListAttrSet: {0} 734 - 735 add: olcDynListAttrSet 736 olcDynListAttrSet: groupOfURLs memberURL member+memberOf 737 - 738 EOMODS 739 740 RC=$? 741 if test $RC != 0 ; then 742 echo "ldapmodify failed ($RC)!" 743 test $KILLSERVERS != no && kill -HUP $KILLPIDS 744 exit $RC 745 fi 746 747 echo "==========================================================" >> $LOG1 748 749 echo "Testing memberOf functionality..." 750 echo "# Testing memberOf functionality..." >> $SEARCHOUT 751 $LDAPSEARCH -S "" -b "ou=People,$BASEDN" -H $URI1 \ 752 -D "$BABSDN" -w bjensen \ 753 '(cn=Mark Elliot)' '*' 'memberOf' \ 754 >> $SEARCHOUT 2>&1 755 RC=$? 756 if test $RC != 0 ; then 757 echo "ldapsearch failed ($RC)!" 758 test $KILLSERVERS != no && kill -HUP $KILLPIDS 759 exit $RC 760 fi 761 762 echo "Testing filtered memberOf functionality..." 763 echo "# Testing filtered memberOf functionality..." >> $SEARCHOUT 764 $LDAPSEARCH -S "" -b "ou=People,$BASEDN" -H $URI1 \ 765 -D "$BABSDN" -w bjensen \ 766 "(&(memberOf=cn=Dynamic List of Members,ou=Dynamic Lists,$BASEDN)(cn=Mark Elliot))" '*' 'memberOf' \ 767 >> $SEARCHOUT 2>&1 768 RC=$? 769 if test $RC != 0 ; then 770 echo "ldapsearch failed ($RC)!" 771 test $KILLSERVERS != no && kill -HUP $KILLPIDS 772 exit $RC 773 fi 774 775 echo "Testing filtered member functionality..." 776 echo "# Testing filtered member functionality..." >> $SEARCHOUT 777 $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \ 778 -D "$BABSDN" -w bjensen \ 779 "(member=cn=Jane Doe,ou=Alumni Association,ou=People,$BASEDN)" \ 780 >> $SEARCHOUT 2>&1 781 RC=$? 782 if test $RC != 0 ; then 783 echo "ldapsearch failed ($RC)!" 784 test $KILLSERVERS != no && kill -HUP $KILLPIDS 785 exit $RC 786 fi 787 788 echo "Reconfiguring slapd..." 789 $LDAPMODIFY -x -D cn=config -H $URI1 -y $CONFIGPWF > \ 790 $TESTOUT 2>&1 << EOMODS 791 version: 1 792 dn: olcOverlay={0}dynlist,olcDatabase={$DBIX}$BACKEND,cn=config 793 changetype: modify 794 delete: olcDynListAttrSet 795 olcDynListAttrSet: {0} 796 - 797 add: olcDynListAttrSet 798 olcDynListAttrSet: groupOfURLs memberURL member+memberOf@groupOfNames 799 - 800 EOMODS 801 802 RC=$? 803 if test $RC != 0 ; then 804 echo "ldapmodify failed ($RC)!" 805 test $KILLSERVERS != no && kill -HUP $KILLPIDS 806 exit $RC 807 fi 808 809 echo "==========================================================" >> $LOG1 810 811 echo "Testing static group memberOf functionality..." 812 echo "# Testing static group memberOf functionality..." >> $SEARCHOUT 813 $LDAPSEARCH -S "" -b "ou=People,$BASEDN" -H $URI1 \ 814 -D "$BABSDN" -w bjensen \ 815 '(cn=Mark Elliot)' '*' 'memberOf' \ 816 >> $SEARCHOUT 2>&1 817 RC=$? 818 if test $RC != 0 ; then 819 echo "ldapsearch failed ($RC)!" 820 test $KILLSERVERS != no && kill -HUP $KILLPIDS 821 exit $RC 822 fi 823 824 echo "Testing static group member compare..." 825 echo "# Testing static group member compare..." >> $SEARCHOUT 826 $LDAPCOMPARE -H $URI1 \ 827 "cn=all staff,ou=groups,$BASEDN" "member:cn=Mark Elliot,ou=Alumni Association,ou=People,$BASEDN" >> $SEARCHOUT 828 RC=$? 829 case $RC in 830 5) 831 echo "ldapcompare returned FALSE ($RC)!" 832 test $KILLSERVERS != no && kill -HUP $KILLPIDS 833 exit $RC 834 ;; 835 6) 836 echo "ldapcompare returned TRUE ($RC)" 837 ;; 838 0) 839 echo "ldapcompare returned success ($RC)!" 840 test $KILLSERVERS != no && kill -HUP $KILLPIDS 841 exit 1 842 ;; 843 *) 844 echo "ldapcompare failed ($RC)!" 845 test $KILLSERVERS != no && kill -HUP $KILLPIDS 846 exit $RC 847 ;; 848 esac 849 echo "" >> $SEARCHOUT 850 851 echo "Testing static group non-member compare (should return FALSE)..." 852 echo "# Testing static group non-member compare (should return FALSE)..." >> $SEARCHOUT 853 $LDAPCOMPARE -H $URI1 \ 854 "cn=all staff,ou=groups,$BASEDN" "member:cn=Not A User,ou=Alumni Association,ou=People,$BASEDN" >> $SEARCHOUT 855 RC=$? 856 case $RC in 857 5) 858 echo "ldapcompare returned FALSE ($RC)" 859 ;; 860 6) 861 echo "ldapcompare returned TRUE ($RC)!" 862 test $KILLSERVERS != no && kill -HUP $KILLPIDS 863 exit $RC 864 ;; 865 0) 866 echo "ldapcompare returned success ($RC)!" 867 test $KILLSERVERS != no && kill -HUP $KILLPIDS 868 exit 1 869 ;; 870 *) 871 echo "ldapcompare failed ($RC)!" 872 test $KILLSERVERS != no && kill -HUP $KILLPIDS 873 exit $RC 874 ;; 875 esac 876 echo "" >> $SEARCHOUT 877 878 echo "Reconfiguring slapd..." 879 $LDAPMODIFY -x -D cn=config -H $URI1 -y $CONFIGPWF > \ 880 $TESTOUT 2>&1 << EOMODS 881 version: 1 882 dn: olcOverlay={0}dynlist,olcDatabase={$DBIX}$BACKEND,cn=config 883 changetype: modify 884 delete: olcDynListAttrSet 885 olcDynListAttrSet: {0} 886 - 887 add: olcDynListAttrSet 888 olcDynListAttrSet: groupOfURLs memberURL member+memberOf* 889 - 890 EOMODS 891 892 RC=$? 893 if test $RC != 0 ; then 894 echo "ldapmodify failed ($RC)!" 895 test $KILLSERVERS != no && kill -HUP $KILLPIDS 896 exit $RC 897 fi 898 899 echo "==========================================================" >> $LOG1 900 901 echo "Adding a couple dynamic groups..." 902 $LDAPADD -v -D "$MANAGERDN" -H $URI1 -w $PASSWD \ 903 > $TESTOUT 2>&1 << EOMODS 904 dn: cn=The Smiths,$LISTDN 905 objectClass: groupOfURLs 906 cn: The Smiths 907 memberURL: ldap:///ou=People,${BASEDN}??sub?(sn=Smith) 908 description: Smith family 909 910 dn: cn=Meta Group,$LISTDN 911 objectClass: groupOfURLs 912 cn: Meta Group 913 memberURL: ldap:///${LISTDN}??sub?(description=Smith%20family) 914 EOMODS 915 916 RC=$? 917 if test $RC != 0 ; then 918 echo "ldapadd failed ($RC)!" 919 test $KILLSERVERS != no && kill -HUP $KILLPIDS 920 exit $RC 921 fi 922 923 echo "Testing nested dynamic group functionality..." 924 echo "# Testing nested dynamic group functionality..." >> $SEARCHOUT 925 $LDAPSEARCH -S "" -b "$LISTDN" -H $URI1 \ 926 -D "$BABSDN" -w bjensen \ 927 '(objectclass=*)' '*' 'memberOf' \ 928 >> $SEARCHOUT 2>&1 929 RC=$? 930 if test $RC != 0 ; then 931 echo "ldapsearch failed ($RC)!" 932 test $KILLSERVERS != no && kill -HUP $KILLPIDS 933 exit $RC 934 fi 935 936 $LDAPSEARCH -S "" -b "ou=People,$BASEDN" -H $URI1 \ 937 -D "$BABSDN" -w bjensen \ 938 '(cn=Mark Elliot)' '*' 'memberOf' \ 939 >> $SEARCHOUT 2>&1 940 RC=$? 941 if test $RC != 0 ; then 942 echo "ldapsearch failed ($RC)!" 943 test $KILLSERVERS != no && kill -HUP $KILLPIDS 944 exit $RC 945 fi 946 947 echo "Reconfiguring slapd..." 948 $LDAPMODIFY -x -D cn=config -H $URI1 -y $CONFIGPWF > \ 949 $TESTOUT 2>&1 << EOMODS 950 version: 1 951 dn: olcOverlay={0}dynlist,olcDatabase={$DBIX}$BACKEND,cn=config 952 changetype: modify 953 delete: olcDynListAttrSet 954 olcDynListAttrSet: {0} 955 - 956 add: olcDynListAttrSet 957 olcDynListAttrSet: groupOfURLs memberURL member+memberOf@groupOfNames* 958 olcDynListAttrSet: labeledURIObject labeledURI uniqueMember+seeAlso@groupOfUniqueNames 959 - 960 EOMODS 961 962 RC=$? 963 if test $RC != 0 ; then 964 echo "ldapmodify failed ($RC)!" 965 test $KILLSERVERS != no && kill -HUP $KILLPIDS 966 exit $RC 967 fi 968 969 echo "==========================================================" >> $LOG1 970 971 echo "Adding a couple static groups..." 972 $LDAPADD -v -D "$MANAGERDN" -H $URI1 -w $PASSWD \ 973 > $TESTOUT 2>&1 << EOMODS 974 dn: cn=The Jensens,ou=Groups,$BASEDN 975 objectClass: groupOfnames 976 cn: The Jensens 977 member: cn=Bjorn Jensen,ou=Information Technology DivisioN,ou=People,$BASEDN 978 member: cn=Barbara Jensen,ou=Information Technology DivisioN,ou=People,$BASEDN 979 980 dn: cn=JJs,ou=Groups,$BASEDN 981 objectClass: groupOfnames 982 cn: JJs 983 member: cn=James A Jones 1,ou=Alumni Association,ou=People,$BASEDN 984 member: cn=James A Jones 2,ou=Information Technology Division,ou=People,$BASEDN 985 member: cn=The Jensens,ou=Groups,$BASEDN 986 EOMODS 987 988 RC=$? 989 if test $RC != 0 ; then 990 echo "ldapadd failed ($RC)!" 991 test $KILLSERVERS != no && kill -HUP $KILLPIDS 992 exit $RC 993 fi 994 995 echo "Testing nested static group functionality..." 996 echo "# Testing nested static group functionality..." >> $SEARCHOUT 997 $LDAPSEARCH -S "" -b "ou=People,$BASEDN" -H $URI1 \ 998 -D "$BABSDN" -w bjensen \ 999 '(sn=Jensen)' '*' 'memberOf' \ 1000 >> $SEARCHOUT 2>&1 1001 RC=$? 1002 if test $RC != 0 ; then 1003 echo "ldapsearch failed ($RC)!" 1004 test $KILLSERVERS != no && kill -HUP $KILLPIDS 1005 exit $RC 1006 fi 1007 1008 echo "Adding another nested group..." 1009 $LDAPADD -v -D "$MANAGERDN" -H $URI1 -w $PASSWD \ 1010 > $TESTOUT 2>&1 << EOMODS 1011 dn: cn=Bonus Group,ou=Groups,$BASEDN 1012 objectClass: groupOfnames 1013 cn: Bonus Group 1014 member: cn=Ursula Hampster,ou=Alumni Association,ou=People,$BASEDN 1015 member: cn=Meta Group,$LISTDN 1016 EOMODS 1017 1018 $LDAPSEARCH -S "" -b "ou=People,$BASEDN" -H $URI1 \ 1019 -D "$BABSDN" -w bjensen \ 1020 '(sn=Hampster)' '*' 'memberOf' \ 1021 >> $SEARCHOUT 2>&1 1022 RC=$? 1023 if test $RC != 0 ; then 1024 echo "ldapsearch failed ($RC)!" 1025 test $KILLSERVERS != no && kill -HUP $KILLPIDS 1026 exit $RC 1027 fi 1028 1029 $LDAPSEARCH -S "" -b "ou=People,$BASEDN" -H $URI1 \ 1030 -D "$BABSDN" -w bjensen \ 1031 '(sn=Doe)' '*' 'memberOf' \ 1032 >> $SEARCHOUT 2>&1 1033 RC=$? 1034 if test $RC != 0 ; then 1035 echo "ldapsearch failed ($RC)!" 1036 test $KILLSERVERS != no && kill -HUP $KILLPIDS 1037 exit $RC 1038 fi 1039 1040 $LDAPSEARCH -S "" -b "ou=People,$BASEDN" -H $URI1 \ 1041 -D "$BABSDN" -w bjensen \ 1042 '(sn=Smith)' '*' 'memberOf' \ 1043 >> $SEARCHOUT 2>&1 1044 RC=$? 1045 if test $RC != 0 ; then 1046 echo "ldapsearch failed ($RC)!" 1047 test $KILLSERVERS != no && kill -HUP $KILLPIDS 1048 exit $RC 1049 fi 1050 1051 echo "Testing filtered nested memberOf functionality..." 1052 echo "# Testing filtered nested memberOf functionality..." >> $SEARCHOUT 1053 1054 $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \ 1055 -D "$BABSDN" -w bjensen \ 1056 "(memberOf=cn=bonus group,ou=groups,$BASEDN)" '*' 'memberOf' \ 1057 >> $SEARCHOUT 2>&1 1058 RC=$? 1059 if test $RC != 0 ; then 1060 echo "ldapsearch failed ($RC)!" 1061 test $KILLSERVERS != no && kill -HUP $KILLPIDS 1062 exit $RC 1063 fi 1064 1065 $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \ 1066 -D "$BABSDN" -w bjensen \ 1067 "(&(uid=jjones)(memberOf=cn=jjs,ou=groups,$BASEDN))" 'uid' \ 1068 >> $SEARCHOUT 2>&1 1069 RC=$? 1070 if test $RC != 0 ; then 1071 echo "ldapsearch failed ($RC)!" 1072 test $KILLSERVERS != no && kill -HUP $KILLPIDS 1073 exit $RC 1074 fi 1075 1076 echo "Testing negated filtered memberOf functionality..." 1077 echo "# Testing negated filtered memberOf functionality..." >> $SEARCHOUT 1078 1079 $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \ 1080 -D "$BABSDN" -w bjensen \ 1081 "(&(objectClass=OpenLDAPperson)(!(memberOf=cn=Alumni Assoc Staff,ou=groups,$BASEDN)))" '*' 'memberOf' \ 1082 >> $SEARCHOUT 2>&1 1083 RC=$? 1084 if test $RC != 0 ; then 1085 echo "ldapsearch failed ($RC)!" 1086 test $KILLSERVERS != no && kill -HUP $KILLPIDS 1087 exit $RC 1088 fi 1089 1090 echo "Testing filtered nested member functionality..." 1091 echo "# Testing filtered nested member functionality..." >> $SEARCHOUT 1092 1093 $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \ 1094 -D "$BABSDN" -w bjensen \ 1095 "(member=cn=Jennifer Smith,ou=Alumni Association,ou=People,$BASEDN)" '*' 'memberOf' \ 1096 >> $SEARCHOUT 2>&1 1097 RC=$? 1098 if test $RC != 0 ; then 1099 echo "ldapsearch failed ($RC)!" 1100 test $KILLSERVERS != no && kill -HUP $KILLPIDS 1101 exit $RC 1102 fi 1103 1104 test $KILLSERVERS != no && kill -HUP $KILLPIDS 1105 1106 LDIF=$DYNLISTOUT 1107 1108 echo "Filtering ldapsearch results..." 1109 $LDIFFILTER < $SEARCHOUT > $SEARCHFLT 1110 echo "Filtering original ldif used to create database..." 1111 $LDIFFILTER < $LDIF > $LDIFFLT 1112 echo "Comparing filter output..." 1113 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT 1114 1115 if test $? != 0 ; then 1116 echo "Comparison failed" 1117 exit 1 1118 fi 1119 1120 echo ">>>>> Test succeeded" 1121 1122 test $KILLSERVERS != no && wait 1123 1124 exit 0 1125