1 1.1 lukem #! /bin/sh 2 1.1.1.4 tron # $OpenLDAP$ 3 1.1 lukem ## This work is part of OpenLDAP Software <http://www.openldap.org/>. 4 1.1 lukem ## 5 1.1.1.10 christos ## Copyright 1998-2024 The OpenLDAP Foundation. 6 1.1 lukem ## All rights reserved. 7 1.1 lukem ## 8 1.1 lukem ## Redistribution and use in source and binary forms, with or without 9 1.1 lukem ## modification, are permitted only as authorized by the OpenLDAP 10 1.1 lukem ## Public License. 11 1.1 lukem ## 12 1.1 lukem ## A copy of this license is available in the file LICENSE in the 13 1.1 lukem ## top-level directory of the distribution or, alternatively, at 14 1.1 lukem ## <http://www.OpenLDAP.org/license.html>. 15 1.1 lukem 16 1.1.1.3 adam case "$BACKEND" in ldif | null) 17 1.1.1.3 adam echo "$BACKEND backend does not support access controls, test skipped" 18 1.1 lukem exit 0 19 1.1 lukem ;; 20 1.1 lukem esac 21 1.1 lukem 22 1.1 lukem echo "running defines.sh" 23 1.1 lukem . $SRCDIR/scripts/defines.sh 24 1.1 lukem 25 1.1 lukem if test "$ACI" = "acino" ; then 26 1.1 lukem echo "ACI not enabled, test skipped" 27 1.1 lukem exit 0 28 1.1 lukem fi 29 1.1 lukem 30 1.1 lukem mkdir -p $TESTDIR $DBDIR1 31 1.1 lukem 32 1.1 lukem echo "Running slapadd to build slapd database..." 33 1.1.1.9 christos . $CONFFILTER $BACKEND < $ACICONF > $CONF1 34 1.1 lukem $SLAPADD -f $CONF1 -l $LDIFORDERED 35 1.1 lukem RC=$? 36 1.1 lukem if test $RC != 0 ; then 37 1.1 lukem echo "slapadd failed ($RC)!" 38 1.1 lukem exit $RC 39 1.1 lukem fi 40 1.1 lukem 41 1.1 lukem echo "Starting slapd on TCP/IP port $PORT1..." 42 1.1.1.9 christos $SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 & 43 1.1 lukem PID=$! 44 1.1 lukem if test $WAIT != 0 ; then 45 1.1 lukem echo PID $PID 46 1.1 lukem read foo 47 1.1 lukem fi 48 1.1 lukem KILLPIDS="$PID" 49 1.1 lukem 50 1.1 lukem sleep 1 51 1.1 lukem 52 1.1 lukem echo "Testing slapd ACI access control..." 53 1.1 lukem for i in 0 1 2 3 4 5; do 54 1.1.1.9 christos $LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \ 55 1.1 lukem 'objectclass=*' > /dev/null 2>&1 56 1.1 lukem RC=$? 57 1.1 lukem if test $RC = 0 ; then 58 1.1 lukem break 59 1.1 lukem fi 60 1.1 lukem echo "Waiting 5 seconds for slapd to start..." 61 1.1 lukem sleep 5 62 1.1 lukem done 63 1.1 lukem 64 1.1 lukem if test $RC != 0 ; then 65 1.1 lukem echo "ldapsearch failed ($RC)!" 66 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 67 1.1 lukem exit $RC 68 1.1 lukem fi 69 1.1 lukem 70 1.1 lukem cat /dev/null > $SEARCHOUT 71 1.1 lukem cat /dev/null > $TESTOUT 72 1.1 lukem 73 1.1 lukem # Search must fail 74 1.1 lukem BASEDN="dc=example,dc=com" 75 1.1 lukem echo "Searching \"$BASEDN\" (should fail)..." 76 1.1 lukem echo "# Searching \"$BASEDN\" (should fail)..." >> $SEARCHOUT 77 1.1.1.9 christos $LDAPSEARCH -s base -b "$BASEDN" -H $URI1 \ 78 1.1 lukem '(objectclass=*)' >> $SEARCHOUT 2>> $TESTOUT 79 1.1 lukem RC=$? 80 1.1 lukem if test $RC != 32 ; then 81 1.1 lukem echo "ldapsearch should have failed with noSuchObject ($RC)!" 82 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 83 1.1 lukem if test $RC = 0 ; then 84 1.1.1.10 christos exit 1 85 1.1 lukem fi 86 1.1 lukem exit $RC 87 1.1 lukem fi 88 1.1 lukem 89 1.1 lukem # Bind must fail 90 1.1 lukem BINDDN="cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" 91 1.1 lukem BINDPW=bjensen 92 1.1 lukem echo "Testing ldapwhoami as ${BINDDN} (should fail)..." 93 1.1.1.9 christos $LDAPWHOAMI -H $URI1 -D "$BINDDN" -w $BINDPW 94 1.1 lukem RC=$? 95 1.1 lukem if test $RC = 0 ; then 96 1.1 lukem echo "ldapwhoami should have failed!" 97 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 98 1.1.1.10 christos exit 1 99 1.1 lukem fi 100 1.1 lukem 101 1.1 lukem # Populate ACIs 102 1.1 lukem echo "Writing ACIs as \"$MANAGERDN\"..." 103 1.1.1.9 christos $LDAPMODIFY -D "$MANAGERDN" -w $PASSWD -H $URI1 \ 104 1.1 lukem >> $TESTOUT 2>&1 << EOMODS0 105 1.1 lukem dn: dc=example,dc=com 106 1.1 lukem changetype: modify 107 1.1 lukem add: OpenLDAPaci 108 1.1 lukem OpenLDAPaci: 0#subtree#grant;d,c,s,r;[all]#group/groupOfUniqueNames/uniqueMe 109 1.1 lukem mber#cn=ITD Staff,ou=Groups,dc=example,dc=com 110 1.1 lukem OpenLDAPaci: 1#entry#grant;d;[all]#public# 111 1.1 lukem 112 1.1 lukem dn: ou=People,dc=example,dc=com 113 1.1 lukem changetype: modify 114 1.1 lukem add: OpenLDAPaci 115 1.1 lukem OpenLDAPaci: 0#subtree#grant;x;userPassword#public# 116 1.1 lukem OpenLDAPaci: 1#subtree#grant;w;userPassword#self# 117 1.1 lukem OpenLDAPaci: 2#subtree#grant;w;userPassword#access-id#cn=Bjorn Jensen,ou=Inf 118 1.1 lukem ormation Technology Division,ou=People,dc=example,dc=com 119 1.1 lukem 120 1.1 lukem dn: ou=Groups,dc=example,dc=com 121 1.1 lukem changetype: modify 122 1.1 lukem add: OpenLDAPaci 123 1.1 lukem OpenLDAPaci: 0#entry#grant;s;[all]#public# 124 1.1 lukem OpenLDAPaci: 1#children#grant;r;member;r;uniqueMember#access-id#cn=Bjorn Jen 125 1.1 lukem sen,ou=Information Technology Division,ou=People,dc=example,dc=com 126 1.1 lukem EOMODS0 127 1.1 lukem RC=$? 128 1.1 lukem if test $RC != 0 ; then 129 1.1 lukem echo "ldapmodify failed ($RC)!" 130 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 131 1.1 lukem exit $RC 132 1.1 lukem fi 133 1.1 lukem 134 1.1 lukem # Search must succeed with no results 135 1.1 lukem BASEDN="dc=example,dc=com" 136 1.1 lukem echo "Searching \"$BASEDN\" (should succeed with no results)..." 137 1.1 lukem echo "# Searching \"$BASEDN\" (should succeed with no results)..." >> $SEARCHOUT 138 1.1.1.9 christos $LDAPSEARCH -s base -b "$BASEDN" -H $URI1 \ 139 1.1 lukem '(objectclass=*)' >> $SEARCHOUT 2>> $TESTOUT 140 1.1 lukem RC=$? 141 1.1 lukem if test $RC != 0 ; then 142 1.1 lukem ### TEMPORARY (see ITS#3963) 143 1.1 lukem echo "ldapsearch failed ($RC)! IGNORED..." 144 1.1 lukem ###echo "ldapsearch failed ($RC)!" 145 1.1 lukem ###test $KILLSERVERS != no && kill -HUP $KILLPIDS 146 1.1 lukem ###exit $RC 147 1.1 lukem fi 148 1.1 lukem 149 1.1 lukem BINDDN="cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" 150 1.1 lukem BINDPW=bjensen 151 1.1 lukem echo "Testing ldapwhoami as ${BINDDN}..." 152 1.1.1.9 christos $LDAPWHOAMI -H $URI1 -D "$BINDDN" -w $BINDPW 153 1.1 lukem RC=$? 154 1.1 lukem if test $RC != 0 ; then 155 1.1 lukem echo "ldapwhoami failed ($RC)!" 156 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 157 1.1 lukem exit $RC 158 1.1 lukem fi 159 1.1 lukem 160 1.1 lukem # Search must succeed 161 1.1 lukem BINDDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" 162 1.1 lukem BINDPW=bjorn 163 1.1 lukem BASEDN="dc=example,dc=com" 164 1.1 lukem echo "Searching \"$BASEDN\" as \"$BINDDN\" (should succeed)..." 165 1.1 lukem echo "# Searching \"$BASEDN\" as \"$BINDDN\" (should succeed)..." >> $SEARCHOUT 166 1.1.1.9 christos $LDAPSEARCH -s base -b "$BASEDN" -H $URI1 \ 167 1.1 lukem -D "$BINDDN" -w "$BINDPW" \ 168 1.1 lukem '(objectClass=*)' >> $SEARCHOUT 2>> $TESTOUT 169 1.1 lukem RC=$? 170 1.1 lukem if test $RC != 0 ; then 171 1.1 lukem echo "ldapsearch failed ($RC)!" 172 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 173 1.1 lukem exit $RC 174 1.1 lukem fi 175 1.1 lukem 176 1.1 lukem # Passwd must succeed 177 1.1 lukem BINDDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" 178 1.1 lukem BINDPW=bjorn 179 1.1 lukem TGT="cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com" 180 1.1 lukem NEWPW=jdoe 181 1.1 lukem echo "Setting \"$TGT\" password..." 182 1.1.1.9 christos $LDAPPASSWD -H $URI1 \ 183 1.1 lukem -w "$BINDPW" -s "$NEWPW" \ 184 1.1 lukem -D "$BINDDN" "$TGT" >> $TESTOUT 2>&1 185 1.1 lukem RC=$? 186 1.1 lukem if test $RC != 0 ; then 187 1.1 lukem echo "ldappasswd failed ($RC)!" 188 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 189 1.1 lukem exit $RC 190 1.1 lukem fi 191 1.1 lukem 192 1.1 lukem # Re-change as self... 193 1.1 lukem echo "Changing self password..." 194 1.1 lukem BINDDN="$TGT" 195 1.1 lukem BINDPW=$NEWPW 196 1.1 lukem TGT="cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com" 197 1.1 lukem NEWPW=newcred 198 1.1.1.9 christos $LDAPPASSWD -H $URI1 \ 199 1.1 lukem -w "$BINDPW" -s "$NEWPW" \ 200 1.1 lukem -D "$BINDDN" "$TGT" >> $TESTOUT 2>&1 201 1.1 lukem RC=$? 202 1.1 lukem if test $RC != 0 ; then 203 1.1 lukem echo "ldappasswd failed ($RC)!" 204 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 205 1.1 lukem exit $RC 206 1.1 lukem fi 207 1.1 lukem 208 1.1 lukem # Searching groups 209 1.1 lukem BINDPW=$NEWPW 210 1.1 lukem BASEDN="ou=Groups,dc=example,dc=com" 211 1.1 lukem echo "Searching \"$BASEDN\" as \"$BINDDN\" (should succeed)..." 212 1.1 lukem echo "# Searching \"$BASEDN\" as \"$BINDDN\" (should succeed)..." >> $SEARCHOUT 213 1.1.1.9 christos $LDAPSEARCH -s one -b "$BASEDN" -H $URI1 \ 214 1.1 lukem -D "$BINDDN" -w "$BINDPW" \ 215 1.1 lukem '(objectClass=*)' >> $SEARCHOUT 2>> $TESTOUT 216 1.1 lukem RC=$? 217 1.1 lukem if test $RC != 0 ; then 218 1.1 lukem echo "ldapsearch failed ($RC)!" 219 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 220 1.1 lukem exit $RC 221 1.1 lukem fi 222 1.1 lukem 223 1.1 lukem # Search must fail 224 1.1 lukem BINDDN="cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" 225 1.1 lukem BINDPW=bjensen 226 1.1 lukem echo "Searching \"$BASEDN\" as \"$BINDDN\" (should succeed with no results)..." 227 1.1 lukem echo "# Searching \"$BASEDN\" as \"$BINDDN\" (should succeed with no results)..." >> $SEARCHOUT 228 1.1.1.9 christos $LDAPSEARCH -s one -b "$BASEDN" -H $URI1 \ 229 1.1 lukem -D "$BINDDN" -w "$BINDPW" \ 230 1.1 lukem '(objectClass=*)' >> $SEARCHOUT 2>> $TESTOUT 231 1.1 lukem RC=$? 232 1.1 lukem if test $RC != 0 ; then 233 1.1 lukem echo "ldapsearch failed ($RC)!" 234 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 235 1.1 lukem exit $RC 236 1.1 lukem fi 237 1.1 lukem 238 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 239 1.1 lukem 240 1.1 lukem LDIF=$ACIOUT 241 1.1 lukem 242 1.1 lukem echo "Filtering ldapsearch results..." 243 1.1.1.4 tron $LDIFFILTER -s mdb=e < $SEARCHOUT > $SEARCHFLT 244 1.1 lukem echo "Filtering original ldif used to create database..." 245 1.1.1.4 tron $LDIFFILTER -s mdb=e < $LDIF > $LDIFFLT 246 1.1 lukem echo "Comparing filter output..." 247 1.1 lukem $CMP $SEARCHFLT $LDIFFLT > $CMPOUT 248 1.1 lukem 249 1.1 lukem if test $? != 0 ; then 250 1.1 lukem echo "comparison failed - operations did not complete correctly" 251 1.1 lukem exit 1 252 1.1 lukem fi 253 1.1 lukem 254 1.1 lukem echo ">>>>> Test succeeded" 255 1.1 lukem 256 1.1 lukem test $KILLSERVERS != no && wait 257 1.1 lukem 258 1.1 lukem exit 0 259