]> git.sur5r.net Git - openldap/blob - tests/scripts/test006-acls
ITS#2401 support tests for dynamically loaded backends
[openldap] / tests / scripts / test006-acls
1 #! /bin/sh
2 # $OpenLDAP$
3
4 SRCDIR="."
5 if test $# -ge 1 ; then
6         SRCDIR=$1; shift
7 fi
8
9 . $SRCDIR/scripts/args.sh
10
11 echo "running defines.sh"
12 . $SRCDIR/scripts/defines.sh
13
14 echo "Cleaning up in $DBDIR..."
15
16 rm -f $DBDIR/[!C]*
17
18 echo "Running slapadd to build slapd database..."
19 . $CONFFILTER $BACKEND $MONITORDB < $ACLCONF > $DBCONF
20 $SLAPADD -f $DBCONF -l $LDIFORDERED
21 RC=$?
22 if test $RC != 0 ; then
23         echo "slapadd failed ($RC)!"
24         exit $RC
25 fi
26
27 echo "Starting slapd on TCP/IP port $PORT..."
28 $SLAPD -f $DBCONF -h $MASTERURI -d $LVL $TIMING > $MASTERLOG 2>&1 &
29 PID=$!
30 if test $WAIT != 0 ; then
31     echo PID $PID
32     read foo
33 fi
34
35 echo "Testing slapd access control..."
36 for i in 0 1 2 3 4 5; do
37         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT \
38                 'objectclass=*' > /dev/null 2>&1
39         RC=$?
40         if test $RC = 0 ; then
41                 break
42         fi
43         echo "Waiting 5 seconds for slapd to start..."
44         sleep 5
45 done
46
47 if test $RC != 0 ; then
48         echo "ldapsearch failed ($RC)!"
49         kill -HUP $PID
50         exit $RC
51 fi
52
53 cat /dev/null > $SEARCHOUT
54
55 #
56 # Try to read an entry inside the Alumni Association container.  It should
57 # give us nothing if we're not bound, and should return all attributes
58 # if we're bound as anyone under UM.
59 #
60 $LDAPSEARCH -b "$JAJDN" -h $LOCALHOST -p $PORT "objectclass=*" \
61         >> $SEARCHOUT 2>&1
62
63 $LDAPSEARCH -b "$JAJDN" -h $LOCALHOST -p $PORT \
64         -D "$BABSDN" -w bjensen "objectclass=*"  >> $SEARCHOUT 2>&1
65
66 #
67 # Check group access. Try to modify Babs' entry. Two attempts:
68 # 1) bound as "James A Jones 1" - should fail
69 # 2) bound as "Bjorn Jensen" - should succeed
70
71 $LDAPMODIFY -D "$JAJDN" -h $LOCALHOST -p $PORT -w jaj >> \
72         $TESTOUT 2>&1 << EOMODS5
73 dn: $BABSDN
74 changetype: modify
75 replace: drink
76 drink: wine
77
78 EOMODS5
79
80
81 $LDAPMODIFY -D "$BJORNSDN" -h $LOCALHOST -p $PORT -w bjorn >> \
82         $TESTOUT 2>&1 << EOMODS6
83 dn: $BABSDN
84 changetype: modify
85 add: homephone
86 homephone: +1 313 555 5444
87
88 EOMODS6
89
90 #
91 # Try to add a "member" attribute to the "All Staff" group.  It should
92 # fail when we add some DN other than our own, and should succeed when
93 # we add our own DN.
94 # bjensen
95 $LDAPMODIFY -D "$JAJDN" -h $LOCALHOST -p $PORT -w jaj > \
96         $TESTOUT 2>&1 << EOMODS1
97 version: 1
98 dn: cn=ITD Staff, ou=Groups, o=University of Michigan, c=US
99 changetype: modify
100 add: member
101 member: cn=Barbara Jensen, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
102
103 EOMODS1
104
105 $LDAPMODIFY -D "$JAJDN" -h $LOCALHOST -p $PORT -w jaj >> \
106         $TESTOUT 2>&1 << EOMODS2
107 version: 1
108
109 dn: cn=ITD Staff, ou=Groups, o=University of Michigan, c=US
110 changetype: modify
111 add: member
112 member: cn=James A Jones 1, ou=Alumni Association, ou=People, o=University of Michigan, c=US
113 EOMODS2
114
115 #
116 # Try to modify the "All Staff" group.  Two attempts are made:
117 # 1) bound as "James A Jones 1" - should fail
118 # 2) bound as "Barbara Jensen" - should succeed
119 #
120 $LDAPMODIFY -D "$JAJDN" -h $LOCALHOST -p $PORT -w jaj >> \
121         $TESTOUT 2>&1 << EOMODS3
122
123 dn: cn=ITD Staff, ou=Groups, o=University of Michigan, c=US
124 changetype: modify
125 delete: description
126
127 EOMODS3
128
129 $LDAPMODIFY -D "$BJORNSDN" -h $LOCALHOST -p $PORT -w bjorn >> \
130         $TESTOUT 2>&1 << EOMODS4
131 # COMMENT
132 version: 1
133 # comment
134 dn: cn=ITD Staff, ou=Groups, o=University of Michigan, c=US
135 # comment
136 changetype: modify
137 # comment
138 add: ou
139 # comment
140 ou: Groups
141 # comment
142 EOMODS4
143
144 echo "Using ldapsearch to retrieve all the entries..."
145 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT \
146             'objectClass=*' >> $SEARCHOUT 2>&1
147 RC=$?
148 kill -HUP $PID
149 if test $RC != 0 ; then
150         echo "ldapsearch failed ($RC)!"
151         exit $RC
152 fi
153
154 LDIF=$ACLOUTMASTER
155
156 echo "Filtering ldapsearch results..."
157 . $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
158 echo "Filtering original ldif used to create database..."
159 . $LDIFFILTER < $LDIF > $LDIFFLT
160 echo "Comparing filter output..."
161 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
162
163 if test $? != 0 ; then
164         echo "comparison failed - modify operations did not complete correctly"
165         exit 1
166 fi
167
168 echo ">>>>> Test succeeded"
169
170
171 exit 0