12de962bdSlukem#! /bin/sh 2d11b170bStron# $OpenLDAP$ 32de962bdSlukem## This work is part of OpenLDAP Software <http://www.openldap.org/>. 42de962bdSlukem## 5*e670fd5cSchristos## Copyright 1998-2021 The OpenLDAP Foundation. 62de962bdSlukem## All rights reserved. 72de962bdSlukem## 82de962bdSlukem## Redistribution and use in source and binary forms, with or without 92de962bdSlukem## modification, are permitted only as authorized by the OpenLDAP 102de962bdSlukem## Public License. 112de962bdSlukem## 122de962bdSlukem## A copy of this license is available in the file LICENSE in the 132de962bdSlukem## top-level directory of the distribution or, alternatively, at 142de962bdSlukem## <http://www.OpenLDAP.org/license.html>. 152de962bdSlukem 162de962bdSlukemecho "running defines.sh" 172de962bdSlukem. $SRCDIR/scripts/defines.sh 182de962bdSlukem 192de962bdSlukemif test $PPOLICY = ppolicyno; then 202de962bdSlukem echo "Password policy overlay not available, test skipped" 212de962bdSlukem exit 0 222de962bdSlukemfi 232de962bdSlukem 242de962bdSlukemmkdir -p $TESTDIR $DBDIR1 252de962bdSlukem 264e6df137Slukem$SLAPPASSWD -g -n >$CONFIGPWF 274e6df137Slukemecho "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf 284e6df137Slukem 292de962bdSlukemecho "Starting slapd on TCP/IP port $PORT1..." 30*e670fd5cSchristos. $CONFFILTER $BACKEND < $PPOLICYCONF > $CONF1 31*e670fd5cSchristos$SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 & 322de962bdSlukemPID=$! 332de962bdSlukemif test $WAIT != 0 ; then 342de962bdSlukem echo PID $PID 352de962bdSlukem read foo 362de962bdSlukemfi 372de962bdSlukemKILLPIDS="$PID" 382de962bdSlukem 392de962bdSlukemUSER="uid=nd, ou=People, dc=example, dc=com" 402de962bdSlukemPASS=testpassword 41*e670fd5cSchristosPWADMIN="uid=ndadmin, ou=People, dc=example, dc=com" 42*e670fd5cSchristosADMINPASSWD=testpw 432de962bdSlukem 442de962bdSlukemsleep 1 452de962bdSlukem 462de962bdSlukemecho "Using ldapsearch to check that slapd is running..." 472de962bdSlukemfor i in 0 1 2 3 4 5; do 48*e670fd5cSchristos $LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \ 492de962bdSlukem 'objectclass=*' > /dev/null 2>&1 502de962bdSlukem RC=$? 512de962bdSlukem if test $RC = 0 ; then 522de962bdSlukem break 532de962bdSlukem fi 542de962bdSlukem echo "Waiting 5 seconds for slapd to start..." 552de962bdSlukem sleep 5 562de962bdSlukemdone 572de962bdSlukemif test $RC != 0 ; then 582de962bdSlukem echo "ldapsearch failed ($RC)!" 592de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 602de962bdSlukem exit $RC 612de962bdSlukemfi 622de962bdSlukem 632de962bdSlukemecho /dev/null > $TESTOUT 642de962bdSlukem 65*e670fd5cSchristosecho "Testing redundant ppolicy instance..." 66*e670fd5cSchristos$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1 67*e670fd5cSchristosdn: olcOverlay=ppolicy,olcDatabase={1}$BACKEND,cn=config 68*e670fd5cSchristosobjectClass: olcOverlayConfig 69*e670fd5cSchristosobjectClass: olcPPolicyConfig 70*e670fd5cSchristosolcOverlay: ppolicy 71*e670fd5cSchristosolcPPolicyDefault: cn=duplicate policy,ou=policies,dc=example,dc=com 72*e670fd5cSchristosEOF 73*e670fd5cSchristosRC=$? 74*e670fd5cSchristosif test $RC = 0 ; then 75*e670fd5cSchristos echo "ldapadd should have failed ($RC)!" 76*e670fd5cSchristos test $KILLSERVERS != no && kill -HUP $KILLPIDS 77*e670fd5cSchristos exit 1 78*e670fd5cSchristosfi 79*e670fd5cSchristos 802de962bdSlukemecho "Using ldapadd to populate the database..." 81*e670fd5cSchristos$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD -e '!relax' \ 82*e670fd5cSchristos < $LDIFPPOLICY >> $TESTOUT 2>&1 832de962bdSlukemRC=$? 842de962bdSlukemif test $RC != 0 ; then 852de962bdSlukem echo "ldapadd failed ($RC)!" 862de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 872de962bdSlukem exit $RC 882de962bdSlukemfi 892de962bdSlukem 902de962bdSlukemecho "Testing account lockout..." 91*e670fd5cSchristos$LDAPSEARCH -H $URI1 -D "$USER" -w wrongpw >$SEARCHOUT 2>&1 922de962bdSlukemsleep 2 93*e670fd5cSchristos$LDAPSEARCH -H $URI1 -D "$USER" -w wrongpw >>$SEARCHOUT 2>&1 942de962bdSlukemsleep 2 95*e670fd5cSchristos$LDAPSEARCH -H $URI1 -D "$USER" -w wrongpw >>$SEARCHOUT 2>&1 962de962bdSlukemsleep 2 97*e670fd5cSchristos$LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w wrongpw >> $SEARCHOUT 2>&1 98*e670fd5cSchristos$LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w $PASS >> $SEARCHOUT 2>&1 992de962bdSlukemCOUNT=`grep "Account locked" $SEARCHOUT | wc -l` 1002de962bdSlukemif test $COUNT != 2 ; then 1012de962bdSlukem echo "Account lockout test failed" 1022de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 1032de962bdSlukem exit 1 1042de962bdSlukemfi 1052de962bdSlukem 106*e670fd5cSchristosDELAY=`$LDAPSEARCH -D "$MANAGERDN" -H $URI1 -w $PASSWD \ 107*e670fd5cSchristos -b "$USER" -E accountUsability 1.1 | sed -n -e 's/.*seconds_before_unlock=\(\d*\)/\1/p'` 1082de962bdSlukem 109*e670fd5cSchristosecho "Waiting $DELAY seconds for lockout to reset..." 110*e670fd5cSchristossleep $DELAY 111*e670fd5cSchristossleep 1 112*e670fd5cSchristos 113*e670fd5cSchristos$LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w $PASS \ 1142de962bdSlukem -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 1152de962bdSlukemRC=$? 1162de962bdSlukemif test $RC != 0 ; then 1172de962bdSlukem echo "ldapsearch failed ($RC)!" 1182de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 1192de962bdSlukem exit $RC 1202de962bdSlukemfi 1212de962bdSlukem 122*e670fd5cSchristosDELAY=`$LDAPSEARCH -D "$MANAGERDN" -H $URI1 -w $PASSWD \ 123*e670fd5cSchristos -b "$USER" -E accountUsability 1.1 | sed -n -e 's/.*expire=\(\d*\)/\1/p'` 1242de962bdSlukem 125*e670fd5cSchristosecho "Testing password expiration" 126*e670fd5cSchristosecho "Waiting $DELAY seconds for password to expire..." 127*e670fd5cSchristossleep $DELAY 128*e670fd5cSchristossleep 1 129*e670fd5cSchristos 130*e670fd5cSchristos$LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w $PASS \ 1312de962bdSlukem -b "$BASEDN" -s base > $SEARCHOUT 2>&1 1322de962bdSlukemsleep 2 133*e670fd5cSchristos$LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w $PASS \ 1342de962bdSlukem -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 1352de962bdSlukemsleep 2 136*e670fd5cSchristos$LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w $PASS \ 1372de962bdSlukem -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 1382de962bdSlukemsleep 2 139*e670fd5cSchristos$LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w $PASS \ 1402de962bdSlukem -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 1412de962bdSlukemRC=$? 1422de962bdSlukemif test $RC = 0 ; then 1432de962bdSlukem echo "Password expiration failed ($RC)!" 1442de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 1452de962bdSlukem exit 1 1462de962bdSlukemfi 1472de962bdSlukem 1482de962bdSlukemCOUNT=`grep "grace logins" $SEARCHOUT | wc -l` 1492de962bdSlukemif test $COUNT != 3 ; then 1502de962bdSlukem echo "Password expiration test failed" 1512de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 1522de962bdSlukem exit 1 1532de962bdSlukemfi 1542de962bdSlukem 1552de962bdSlukemecho "Resetting password to clear expired status" 156*e670fd5cSchristos$LDAPPASSWD -H $URI1 \ 1572de962bdSlukem -w secret -s $PASS \ 1582de962bdSlukem -D "$MANAGERDN" "$USER" >> $TESTOUT 2>&1 1592de962bdSlukemRC=$? 1602de962bdSlukemif test $RC != 0 ; then 1612de962bdSlukem echo "ldappasswd failed ($RC)!" 1622de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 1632de962bdSlukem exit $RC 1642de962bdSlukemfi 1652de962bdSlukem 1662de962bdSlukemecho "Filling password history..." 167*e670fd5cSchristos$LDAPMODIFY -v -D "$USER" -H $URI1 -w $PASS >> \ 1682de962bdSlukem $TESTOUT 2>&1 << EOMODS 169*e670fd5cSchristosdn: $USER 1702de962bdSlukemchangetype: modify 1712de962bdSlukemdelete: userpassword 1724e6df137Slukemuserpassword: $PASS 1732de962bdSlukem- 1742de962bdSlukemreplace: userpassword 1752de962bdSlukemuserpassword: 20urgle12-1 1762de962bdSlukem 177*e670fd5cSchristosdn: $USER 1782de962bdSlukemchangetype: modify 1792de962bdSlukemdelete: userpassword 1802de962bdSlukemuserpassword: 20urgle12-1 1812de962bdSlukem- 1822de962bdSlukemreplace: userpassword 1832de962bdSlukemuserpassword: 20urgle12-2 1842de962bdSlukem 185*e670fd5cSchristosdn: $USER 1862de962bdSlukemchangetype: modify 1872de962bdSlukemdelete: userpassword 1882de962bdSlukemuserpassword: 20urgle12-2 1892de962bdSlukem- 1902de962bdSlukemreplace: userpassword 1912de962bdSlukemuserpassword: 20urgle12-3 1922de962bdSlukem 193*e670fd5cSchristosdn: $USER 1942de962bdSlukemchangetype: modify 1952de962bdSlukemdelete: userpassword 1962de962bdSlukemuserpassword: 20urgle12-3 1972de962bdSlukem- 1982de962bdSlukemreplace: userpassword 1992de962bdSlukemuserpassword: 20urgle12-4 2002de962bdSlukem 201*e670fd5cSchristosdn: $USER 2022de962bdSlukemchangetype: modify 2032de962bdSlukemdelete: userpassword 2042de962bdSlukemuserpassword: 20urgle12-4 2052de962bdSlukem- 2062de962bdSlukemreplace: userpassword 2072de962bdSlukemuserpassword: 20urgle12-5 2082de962bdSlukem 209*e670fd5cSchristosdn: $USER 2102de962bdSlukemchangetype: modify 2112de962bdSlukemdelete: userpassword 2122de962bdSlukemuserpassword: 20urgle12-5 2132de962bdSlukem- 2142de962bdSlukemreplace: userpassword 2152de962bdSlukemuserpassword: 20urgle12-6 2162de962bdSlukem 2172de962bdSlukemEOMODS 2182de962bdSlukemRC=$? 2192de962bdSlukemif test $RC != 0 ; then 2202de962bdSlukem echo "ldapmodify failed ($RC)!" 2212de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 2222de962bdSlukem exit $RC 2232de962bdSlukemfi 2242de962bdSlukemecho "Testing password history..." 225*e670fd5cSchristos$LDAPMODIFY -v -D "$USER" -H $URI1 -w 20urgle12-6 >> \ 2262de962bdSlukem $TESTOUT 2>&1 << EOMODS 227*e670fd5cSchristosdn: $USER 2282de962bdSlukemchangetype: modify 2292de962bdSlukemdelete: userPassword 2302de962bdSlukemuserPassword: 20urgle12-6 2312de962bdSlukem- 2322de962bdSlukemreplace: userPassword 2332de962bdSlukemuserPassword: 20urgle12-2 2342de962bdSlukem 2352de962bdSlukemEOMODS 2362de962bdSlukemRC=$? 2372de962bdSlukemif test $RC = 0 ; then 2382de962bdSlukem echo "ldapmodify failed ($RC)!" 2392de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 2402de962bdSlukem exit 1 2412de962bdSlukemfi 2422de962bdSlukem 243*e670fd5cSchristosecho "Testing failed logins when password/policy missing..." 244*e670fd5cSchristos 245*e670fd5cSchristos$LDAPSEARCH -e ppolicy -H $URI1 \ 246*e670fd5cSchristos -D "uid=test, ou=People,$BASEDN" -w hasnopolicy \ 247*e670fd5cSchristos -b "$BASEDN" -s base > $SEARCHOUT 2>&1 248*e670fd5cSchristosRC=$? 249*e670fd5cSchristosif test $RC = 0 ; then 250*e670fd5cSchristos echo "Password accepted ($RC)!" 251*e670fd5cSchristos test $KILLSERVERS != no && kill -HUP $KILLPIDS 252*e670fd5cSchristos exit 1 253*e670fd5cSchristosfi 254*e670fd5cSchristos 255*e670fd5cSchristos$LDAPSEARCH -e ppolicy -H $URI1 -D "$BASEDN" -w hasnopw \ 256*e670fd5cSchristos -b "$BASEDN" -s base > $SEARCHOUT 2>&1 257*e670fd5cSchristosRC=$? 258*e670fd5cSchristosif test $RC = 0 ; then 259*e670fd5cSchristos echo "Password accepted ($RC)!" 260*e670fd5cSchristos test $KILLSERVERS != no && kill -HUP $KILLPIDS 261*e670fd5cSchristos exit 1 262*e670fd5cSchristosfi 263*e670fd5cSchristos 264*e670fd5cSchristos$LDAPSEARCH -H $URI1 -D "$MANAGERDN" -w $PASSWD -b "$BASEDN" \* \+ > $SEARCHOUT 2>&1 265*e670fd5cSchristosCOUNT=`grep "pwdFailureTime" $SEARCHOUT | wc -l` 266*e670fd5cSchristosif test $COUNT != 0 ; then 267*e670fd5cSchristos echo "Failed login stored on an account without policy and or password" 268*e670fd5cSchristos test $KILLSERVERS != no && kill -HUP $KILLPIDS 269*e670fd5cSchristos exit 1 270*e670fd5cSchristosfi 271*e670fd5cSchristos 2722de962bdSlukemecho "Testing forced reset..." 2732de962bdSlukem 274*e670fd5cSchristos$LDAPMODIFY -v -D "$PWADMIN" -H $URI1 -w $ADMINPASSWD >> \ 2752de962bdSlukem $TESTOUT 2>&1 << EOMODS 276*e670fd5cSchristosdn: $USER 2772de962bdSlukemchangetype: modify 2782de962bdSlukemreplace: userPassword 2794e6df137SlukemuserPassword: $PASS 2802de962bdSlukem 2812de962bdSlukemEOMODS 2822de962bdSlukemRC=$? 2832de962bdSlukemif test $RC != 0 ; then 2842de962bdSlukem echo "ldapmodify failed ($RC)!" 2852de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 2862de962bdSlukem exit $RC 2872de962bdSlukemfi 2882de962bdSlukem 289*e670fd5cSchristos$LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w $PASS \ 2902de962bdSlukem -b "$BASEDN" -s base > $SEARCHOUT 2>&1 2912de962bdSlukemRC=$? 2922de962bdSlukemif test $RC = 0 ; then 2932de962bdSlukem echo "Forced reset failed ($RC)!" 2942de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 2952de962bdSlukem exit 1 2962de962bdSlukemfi 2972de962bdSlukem 2982de962bdSlukemCOUNT=`grep "Operations are restricted" $SEARCHOUT | wc -l` 2992de962bdSlukemif test $COUNT != 1 ; then 3002de962bdSlukem echo "Forced reset test failed" 3012de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 3022de962bdSlukem exit 1 3032de962bdSlukemfi 3042de962bdSlukem 3052de962bdSlukemecho "Clearing forced reset..." 3062de962bdSlukem 307*e670fd5cSchristos$LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD >> \ 3082de962bdSlukem $TESTOUT 2>&1 << EOMODS 309*e670fd5cSchristosdn: $USER 3102de962bdSlukemchangetype: modify 3112de962bdSlukemdelete: pwdReset 3122de962bdSlukem 3132de962bdSlukemEOMODS 3142de962bdSlukemRC=$? 3152de962bdSlukemif test $RC != 0 ; then 3162de962bdSlukem echo "ldapmodify failed ($RC)!" 3172de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 3182de962bdSlukem exit $RC 3192de962bdSlukemfi 3202de962bdSlukem 321*e670fd5cSchristos$LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w $PASS \ 3222de962bdSlukem -b "$BASEDN" -s base > $SEARCHOUT 2>&1 3232de962bdSlukemRC=$? 3242de962bdSlukemif test $RC != 0 ; then 3252de962bdSlukem echo "Clearing forced reset failed ($RC)!" 3262de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 3272de962bdSlukem exit $RC 3282de962bdSlukemfi 3292de962bdSlukem 3302de962bdSlukemecho "Testing Safe modify..." 3312de962bdSlukem 332*e670fd5cSchristos$LDAPPASSWD -H $URI1 \ 3332de962bdSlukem -w $PASS -s failexpect \ 3342de962bdSlukem -D "$USER" >> $TESTOUT 2>&1 3352de962bdSlukemRC=$? 3362de962bdSlukemif test $RC = 0 ; then 3372de962bdSlukem echo "Safe modify test 1 failed ($RC)!" 3382de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 3392de962bdSlukem exit 1 3402de962bdSlukemfi 3412de962bdSlukem 3422de962bdSlukemsleep 2 3432de962bdSlukem 3444e6df137SlukemOLDPASS=$PASS 3454e6df137SlukemPASS=successexpect 3464e6df137Slukem 347*e670fd5cSchristos$LDAPPASSWD -H $URI1 \ 3484e6df137Slukem -w $OLDPASS -s $PASS -a $OLDPASS \ 3492de962bdSlukem -D "$USER" >> $TESTOUT 2>&1 3502de962bdSlukemRC=$? 3512de962bdSlukemif test $RC != 0 ; then 3522de962bdSlukem echo "Safe modify test 2 failed ($RC)!" 3532de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 3542de962bdSlukem exit $RC 3552de962bdSlukemfi 3562de962bdSlukem 3572de962bdSlukemecho "Testing length requirement..." 3584e6df137Slukem# check control in response (ITS#5711) 359*e670fd5cSchristos$LDAPPASSWD -H $URI1 \ 3604e6df137Slukem -w $PASS -a $PASS -s 2shr \ 3614e6df137Slukem -D "$USER" -e ppolicy > ${TESTOUT}.2 2>&1 3622de962bdSlukemRC=$? 3632de962bdSlukemcat ${TESTOUT}.2 >> $TESTOUT 3642de962bdSlukemif test $RC = 0 ; then 3652de962bdSlukem echo "Length requirement test failed ($RC)!" 3662de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 3672de962bdSlukem exit 1 3682de962bdSlukemfi 3692de962bdSlukemCOUNT=`grep "Password fails quality" ${TESTOUT}.2 | wc -l` 3702de962bdSlukemif test $COUNT != 1 ; then 3712de962bdSlukem echo "Length requirement test failed" 3722de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 3732de962bdSlukem exit 1 3742de962bdSlukemfi 3754e6df137SlukemCOUNT=`grep "Password is too short for policy" ${TESTOUT}.2 | wc -l` 3764e6df137Slukemif test $COUNT != 1 ; then 3774e6df137Slukem echo "Control not returned in response" 3784e6df137Slukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 3794e6df137Slukem exit 1 3804e6df137Slukemfi 3812de962bdSlukem 382*e670fd5cSchristos$LDAPPASSWD -H $URI1 \ 383*e670fd5cSchristos -w $PASS -a $PASS -s passwordthatistoolong \ 384*e670fd5cSchristos -D "$USER" -e ppolicy > ${TESTOUT}.2 2>&1 385*e670fd5cSchristosRC=$? 386*e670fd5cSchristoscat ${TESTOUT}.2 >> $TESTOUT 387*e670fd5cSchristosCOUNT=`grep "Password is too long for policy" ${TESTOUT}.2 | wc -l` 388*e670fd5cSchristosif test $COUNT != 1 ; then 389*e670fd5cSchristos echo "Control not returned in response" 390*e670fd5cSchristos test $KILLSERVERS != no && kill -HUP $KILLPIDS 391*e670fd5cSchristos exit 1 392*e670fd5cSchristosfi 393*e670fd5cSchristos 3942de962bdSlukemecho "Testing hashed length requirement..." 3952de962bdSlukem 396*e670fd5cSchristos$LDAPMODIFY -H $URI1 -D "$USER" -w $PASS > \ 3972de962bdSlukem ${TESTOUT}.2 2>&1 << EOMODS 3982de962bdSlukemdn: $USER 3992de962bdSlukemchangetype: modify 4002de962bdSlukemdelete: userPassword 4014e6df137SlukemuserPassword: $PASS 4022de962bdSlukem- 4032de962bdSlukemadd: userPassword 4042de962bdSlukemuserPassword: {MD5}xxxxxx 4052de962bdSlukem 4062de962bdSlukemEOMODS 4072de962bdSlukemRC=$? 4082de962bdSlukemcat ${TESTOUT}.2 >> $TESTOUT 4092de962bdSlukemif test $RC = 0 ; then 4102de962bdSlukem echo "Hashed length requirement test failed ($RC)!" 4112de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 4122de962bdSlukem exit 1 4132de962bdSlukemfi 4142de962bdSlukemCOUNT=`grep "Password fails quality" ${TESTOUT}.2 | wc -l` 4152de962bdSlukemif test $COUNT != 1 ; then 4162de962bdSlukem echo "Hashed length requirement test failed" 4172de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 4182de962bdSlukem exit 1 4192de962bdSlukemfi 4202de962bdSlukem 4212de962bdSlukemecho "Testing multiple password add/modify checks..." 4222de962bdSlukem 423*e670fd5cSchristos$LDAPMODIFY -H $URI1 -D "$MANAGERDN" -w $PASSWD >> \ 4242de962bdSlukem $TESTOUT 2>&1 << EOMODS 4252de962bdSlukemdn: cn=Add Should Fail, ou=People, dc=example, dc=com 4262de962bdSlukemchangetype: add 4272de962bdSlukemobjectClass: inetOrgPerson 4282de962bdSlukemcn: Add Should Fail 4292de962bdSlukemsn: Fail 4302de962bdSlukemuserPassword: firstpw 4312de962bdSlukemuserPassword: secondpw 4322de962bdSlukemEOMODS 4332de962bdSlukemRC=$? 4342de962bdSlukemif test $RC = 0 ; then 4352de962bdSlukem echo "Multiple password add test failed ($RC)!" 4362de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 4372de962bdSlukem exit 1 4382de962bdSlukemfi 4392de962bdSlukem 440*e670fd5cSchristos$LDAPMODIFY -H $URI1 -D "$MANAGERDN" -w $PASSWD >> \ 4412de962bdSlukem $TESTOUT 2>&1 << EOMODS 4422de962bdSlukemdn: $USER 4432de962bdSlukemchangetype: modify 4442de962bdSlukemadd: userPassword 4452de962bdSlukemuserPassword: firstpw 4462de962bdSlukemuserPassword: secondpw 4472de962bdSlukemEOMODS 4482de962bdSlukemRC=$? 4492de962bdSlukemif test $RC = 0 ; then 4502de962bdSlukem echo "Multiple password modify add test failed ($RC)!" 4512de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 4522de962bdSlukem exit 1 4532de962bdSlukemfi 4542de962bdSlukem 455*e670fd5cSchristos$LDAPMODIFY -H $URI1 -D "$MANAGERDN" -w $PASSWD >> \ 4562de962bdSlukem $TESTOUT 2>&1 << EOMODS 4572de962bdSlukemdn: $USER 4582de962bdSlukemchangetype: modify 4592de962bdSlukemreplace: userPassword 4602de962bdSlukemuserPassword: firstpw 4612de962bdSlukemuserPassword: secondpw 4622de962bdSlukemEOMODS 4632de962bdSlukemRC=$? 4642de962bdSlukemif test $RC = 0 ; then 4652de962bdSlukem echo "Multiple password modify replace test failed ($RC)!" 4662de962bdSlukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 4672de962bdSlukem exit 1 4682de962bdSlukemfi 4692de962bdSlukem 470*e670fd5cSchristosecho "Testing idle password expiration" 471*e670fd5cSchristosecho "Reconfiguring policy to replace expiration with idle expiration..." 472*e670fd5cSchristos$LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD >> \ 473*e670fd5cSchristos $TESTOUT 2>&1 << EOMODS 474*e670fd5cSchristosdn: cn=Standard Policy, ou=Policies, dc=example, dc=com 475*e670fd5cSchristoschangetype: modify 476*e670fd5cSchristosdelete: pwdMaxAge 477*e670fd5cSchristos- 478*e670fd5cSchristosadd: pwdMaxIdle 479*e670fd5cSchristospwdMaxIdle: 15 480*e670fd5cSchristos 481*e670fd5cSchristosEOMODS 482*e670fd5cSchristosRC=$? 483*e670fd5cSchristosif test $RC != 0 ; then 484*e670fd5cSchristos echo "ldapmodify failed ($RC)!" 485*e670fd5cSchristos test $KILLSERVERS != no && kill -HUP $KILLPIDS 486*e670fd5cSchristos exit $RC 487*e670fd5cSchristosfi 488*e670fd5cSchristos 489*e670fd5cSchristos$LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w $PASS \ 490*e670fd5cSchristos -b "$BASEDN" -s base > $SEARCHOUT 2>&1 491*e670fd5cSchristos 492*e670fd5cSchristosDELAY=`$LDAPSEARCH -D "$MANAGERDN" -H $URI1 -w $PASSWD \ 493*e670fd5cSchristos -b "$USER" -E accountUsability 1.1 | sed -n -e 's/.*expire=\(\d*\)/\1/p'` 494*e670fd5cSchristos 495*e670fd5cSchristosecho "Waiting $DELAY seconds for password to expire..." 496*e670fd5cSchristossleep $DELAY 497*e670fd5cSchristossleep 1 498*e670fd5cSchristos 499*e670fd5cSchristos$LDAPSEARCH -e ppolicy -H $URI1 -D "$USER" -w $PASS \ 500*e670fd5cSchristos -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 501*e670fd5cSchristosRC=$? 502*e670fd5cSchristosif test $RC != 49 ; then 503*e670fd5cSchristos echo "Password idle expiration failed ($RC)!" 504*e670fd5cSchristos test $KILLSERVERS != no && kill -HUP $KILLPIDS 505*e670fd5cSchristos exit 1 506*e670fd5cSchristosfi 507*e670fd5cSchristos 508*e670fd5cSchristosecho "Reverting policy changes..." 509*e670fd5cSchristos$LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD >> \ 510*e670fd5cSchristos $TESTOUT 2>&1 << EOMODS 511*e670fd5cSchristosdn: cn=Standard Policy, ou=Policies, dc=example, dc=com 512*e670fd5cSchristoschangetype: modify 513*e670fd5cSchristosdelete: pwdMaxIdle 514*e670fd5cSchristos- 515*e670fd5cSchristosadd: pwdMaxAge 516*e670fd5cSchristospwdMaxAge: 30 517*e670fd5cSchristos 518*e670fd5cSchristosEOMODS 519*e670fd5cSchristosRC=$? 520*e670fd5cSchristosif test $RC != 0 ; then 521*e670fd5cSchristos echo "ldapmodify failed ($RC)!" 522*e670fd5cSchristos test $KILLSERVERS != no && kill -HUP $KILLPIDS 523*e670fd5cSchristos exit $RC 524*e670fd5cSchristosfi 525*e670fd5cSchristos 5264e6df137Slukemif test "$BACKLDAP" != "ldapno" && test "$SYNCPROV" != "syncprovno" ; then 5274e6df137Slukemecho "" 5284e6df137Slukemecho "Setting up policy state forwarding test..." 5294e6df137Slukem 5304e6df137Slukemmkdir $DBDIR2 5314e6df137Slukemsed -e "s,$DBDIR1,$DBDIR2," < $CONF1 > $CONF2 5324e6df137Slukemecho "Starting slapd consumer on TCP/IP port $PORT2..." 533*e670fd5cSchristos$SLAPD -f $CONF2 -h $URI2 -d $LVL > $LOG2 2>&1 & 5344e6df137SlukemPID=$! 5354e6df137Slukemif test $WAIT != 0 ; then 5364e6df137Slukem echo PID $PID 5374e6df137Slukem read foo 5384e6df137Slukemfi 5394e6df137SlukemKILLPIDS="$KILLPIDS $PID" 5404e6df137Slukem 5414e6df137Slukemecho "Configuring syncprov on provider..." 5424e6df137Slukemif [ "$SYNCPROV" = syncprovmod ]; then 5434e6df137Slukem $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1 5444e6df137Slukemdn: cn=module,cn=config 5454e6df137Slukemobjectclass: olcModuleList 5464e6df137Slukemcn: module 5474e6df137SlukemolcModulePath: $TESTWD/../servers/slapd/overlays 5484e6df137SlukemolcModuleLoad: syncprov.la 5494e6df137Slukem 5504e6df137SlukemEOF 5514e6df137Slukem RC=$? 5524e6df137Slukem if test $RC != 0 ; then 5534e6df137Slukem echo "ldapadd failed for moduleLoad ($RC)!" 5544e6df137Slukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 5554e6df137Slukem exit $RC 5564e6df137Slukem fi 5574e6df137Slukemfi 5584e6df137Slukem 5594e6df137Slukem$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1 5604e6df137Slukemdn: olcOverlay={1}syncprov,olcDatabase={1}$BACKEND,cn=config 5614e6df137SlukemobjectClass: olcOverlayConfig 5624e6df137SlukemobjectClass: olcSyncProvConfig 5634e6df137SlukemolcOverlay: {1}syncprov 5644e6df137Slukem 5654e6df137SlukemEOF 5664e6df137SlukemRC=$? 5674e6df137Slukemif test $RC != 0 ; then 5684e6df137Slukem echo "ldapadd failed for provider database config ($RC)!" 5694e6df137Slukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 5704e6df137Slukem exit $RC 5714e6df137Slukemfi 5724e6df137Slukem 5734e6df137Slukemecho "Using ldapsearch to check that slapd is running..." 5744e6df137Slukemfor i in 0 1 2 3 4 5; do 5754e6df137Slukem $LDAPSEARCH -s base -b "$MONITOR" -H $URI2 \ 5764e6df137Slukem 'objectclass=*' > /dev/null 2>&1 5774e6df137Slukem RC=$? 5784e6df137Slukem if test $RC = 0 ; then 5794e6df137Slukem break 5804e6df137Slukem fi 5814e6df137Slukem echo "Waiting 5 seconds for slapd to start..." 5824e6df137Slukem sleep 5 5834e6df137Slukemdone 5844e6df137Slukemif test $RC != 0 ; then 5854e6df137Slukem echo "ldapsearch failed ($RC)!" 5864e6df137Slukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 5874e6df137Slukem exit $RC 5884e6df137Slukemfi 5894e6df137Slukem 5904e6df137Slukemecho "Configuring syncrepl on consumer..." 5914e6df137Slukemif [ "$BACKLDAP" = ldapmod ]; then 5924e6df137Slukem $LDAPADD -D cn=config -H $URI2 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1 5934e6df137Slukemdn: cn=module,cn=config 5944e6df137Slukemobjectclass: olcModuleList 5954e6df137Slukemcn: module 5964e6df137SlukemolcModulePath: $TESTWD/../servers/slapd/back-ldap 5974e6df137SlukemolcModuleLoad: back_ldap.la 5984e6df137Slukem 5994e6df137SlukemEOF 6004e6df137Slukem RC=$? 6014e6df137Slukem if test $RC != 0 ; then 6024e6df137Slukem echo "ldapadd failed for moduleLoad ($RC)!" 6034e6df137Slukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 6044e6df137Slukem exit $RC 6054e6df137Slukem fi 6064e6df137Slukemfi 6074e6df137Slukem$LDAPMODIFY -D cn=config -H $URI2 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1 6084e6df137Slukemdn: olcOverlay={0}chain,olcDatabase={-1}frontend,cn=config 6094e6df137Slukemchangetype: add 6104e6df137SlukemobjectClass: olcOverlayConfig 6114e6df137SlukemobjectClass: olcChainConfig 6124e6df137SlukemolcOverlay: {0}chain 6134e6df137Slukem 6144e6df137Slukemdn: olcDatabase=ldap,olcOverlay={0}chain,olcDatabase={-1}frontend,cn=config 6154e6df137Slukemchangetype: add 6164e6df137SlukemobjectClass: olcLDAPConfig 6174e6df137SlukemobjectClass: olcChainDatabase 6184e6df137SlukemolcDBURI: $URI1 6194e6df137SlukemolcDbIDAssertBind: bindmethod=simple 6204e6df137Slukem binddn="cn=manager,dc=example,dc=com" 6214e6df137Slukem credentials=secret 6224e6df137Slukem mode=self 6234e6df137Slukem 6244e6df137Slukemdn: olcDatabase={1}$BACKEND,cn=config 6254e6df137Slukemchangetype: modify 6264e6df137Slukemadd: olcSyncrepl 6274e6df137SlukemolcSyncrepl: rid=1 6284e6df137Slukem provider=$URI1 6294e6df137Slukem binddn="cn=manager,dc=example,dc=com" 6304e6df137Slukem bindmethod=simple 6314e6df137Slukem credentials=secret 6324e6df137Slukem searchbase="dc=example,dc=com" 6334e6df137Slukem type=refreshAndPersist 6344e6df137Slukem retry="3 5 300 5" 6354e6df137Slukem- 6364e6df137Slukemadd: olcUpdateref 6374e6df137SlukemolcUpdateref: $URI1 6384e6df137Slukem- 6394e6df137Slukem 6404e6df137Slukemdn: olcOverlay={0}ppolicy,olcDatabase={1}$BACKEND,cn=config 6414e6df137Slukemchangetype: modify 6424e6df137Slukemreplace: olcPPolicyForwardUpdates 6434e6df137SlukemolcPPolicyForwardUpdates: TRUE 6444e6df137Slukem- 6454e6df137Slukem 6464e6df137SlukemEOF 6474e6df137SlukemRC=$? 6484e6df137Slukemif test $RC != 0 ; then 6494e6df137Slukem echo "ldapmodify failed ($RC)!" 6504e6df137Slukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 6514e6df137Slukem exit $RC 6524e6df137Slukemfi 6534e6df137Slukem 6544e6df137Slukemecho "Waiting for consumer to sync..." 6554e6df137Slukemsleep $SLEEP1 6564e6df137Slukem 6574e6df137Slukemecho "Testing policy state forwarding..." 6584e6df137Slukem$LDAPSEARCH -H $URI2 -D "$USER" -w wrongpw >$SEARCHOUT 2>&1 659d11b170bStronRC=$? 660d11b170bStronif test $RC != 49 ; then 661d11b170bStron echo "ldapsearch should have failed with 49, got ($RC)!" 662d11b170bStron test $KILLSERVERS != no && kill -HUP $KILLPIDS 663d11b170bStron exit 1 664d11b170bStronfi 665d11b170bStron 6664e6df137Slukem$LDAPSEARCH -H $URI1 -D "$MANAGERDN" -w $PASSWD -b "$USER" \* \+ >> $SEARCHOUT 2>&1 6674e6df137SlukemCOUNT=`grep "pwdFailureTime" $SEARCHOUT | wc -l` 6684e6df137Slukemif test $COUNT != 1 ; then 6694e6df137Slukem echo "Policy state forwarding failed" 6704e6df137Slukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 6714e6df137Slukem exit 1 6724e6df137Slukemfi 6734e6df137Slukem 6744e6df137Slukem# End of chaining test 6754e6df137Slukem 6764e6df137Slukemfi 6774e6df137Slukem 678*e670fd5cSchristosecho "" 679*e670fd5cSchristosecho "Testing obsolete Netscape ppolicy controls..." 680*e670fd5cSchristosecho "Enabling Netscape controls..." 681*e670fd5cSchristos$LDAPMODIFY -v -D cn=config -H $URI1 -y $CONFIGPWF >> \ 682*e670fd5cSchristos $TESTOUT 2>&1 << EOMODS 683*e670fd5cSchristosdn: olcOverlay={0}ppolicy,olcDatabase={1}$BACKEND,cn=config 684*e670fd5cSchristoschangetype: modify 685*e670fd5cSchristosreplace: olcPPolicySendNetscapeControls 686*e670fd5cSchristosolcPPolicySendNetscapeControls: TRUE 687*e670fd5cSchristos- 688*e670fd5cSchristos 689*e670fd5cSchristosEOMODS 690*e670fd5cSchristosRC=$? 691*e670fd5cSchristosif test $RC != 0 ; then 692*e670fd5cSchristos echo "ldapmodify failed ($RC)!" 693*e670fd5cSchristos test $KILLSERVERS != no && kill -HUP $KILLPIDS 694*e670fd5cSchristos exit $RC 695*e670fd5cSchristosfi 696*e670fd5cSchristos 697*e670fd5cSchristosecho "Reconfiguring policy to remove grace logins..." 698*e670fd5cSchristos$LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD >> \ 699*e670fd5cSchristos $TESTOUT 2>&1 << EOMODS 700*e670fd5cSchristosdn: cn=Standard Policy, ou=Policies, dc=example, dc=com 701*e670fd5cSchristoschangetype: modify 702*e670fd5cSchristosdelete: pwdGraceAuthnLimit 703*e670fd5cSchristos- 704*e670fd5cSchristosreplace: pwdMaxAge 705*e670fd5cSchristospwdMaxAge: 15 706*e670fd5cSchristos- 707*e670fd5cSchristos 708*e670fd5cSchristosEOMODS 709*e670fd5cSchristosRC=$? 710*e670fd5cSchristosif test $RC != 0 ; then 711*e670fd5cSchristos echo "ldapmodify failed ($RC)!" 712*e670fd5cSchristos test $KILLSERVERS != no && kill -HUP $KILLPIDS 713*e670fd5cSchristos exit $RC 714*e670fd5cSchristosfi 715*e670fd5cSchristos 716*e670fd5cSchristosOLDPASS=$PASS 717*e670fd5cSchristosPASS=newpass 718*e670fd5cSchristos$LDAPPASSWD -H $URI1 \ 719*e670fd5cSchristos -w secret -s $PASS \ 720*e670fd5cSchristos -D "$MANAGERDN" "$USER" >> $TESTOUT 2>&1 721*e670fd5cSchristosRC=$? 722*e670fd5cSchristosif test $RC != 0 ; then 723*e670fd5cSchristos echo "Setting new password failed ($RC)!" 724*e670fd5cSchristos test $KILLSERVERS != no && kill -HUP $KILLPIDS 725*e670fd5cSchristos exit $RC 726*e670fd5cSchristosfi 727*e670fd5cSchristos 728*e670fd5cSchristosecho "Clearing forced reset..." 729*e670fd5cSchristos$LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD >> \ 730*e670fd5cSchristos $TESTOUT 2>&1 << EOMODS 731*e670fd5cSchristosdn: $USER 732*e670fd5cSchristoschangetype: modify 733*e670fd5cSchristosdelete: pwdReset 734*e670fd5cSchristos 735*e670fd5cSchristosEOMODS 736*e670fd5cSchristos 737*e670fd5cSchristosDELAY=`$LDAPSEARCH -D "$MANAGERDN" -H $URI1 -w $PASSWD \ 738*e670fd5cSchristos -b "$USER" -E accountUsability 1.1 | sed -n -e 's/.*expire=\(\d*\)/\1/p'` 739*e670fd5cSchristosDELAY=`expr $DELAY - 10` 740*e670fd5cSchristos 741*e670fd5cSchristosecho "Testing password expiration" 742*e670fd5cSchristosecho "Waiting $DELAY seconds for password to expire..." 743*e670fd5cSchristossleep $DELAY 744*e670fd5cSchristos 745*e670fd5cSchristos$LDAPSEARCH -H $URI1 -D "$USER" -w $PASS \ 746*e670fd5cSchristos -b "$BASEDN" -s base > $SEARCHOUT 2>&1 747*e670fd5cSchristossleep 3 748*e670fd5cSchristos$LDAPSEARCH -H $URI1 -D "$USER" -w $PASS \ 749*e670fd5cSchristos -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 750*e670fd5cSchristossleep 3 751*e670fd5cSchristos$LDAPSEARCH -H $URI1 -D "$USER" -w $PASS \ 752*e670fd5cSchristos -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 753*e670fd5cSchristossleep 3 754*e670fd5cSchristos$LDAPSEARCH -H $URI1 -D "$USER" -w $PASS \ 755*e670fd5cSchristos -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 756*e670fd5cSchristossleep 3 757*e670fd5cSchristos$LDAPSEARCH -H $URI1 -D "$USER" -w $PASS \ 758*e670fd5cSchristos -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 759*e670fd5cSchristosRC=$? 760*e670fd5cSchristosif test $RC = 0 ; then 761*e670fd5cSchristos echo "Password expiration failed ($RC)!" 762*e670fd5cSchristos test $KILLSERVERS != no && kill -HUP $KILLPIDS 763*e670fd5cSchristos exit 1 764*e670fd5cSchristosfi 765*e670fd5cSchristosCOUNT=`grep "PasswordExpiring" $SEARCHOUT | wc -l` 766*e670fd5cSchristosif test $COUNT = 0 ; then 767*e670fd5cSchristos echo "Password expiring warning test failed!" 768*e670fd5cSchristos test $KILLSERVERS != no && kill -HUP $KILLPIDS 769*e670fd5cSchristos exit 1 770*e670fd5cSchristosfi 771*e670fd5cSchristos 7722de962bdSlukemtest $KILLSERVERS != no && kill -HUP $KILLPIDS 7732de962bdSlukem 7742de962bdSlukemecho ">>>>> Test succeeded" 7752de962bdSlukem 7762de962bdSlukemtest $KILLSERVERS != no && wait 7772de962bdSlukem 7782de962bdSlukemexit 0 779