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 $PPOLICY = ppolicyno; then 20 echo "Password policy overlay not available, test skipped" 21 exit 0 22 fi 23 24 mkdir -p $TESTDIR $DBDIR1 25 26 $SLAPPASSWD -g -n >$CONFIGPWF 27 echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf 28 29 echo "Starting slapd on TCP/IP port $PORT1..." 30 . $CONFFILTER $BACKEND < $PPOLICYCONF > $CONF1 31 $SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 & 32 PID=$! 33 if test $WAIT != 0 ; then 34 echo PID $PID 35 read foo 36 fi 37 KILLPIDS="$PID" 38 39 USER="uid=nd, ou=People, dc=example, dc=com" 40 PASS=testpassword 41 PWADMIN="uid=ndadmin, ou=People, dc=example, dc=com" 42 ADMINPASSWD=testpw 43 44 sleep 1 45 46 echo "Using ldapsearch to check that slapd is running..." 47 for i in 0 1 2 3 4 5; do 48 $LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \ 49 'objectclass=*' > /dev/null 2>&1 50 RC=$? 51 if test $RC = 0 ; then 52 break 53 fi 54 echo "Waiting 5 seconds for slapd to start..." 55 sleep 5 56 done 57 if test $RC != 0 ; then 58 echo "ldapsearch failed ($RC)!" 59 test $KILLSERVERS != no && kill -HUP $KILLPIDS 60 exit $RC 61 fi 62 63 echo /dev/null > $TESTOUT 64 65 echo "Testing redundant ppolicy instance..." 66 $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1 67 dn: olcOverlay=ppolicy,olcDatabase={1}$BACKEND,cn=config 68 objectClass: olcOverlayConfig 69 objectClass: olcPPolicyConfig 70 olcOverlay: ppolicy 71 olcPPolicyDefault: cn=duplicate policy,ou=policies,dc=example,dc=com 72 EOF 73 RC=$? 74 if test $RC = 0 ; then 75 echo "ldapadd should have failed ($RC)!" 76 test $KILLSERVERS != no && kill -HUP $KILLPIDS 77 exit 1 78 fi 79 80 echo "Using ldapadd to populate the database..." 81 $LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD \ 82 < $LDIFPPOLICY >> $TESTOUT 2>&1 83 RC=$? 84 if test $RC != 0 ; then 85 echo "ldapadd failed ($RC)!" 86 test $KILLSERVERS != no && kill -HUP $KILLPIDS 87 exit $RC 88 fi 89 90 echo "Testing account lockout..." 91 $LDAPSEARCH -H $URI1 -D "$USER" -w wrongpw >$SEARCHOUT 2>&1 92 sleep 2 93 $LDAPSEARCH -H $URI1 -D "$USER" -w wrongpw >>$SEARCHOUT 2>&1 94 sleep 2 95 $LDAPSEARCH -H $URI1 -D "$USER" -w wrongpw >>$SEARCHOUT 2>&1 96 sleep 2 97 $LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w wrongpw >> $SEARCHOUT 2>&1 98 $LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w $PASS >> $SEARCHOUT 2>&1 99 COUNT=`grep "Account locked" $SEARCHOUT | wc -l` 100 if test $COUNT != 2 ; then 101 echo "Account lockout test failed" 102 test $KILLSERVERS != no && kill -HUP $KILLPIDS 103 exit 1 104 fi 105 106 DELAYATTR=`$LDAPSEARCH -D "$MANAGERDN" -H $URI1 -w $PASSWD -b "$USER" -E accountUsability 1.1` 107 echo "$DELAYATTR" >> $SEARCHOUT 108 DELAY=`echo "$DELAYATTR" | sed -n -e 's/.*seconds_before_unlock=\([[:digit:]]*\)/\1/p'` 109 110 echo "Waiting $DELAY seconds for lockout to reset..." 111 sleep $DELAY 112 sleep 1 113 114 $LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w $PASS \ 115 -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 116 RC=$? 117 if test $RC != 0 ; then 118 echo "ldapsearch failed ($RC)!" 119 test $KILLSERVERS != no && kill -HUP $KILLPIDS 120 exit $RC 121 fi 122 123 DELAYATTR=`$LDAPSEARCH -D "$MANAGERDN" -H $URI1 -w $PASSWD -b "$USER" -E accountUsability 1.1` 124 echo "$DELAYATTR" >> $SEARCHOUT 125 DELAY=`echo "$DELAYATTR" | sed -n -e 's/.*expire=\([[:digit:]]*\)/\1/p'` 126 127 echo "Testing password expiration" 128 echo "Waiting $DELAY seconds for password to expire..." 129 sleep $DELAY 130 sleep 1 131 132 $LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w $PASS \ 133 -b "$BASEDN" -s base > $SEARCHOUT 2>&1 134 sleep 2 135 $LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w $PASS \ 136 -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 137 sleep 2 138 $LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w $PASS \ 139 -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 140 sleep 2 141 $LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w $PASS \ 142 -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 143 RC=$? 144 if test $RC = 0 ; then 145 echo "Password expiration failed ($RC)!" 146 test $KILLSERVERS != no && kill -HUP $KILLPIDS 147 exit 1 148 fi 149 150 COUNT=`grep "grace logins" $SEARCHOUT | wc -l` 151 if test $COUNT != 3 ; then 152 echo "Password expiration test failed" 153 test $KILLSERVERS != no && kill -HUP $KILLPIDS 154 exit 1 155 fi 156 157 echo "Resetting password to clear expired status" 158 $LDAPPASSWD -H $URI1 \ 159 -w secret -s $PASS \ 160 -D "$MANAGERDN" "$USER" >> $TESTOUT 2>&1 161 RC=$? 162 if test $RC != 0 ; then 163 echo "ldappasswd failed ($RC)!" 164 test $KILLSERVERS != no && kill -HUP $KILLPIDS 165 exit $RC 166 fi 167 168 echo "Filling password history..." 169 $LDAPMODIFY -v -D "$USER" -H $URI1 -w $PASS >> \ 170 $TESTOUT 2>&1 << EOMODS 171 dn: $USER 172 changetype: modify 173 delete: userpassword 174 userpassword: $PASS 175 - 176 replace: userpassword 177 userpassword: 20urgle12-1 178 179 dn: $USER 180 changetype: modify 181 delete: userpassword 182 userpassword: 20urgle12-1 183 - 184 replace: userpassword 185 userpassword: 20urgle12-2 186 187 dn: $USER 188 changetype: modify 189 delete: userpassword 190 userpassword: 20urgle12-2 191 - 192 replace: userpassword 193 userpassword: 20urgle12-3 194 195 dn: $USER 196 changetype: modify 197 delete: userpassword 198 userpassword: 20urgle12-3 199 - 200 replace: userpassword 201 userpassword: 20urgle12-4 202 203 dn: $USER 204 changetype: modify 205 delete: userpassword 206 userpassword: 20urgle12-4 207 - 208 replace: userpassword 209 userpassword: 20urgle12-5 210 211 dn: $USER 212 changetype: modify 213 delete: userpassword 214 userpassword: 20urgle12-5 215 - 216 replace: userpassword 217 userpassword: 20urgle12-6 218 219 EOMODS 220 RC=$? 221 if test $RC != 0 ; then 222 echo "ldapmodify failed ($RC)!" 223 test $KILLSERVERS != no && kill -HUP $KILLPIDS 224 exit $RC 225 fi 226 echo "Testing password history..." 227 $LDAPMODIFY -v -D "$USER" -H $URI1 -w 20urgle12-6 >> \ 228 $TESTOUT 2>&1 << EOMODS 229 dn: $USER 230 changetype: modify 231 delete: userPassword 232 userPassword: 20urgle12-6 233 - 234 replace: userPassword 235 userPassword: 20urgle12-2 236 237 EOMODS 238 RC=$? 239 if test $RC = 0 ; then 240 echo "ldapmodify failed ($RC)!" 241 test $KILLSERVERS != no && kill -HUP $KILLPIDS 242 exit 1 243 fi 244 245 echo "Testing failed logins when password/policy missing..." 246 247 $LDAPSEARCH -e ppolicy -H $URI1 \ 248 -D "uid=test, ou=People,$BASEDN" -w hasnopolicy \ 249 -b "$BASEDN" -s base > $SEARCHOUT 2>&1 250 RC=$? 251 if test $RC = 0 ; then 252 echo "Password accepted ($RC)!" 253 test $KILLSERVERS != no && kill -HUP $KILLPIDS 254 exit 1 255 fi 256 257 $LDAPSEARCH -e ppolicy -H $URI1 -D "$BASEDN" -w hasnopw \ 258 -b "$BASEDN" -s base > $SEARCHOUT 2>&1 259 RC=$? 260 if test $RC = 0 ; then 261 echo "Password accepted ($RC)!" 262 test $KILLSERVERS != no && kill -HUP $KILLPIDS 263 exit 1 264 fi 265 266 $LDAPSEARCH -H $URI1 -D "$MANAGERDN" -w $PASSWD -b "$BASEDN" \* \+ > $SEARCHOUT 2>&1 267 COUNT=`grep "pwdFailureTime" $SEARCHOUT | wc -l` 268 if test $COUNT != 0 ; then 269 echo "Failed login stored on an account without policy and or password" 270 test $KILLSERVERS != no && kill -HUP $KILLPIDS 271 exit 1 272 fi 273 274 echo "Testing forced reset..." 275 276 $LDAPMODIFY -v -D "$PWADMIN" -H $URI1 -w $ADMINPASSWD >> \ 277 $TESTOUT 2>&1 << EOMODS 278 dn: $USER 279 changetype: modify 280 replace: userPassword 281 userPassword: $PASS 282 283 EOMODS 284 RC=$? 285 if test $RC != 0 ; then 286 echo "ldapmodify failed ($RC)!" 287 test $KILLSERVERS != no && kill -HUP $KILLPIDS 288 exit $RC 289 fi 290 291 $LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w $PASS \ 292 -b "$BASEDN" -s base > $SEARCHOUT 2>&1 293 RC=$? 294 if test $RC = 0 ; then 295 echo "Forced reset failed ($RC)!" 296 test $KILLSERVERS != no && kill -HUP $KILLPIDS 297 exit 1 298 fi 299 300 COUNT=`grep "Operations are restricted" $SEARCHOUT | wc -l` 301 if test $COUNT != 1 ; then 302 echo "Forced reset test failed" 303 test $KILLSERVERS != no && kill -HUP $KILLPIDS 304 exit 1 305 fi 306 307 echo "Clearing forced reset..." 308 309 $LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD >> \ 310 $TESTOUT 2>&1 << EOMODS 311 dn: $USER 312 changetype: modify 313 delete: pwdReset 314 315 EOMODS 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 $LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w $PASS \ 324 -b "$BASEDN" -s base > $SEARCHOUT 2>&1 325 RC=$? 326 if test $RC != 0 ; then 327 echo "Clearing forced reset failed ($RC)!" 328 test $KILLSERVERS != no && kill -HUP $KILLPIDS 329 exit $RC 330 fi 331 332 echo "Testing Safe modify..." 333 334 $LDAPPASSWD -H $URI1 \ 335 -w $PASS -s failexpect \ 336 -D "$USER" >> $TESTOUT 2>&1 337 RC=$? 338 if test $RC = 0 ; then 339 echo "Safe modify test 1 failed ($RC)!" 340 test $KILLSERVERS != no && kill -HUP $KILLPIDS 341 exit 1 342 fi 343 344 sleep 2 345 346 OLDPASS=$PASS 347 PASS=successexpect 348 349 $LDAPPASSWD -H $URI1 \ 350 -w $OLDPASS -s $PASS -a $OLDPASS \ 351 -D "$USER" >> $TESTOUT 2>&1 352 RC=$? 353 if test $RC != 0 ; then 354 echo "Safe modify test 2 failed ($RC)!" 355 test $KILLSERVERS != no && kill -HUP $KILLPIDS 356 exit $RC 357 fi 358 359 echo "Testing length requirement..." 360 # check control in response (ITS#5711) 361 $LDAPPASSWD -H $URI1 \ 362 -w $PASS -a $PASS -s 2shr \ 363 -D "$USER" -e ppolicy > ${TESTOUT}.2 2>&1 364 RC=$? 365 cat ${TESTOUT}.2 >> $TESTOUT 366 if test $RC = 0 ; then 367 echo "Length requirement test failed ($RC)!" 368 test $KILLSERVERS != no && kill -HUP $KILLPIDS 369 exit 1 370 fi 371 COUNT=`grep "Password fails quality" ${TESTOUT}.2 | wc -l` 372 if test $COUNT != 1 ; then 373 echo "Length requirement test failed" 374 test $KILLSERVERS != no && kill -HUP $KILLPIDS 375 exit 1 376 fi 377 COUNT=`grep "Password is too short for policy" ${TESTOUT}.2 | wc -l` 378 if test $COUNT != 1 ; then 379 echo "Control not returned in response" 380 test $KILLSERVERS != no && kill -HUP $KILLPIDS 381 exit 1 382 fi 383 384 $LDAPPASSWD -H $URI1 \ 385 -w $PASS -a $PASS -s passwordthatistoolong \ 386 -D "$USER" -e ppolicy > ${TESTOUT}.2 2>&1 387 RC=$? 388 cat ${TESTOUT}.2 >> $TESTOUT 389 COUNT=`grep "Password is too long for policy" ${TESTOUT}.2 | wc -l` 390 if test $COUNT != 1 ; then 391 echo "Control not returned in response" 392 test $KILLSERVERS != no && kill -HUP $KILLPIDS 393 exit 1 394 fi 395 396 echo "Testing hashed length requirement..." 397 398 $LDAPMODIFY -H $URI1 -D "$USER" -w $PASS > \ 399 ${TESTOUT}.2 2>&1 << EOMODS 400 dn: $USER 401 changetype: modify 402 delete: userPassword 403 userPassword: $PASS 404 - 405 add: userPassword 406 userPassword: {MD5}xxxxxx 407 408 EOMODS 409 RC=$? 410 cat ${TESTOUT}.2 >> $TESTOUT 411 if test $RC = 0 ; then 412 echo "Hashed length requirement test failed ($RC)!" 413 test $KILLSERVERS != no && kill -HUP $KILLPIDS 414 exit 1 415 fi 416 COUNT=`grep "Password fails quality" ${TESTOUT}.2 | wc -l` 417 if test $COUNT != 1 ; then 418 echo "Hashed length requirement test failed" 419 test $KILLSERVERS != no && kill -HUP $KILLPIDS 420 exit 1 421 fi 422 423 echo "Testing multiple password add/modify checks..." 424 425 $LDAPMODIFY -H $URI1 -D "$MANAGERDN" -w $PASSWD >> \ 426 $TESTOUT 2>&1 << EOMODS 427 dn: cn=Add Should Fail, ou=People, dc=example, dc=com 428 changetype: add 429 objectClass: inetOrgPerson 430 cn: Add Should Fail 431 sn: Fail 432 userPassword: firstpw 433 userPassword: secondpw 434 EOMODS 435 RC=$? 436 if test $RC = 0 ; then 437 echo "Multiple password add test failed ($RC)!" 438 test $KILLSERVERS != no && kill -HUP $KILLPIDS 439 exit 1 440 fi 441 442 $LDAPMODIFY -H $URI1 -D "$MANAGERDN" -w $PASSWD >> \ 443 $TESTOUT 2>&1 << EOMODS 444 dn: $USER 445 changetype: modify 446 add: userPassword 447 userPassword: firstpw 448 userPassword: secondpw 449 EOMODS 450 RC=$? 451 if test $RC = 0 ; then 452 echo "Multiple password modify add test failed ($RC)!" 453 test $KILLSERVERS != no && kill -HUP $KILLPIDS 454 exit 1 455 fi 456 457 $LDAPMODIFY -H $URI1 -D "$MANAGERDN" -w $PASSWD >> \ 458 $TESTOUT 2>&1 << EOMODS 459 dn: $USER 460 changetype: modify 461 replace: userPassword 462 userPassword: firstpw 463 userPassword: secondpw 464 EOMODS 465 RC=$? 466 if test $RC = 0 ; then 467 echo "Multiple password modify replace test failed ($RC)!" 468 test $KILLSERVERS != no && kill -HUP $KILLPIDS 469 exit 1 470 fi 471 472 echo "Testing idle password expiration" 473 echo "Reconfiguring policy to replace expiration with idle expiration..." 474 $LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD >> \ 475 $TESTOUT 2>&1 << EOMODS 476 dn: cn=Standard Policy, ou=Policies, dc=example, dc=com 477 changetype: modify 478 delete: pwdMaxAge 479 - 480 add: pwdMaxIdle 481 pwdMaxIdle: 15 482 483 EOMODS 484 RC=$? 485 if test $RC != 0 ; then 486 echo "ldapmodify failed ($RC)!" 487 test $KILLSERVERS != no && kill -HUP $KILLPIDS 488 exit $RC 489 fi 490 491 $LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w $PASS \ 492 -b "$BASEDN" -s base > $SEARCHOUT 2>&1 493 494 DELAYATTR=`$LDAPSEARCH -D "$MANAGERDN" -H $URI1 -w $PASSWD -b "$USER" -E accountUsability 1.1` 495 echo "$DELAYATTR" >> $SEARCHOUT 496 DELAY=`echo "$DELAYATTR" | sed -n -e 's/.*expire=\([[:digit:]]*\)/\1/p'` 497 498 echo "Waiting $DELAY seconds for password to expire..." 499 sleep $DELAY 500 sleep 1 501 502 $LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w $PASS \ 503 -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 504 RC=$? 505 if test $RC != 49 ; then 506 echo "Password idle expiration failed ($RC)!" 507 test $KILLSERVERS != no && kill -HUP $KILLPIDS 508 exit 1 509 fi 510 511 echo "Reverting policy changes..." 512 $LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD >> \ 513 $TESTOUT 2>&1 << EOMODS 514 dn: cn=Standard Policy, ou=Policies, dc=example, dc=com 515 changetype: modify 516 delete: pwdMaxIdle 517 - 518 add: pwdMaxAge 519 pwdMaxAge: 30 520 521 EOMODS 522 RC=$? 523 if test $RC != 0 ; then 524 echo "ldapmodify failed ($RC)!" 525 test $KILLSERVERS != no && kill -HUP $KILLPIDS 526 exit $RC 527 fi 528 529 if test "$BACKLDAP" != "ldapno" && test "$SYNCPROV" != "syncprovno" ; then 530 echo "" 531 echo "Setting up policy state forwarding test..." 532 533 mkdir $DBDIR2 534 sed -e "s,$DBDIR1,$DBDIR2," < $CONF1 > $CONF2 535 echo "Starting slapd consumer on TCP/IP port $PORT2..." 536 $SLAPD -f $CONF2 -h $URI2 -d $LVL > $LOG2 2>&1 & 537 PID=$! 538 if test $WAIT != 0 ; then 539 echo PID $PID 540 read foo 541 fi 542 KILLPIDS="$KILLPIDS $PID" 543 544 echo "Configuring syncprov on provider..." 545 if [ "$SYNCPROV" = syncprovmod ]; then 546 $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1 547 dn: cn=module,cn=config 548 objectclass: olcModuleList 549 cn: module 550 olcModulePath: $TESTWD/../servers/slapd/overlays 551 olcModuleLoad: syncprov.la 552 553 EOF 554 RC=$? 555 if test $RC != 0 ; then 556 echo "ldapadd failed for moduleLoad ($RC)!" 557 test $KILLSERVERS != no && kill -HUP $KILLPIDS 558 exit $RC 559 fi 560 fi 561 562 $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1 563 dn: olcOverlay={1}syncprov,olcDatabase={1}$BACKEND,cn=config 564 objectClass: olcOverlayConfig 565 objectClass: olcSyncProvConfig 566 olcOverlay: {1}syncprov 567 568 EOF 569 RC=$? 570 if test $RC != 0 ; then 571 echo "ldapadd failed for provider database config ($RC)!" 572 test $KILLSERVERS != no && kill -HUP $KILLPIDS 573 exit $RC 574 fi 575 576 echo "Using ldapsearch to check that slapd is running..." 577 for i in 0 1 2 3 4 5; do 578 $LDAPSEARCH -s base -b "$MONITOR" -H $URI2 \ 579 'objectclass=*' > /dev/null 2>&1 580 RC=$? 581 if test $RC = 0 ; then 582 break 583 fi 584 echo "Waiting 5 seconds for slapd to start..." 585 sleep 5 586 done 587 if test $RC != 0 ; then 588 echo "ldapsearch failed ($RC)!" 589 test $KILLSERVERS != no && kill -HUP $KILLPIDS 590 exit $RC 591 fi 592 593 echo "Configuring syncrepl on consumer..." 594 if [ "$BACKLDAP" = ldapmod ]; then 595 $LDAPADD -D cn=config -H $URI2 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1 596 dn: cn=module,cn=config 597 objectclass: olcModuleList 598 cn: module 599 olcModulePath: $TESTWD/../servers/slapd/back-ldap 600 olcModuleLoad: back_ldap.la 601 602 EOF 603 RC=$? 604 if test $RC != 0 ; then 605 echo "ldapadd failed for moduleLoad ($RC)!" 606 test $KILLSERVERS != no && kill -HUP $KILLPIDS 607 exit $RC 608 fi 609 fi 610 $LDAPMODIFY -D cn=config -H $URI2 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1 611 dn: olcOverlay={0}chain,olcDatabase={-1}frontend,cn=config 612 changetype: add 613 objectClass: olcOverlayConfig 614 objectClass: olcChainConfig 615 olcOverlay: {0}chain 616 617 dn: olcDatabase=ldap,olcOverlay={0}chain,olcDatabase={-1}frontend,cn=config 618 changetype: add 619 objectClass: olcLDAPConfig 620 objectClass: olcChainDatabase 621 olcDBURI: $URI1 622 olcDbIDAssertBind: bindmethod=simple 623 binddn="cn=manager,dc=example,dc=com" 624 credentials=secret 625 mode=self 626 627 dn: olcDatabase={1}$BACKEND,cn=config 628 changetype: modify 629 add: olcSyncrepl 630 olcSyncrepl: rid=1 631 provider=$URI1 632 binddn="cn=manager,dc=example,dc=com" 633 bindmethod=simple 634 credentials=secret 635 searchbase="dc=example,dc=com" 636 type=refreshAndPersist 637 retry="3 5 300 5" 638 - 639 add: olcUpdateref 640 olcUpdateref: $URI1 641 - 642 643 dn: olcOverlay={0}ppolicy,olcDatabase={1}$BACKEND,cn=config 644 changetype: modify 645 replace: olcPPolicyForwardUpdates 646 olcPPolicyForwardUpdates: TRUE 647 - 648 649 EOF 650 RC=$? 651 if test $RC != 0 ; then 652 echo "ldapmodify failed ($RC)!" 653 test $KILLSERVERS != no && kill -HUP $KILLPIDS 654 exit $RC 655 fi 656 657 echo "Waiting for consumer to sync..." 658 sleep $SLEEP1 659 660 echo "Testing policy state forwarding..." 661 $LDAPSEARCH -H $URI2 -D "$USER" -w wrongpw >$SEARCHOUT 2>&1 662 RC=$? 663 if test $RC != 49 ; then 664 echo "ldapsearch should have failed with 49, got ($RC)!" 665 test $KILLSERVERS != no && kill -HUP $KILLPIDS 666 exit 1 667 fi 668 669 $LDAPSEARCH -H $URI1 -D "$MANAGERDN" -w $PASSWD -b "$USER" \* \+ >> $SEARCHOUT 2>&1 670 COUNT=`grep "pwdFailureTime" $SEARCHOUT | wc -l` 671 if test $COUNT != 1 ; then 672 echo "Policy state forwarding failed" 673 test $KILLSERVERS != no && kill -HUP $KILLPIDS 674 exit 1 675 fi 676 677 # End of chaining test 678 679 fi 680 681 echo "" 682 echo "Testing obsolete Netscape ppolicy controls..." 683 echo "Enabling Netscape controls..." 684 $LDAPMODIFY -v -D cn=config -H $URI1 -y $CONFIGPWF >> \ 685 $TESTOUT 2>&1 << EOMODS 686 dn: olcOverlay={0}ppolicy,olcDatabase={1}$BACKEND,cn=config 687 changetype: modify 688 replace: olcPPolicySendNetscapeControls 689 olcPPolicySendNetscapeControls: TRUE 690 - 691 692 EOMODS 693 RC=$? 694 if test $RC != 0 ; then 695 echo "ldapmodify failed ($RC)!" 696 test $KILLSERVERS != no && kill -HUP $KILLPIDS 697 exit $RC 698 fi 699 700 echo "Reconfiguring policy to remove grace logins..." 701 $LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD >> \ 702 $TESTOUT 2>&1 << EOMODS 703 dn: cn=Standard Policy, ou=Policies, dc=example, dc=com 704 changetype: modify 705 delete: pwdGraceAuthnLimit 706 - 707 replace: pwdMaxAge 708 pwdMaxAge: 15 709 - 710 711 EOMODS 712 RC=$? 713 if test $RC != 0 ; then 714 echo "ldapmodify failed ($RC)!" 715 test $KILLSERVERS != no && kill -HUP $KILLPIDS 716 exit $RC 717 fi 718 719 OLDPASS=$PASS 720 PASS=newpass 721 $LDAPPASSWD -H $URI1 \ 722 -w secret -s $PASS \ 723 -D "$MANAGERDN" "$USER" >> $TESTOUT 2>&1 724 RC=$? 725 if test $RC != 0 ; then 726 echo "Setting new password failed ($RC)!" 727 test $KILLSERVERS != no && kill -HUP $KILLPIDS 728 exit $RC 729 fi 730 731 echo "Clearing forced reset..." 732 $LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD >> \ 733 $TESTOUT 2>&1 << EOMODS 734 dn: $USER 735 changetype: modify 736 delete: pwdReset 737 738 EOMODS 739 740 DELAYATTR=`$LDAPSEARCH -D "$MANAGERDN" -H $URI1 -w $PASSWD -b "$USER" -E accountUsability 1.1` 741 echo "$DELAYATTR" >> $TESTOUT 742 DELAY=`echo "$DELAYATTR" | sed -n -e 's/.*expire=\([[:digit:]]*\)/\1/p'` 743 DELAY=`expr $DELAY - 10` 744 745 echo "Testing password expiration" 746 echo "Waiting $DELAY seconds for password to expire..." 747 sleep $DELAY 748 749 $LDAPSEARCH -H $URI1 -D "$USER" -w $PASS \ 750 -b "$BASEDN" -s base > $SEARCHOUT 2>&1 751 sleep 3 752 $LDAPSEARCH -H $URI1 -D "$USER" -w $PASS \ 753 -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 754 sleep 3 755 $LDAPSEARCH -H $URI1 -D "$USER" -w $PASS \ 756 -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 757 sleep 3 758 $LDAPSEARCH -H $URI1 -D "$USER" -w $PASS \ 759 -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 760 sleep 3 761 $LDAPSEARCH -H $URI1 -D "$USER" -w $PASS \ 762 -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 763 RC=$? 764 if test $RC = 0 ; then 765 echo "Password expiration failed ($RC)!" 766 test $KILLSERVERS != no && kill -HUP $KILLPIDS 767 exit 1 768 fi 769 COUNT=`grep "PasswordExpiring" $SEARCHOUT | wc -l` 770 if test $COUNT = 0 ; then 771 echo "Password expiring warning test failed!" 772 test $KILLSERVERS != no && kill -HUP $KILLPIDS 773 exit 1 774 fi 775 776 test $KILLSERVERS != no && kill -HUP $KILLPIDS 777 778 echo ">>>>> Test succeeded" 779 780 test $KILLSERVERS != no && wait 781 782 exit 0 783