1#!/bin/bash 2 3echo "running defines.sh" 4. $SRCDIR/scripts/defines.sh 5 6if test $CONSTRAINT = constraintno; then 7 echo "Constraint overlay not available, test skipped" 8 exit 0 9fi 10 11CONSTRAINTDIR="$DATADIR/constraint" 12ROOTLDIF="$CONSTRAINTDIR/root.ldif" 13USERLDIF="$CONSTRAINTDIR/user.ldif" 14RESULTOUT="$CONSTRAINTDIR/constraint.out" 15SCRIPTOUT="$TESTDIR/constraint.out" 16USERDN="cn=John Doe,ou=users,$BASEDN" 17 18CONFDIR=$TESTDIR/slapd.d 19mkdir -p $TESTDIR $CONFDIR $DBDIR1 20 21$SLAPPASSWD -g -n >$CONFIGPWF 22 23cat > $TESTDIR/config.ldif <<EOF 24dn: cn=config 25objectClass: olcGlobal 26cn: config 27olcArgsFile: $TESTDIR/slapd.args 28olcPidFile: $TESTDIR/slapd.pid 29 30dn: cn=schema,cn=config 31objectClass: olcSchemaConfig 32cn: schema 33 34include: file://$TESTWD/schema/core.ldif 35include: file://$TESTWD/schema/cosine.ldif 36include: file://$TESTWD/schema/inetorgperson.ldif 37 38dn: olcDatabase=config,cn=config 39objectClass: olcDatabaseConfig 40olcDatabase: config 41olcRootPW:< file://$CONFIGPWF 42EOF 43 44if [ "$BACKENDTYPE" = mod ]; then 45 cat >> $TESTDIR/config.ldif <<EOF 46 47dn: cn=module,cn=config 48objectClass: olcModuleList 49cn: module 50olcModulePath: $TESTWD/../servers/slapd/back-$BACKEND 51olcModuleLoad: back_$BACKEND.la 52EOF 53fi 54 55if [ "$CONSTRAINT" = constraintmod ]; then 56 cat >> $TESTDIR/config.ldif <<EOF 57 58dn: cn=module,cn=config 59objectClass: olcModuleList 60cn: module 61olcModulePath: $TESTWD/../servers/slapd/overlays 62olcModuleLoad: constraint.la 63EOF 64fi 65 66cat >> $TESTDIR/config.ldif <<EOF 67 68dn: olcDatabase={1}$BACKEND,cn=config 69objectClass: olcDatabaseConfig 70objectClass: olc${BACKEND}Config 71olcDatabase: $BACKEND 72olcSuffix: $BASEDN 73olcRootDN: $MANAGERDN 74olcRootPW: $PASSWD 75olcDbDirectory: $TESTDIR/db.1.a 76EOF 77 78if [ "$INDEXDB" = indexdb ]; then 79 cat >> $TESTDIR/config.ldif <<EOF 80olcDbIndex: objectClass eq,pres 81olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub 82EOF 83fi 84 85cat >> $TESTDIR/config.ldif <<EOF 86 87dn: olcOverlay=constraint,olcDatabase={1}$BACKEND,cn=config 88objectClass: olcOverlayConfig 89objectClass: olcConstraintConfig 90olcOverlay: constraint 91olcConstraintAttribute: mail 92 count 3 93 restrict="ldap:///ou=users,$BASEDN??one?(objectClass=inetOrgPerson)" 94# check if restrict works (if not, this will apply to ou=users subtree as well 95# and some tests will fail) 96olcConstraintAttribute: mail count 1 restrict="ldap:///ou=groups,$BASEDN??one" 97olcConstraintAttribute: mail regex ^[[:alnum:]]+@example.com$ 98olcConstraintAttribute: description count 2 99olcConstraintAttribute: jpegPhoto count 0 100# cn value has to be concatenated givenName SP sn 101olcConstraintAttribute: cn,sn,givenName 102 set "(this/givenName + [ ] + this/sn) & this/cn" 103 restrict="ldap:///$USERDN??sub?(objectClass=inetOrgPerson)" 104olcConstraintAttribute: uid 105 uri "ldap:///ou=groups,$BASEDN?uid?one?(objectClass=inetOrgPerson)" 106 restrict="ldap:///ou=users,$BASEDN??one" 107EOF 108 109$SLAPADD -F $CONFDIR -n 0 -l $TESTDIR/config.ldif 110 111echo "Starting slapd on TCP/IP port $PORT1..." 112$SLAPD -F $CONFDIR -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & 113PID=$! 114if test $WAIT != 0 ; then 115 echo PID $PID 116 read foo 117fi 118sleep 1 119 120echo "Adding basic structure..." 121$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD -f $ROOTLDIF &>/dev/null 122RC=$? 123if test $RC != 0 ; then 124 echo "ldapadd failed ($RC)!" 125 test $KILLSERVERS != no && kill -HUP $PID 126 exit $RC 127fi 128$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD -f $USERLDIF &>/dev/null 129RC=$? 130if test $RC != 0 ; then 131 echo "ldapadd failed ($RC)!" 132 test $KILLSERVERS != no && kill -HUP $PID 133 exit $RC 134fi 135 136echo "Running constraint tests..." 137for ldif in $SRCDIR/data/constraint/{*ok*,*fail*}.ldif; do 138 ### reload 139 $LDAPDELETE -D "$MANAGERDN" -H $URI1 -w $PASSWD "$USERDN" &>/dev/null 140 RC=$? 141 if test $RC != 0 ; then 142 echo "ldapdelete failed ($RC)!" 143 test $KILLSERVERS != no && kill -HUP $PID 144 exit $RC 145 fi 146 $LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD -f $USERLDIF &>/dev/null 147 RC=$? 148 if test $RC != 0 ; then 149 echo "ldapadd failed ($RC)!" 150 test $KILLSERVERS != no && kill -HUP $PID 151 exit $RC 152 fi 153 154 ### info 155 echo -n " [$ldif]: " 156 157 ### modify 158 $LDAPMODIFY -H $URI1 -x -D "$MANAGERDN" -f $ldif -w $PASSWD &>/dev/null 159 RC=$? 160 if test $RC == 0 ; then 161 echo "OK" | tee -a $SCRIPTOUT 162 elif test $RC == 19 ; then 163 echo "FAIL" | tee -a $SCRIPTOUT 164 else 165 echo "UNEXPECTED ($RC)" 166 fi 167done 168 169echo "Comparing output..." 170$DIFF $SCRIPTOUT $RESULTOUT > $CMPOUT 171RC=$? 172if test $RC != 0 ; then 173 echo "Comparison failed" 174 test $KILLSERVERS != no && kill -HUP $PID 175 exit $RC 176fi 177 178test $KILLSERVERS != no && kill -HUP $PID 179 180echo ">>>>> Test succeeded" 181 182test $KILLSERVERS != no && wait 183 184exit 0 185