test024-unique revision 1.1.1.1.2.2 1 1.1.1.1.2.2 yamt #! /bin/sh
2 1.1.1.1.2.2 yamt # $OpenLDAP: pkg/ldap/tests/scripts/test024-unique,v 1.8.2.5 2008/02/11 23:26:51 kurt Exp $
3 1.1.1.1.2.2 yamt ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 1.1.1.1.2.2 yamt ##
5 1.1.1.1.2.2 yamt ## Copyright 2004-2008 The OpenLDAP Foundation.
6 1.1.1.1.2.2 yamt ## All rights reserved.
7 1.1.1.1.2.2 yamt ##
8 1.1.1.1.2.2 yamt ## Redistribution and use in source and binary forms, with or without
9 1.1.1.1.2.2 yamt ## modification, are permitted only as authorized by the OpenLDAP
10 1.1.1.1.2.2 yamt ## Public License.
11 1.1.1.1.2.2 yamt ##
12 1.1.1.1.2.2 yamt ## A copy of this license is available in the file LICENSE in the
13 1.1.1.1.2.2 yamt ## top-level directory of the distribution or, alternatively, at
14 1.1.1.1.2.2 yamt ## <http://www.OpenLDAP.org/license.html>.
15 1.1.1.1.2.2 yamt
16 1.1.1.1.2.2 yamt echo "running defines.sh"
17 1.1.1.1.2.2 yamt . $SRCDIR/scripts/defines.sh
18 1.1.1.1.2.2 yamt
19 1.1.1.1.2.2 yamt if test $UNIQUE = uniqueno; then
20 1.1.1.1.2.2 yamt echo "Attribute Uniqueness overlay not available, test skipped"
21 1.1.1.1.2.2 yamt exit 0
22 1.1.1.1.2.2 yamt fi
23 1.1.1.1.2.2 yamt
24 1.1.1.1.2.2 yamt mkdir -p $TESTDIR $DBDIR1
25 1.1.1.1.2.2 yamt
26 1.1.1.1.2.2 yamt $SLAPPASSWD -g -n >$CONFIGPWF
27 1.1.1.1.2.2 yamt echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
28 1.1.1.1.2.2 yamt
29 1.1.1.1.2.2 yamt echo "Running slapadd to build slapd database..."
30 1.1.1.1.2.2 yamt . $CONFFILTER $BACKEND $MONITORDB < $UNIQUECONF > $CONF1
31 1.1.1.1.2.2 yamt $SLAPADD -f $CONF1 -l $LDIFUNIQUE
32 1.1.1.1.2.2 yamt RC=$?
33 1.1.1.1.2.2 yamt if test $RC != 0 ; then
34 1.1.1.1.2.2 yamt echo "slapadd failed ($RC)!"
35 1.1.1.1.2.2 yamt exit $RC
36 1.1.1.1.2.2 yamt fi
37 1.1.1.1.2.2 yamt
38 1.1.1.1.2.2 yamt echo "Starting slapd on TCP/IP port $PORT1..."
39 1.1.1.1.2.2 yamt mkdir $TESTDIR/confdir
40 1.1.1.1.2.2 yamt $SLAPD -f $CONF1 -F $TESTDIR/confdir -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
41 1.1.1.1.2.2 yamt PID=$!
42 1.1.1.1.2.2 yamt if test $WAIT != 0 ; then
43 1.1.1.1.2.2 yamt echo PID $PID
44 1.1.1.1.2.2 yamt read foo
45 1.1.1.1.2.2 yamt fi
46 1.1.1.1.2.2 yamt KILLPIDS="$PID"
47 1.1.1.1.2.2 yamt
48 1.1.1.1.2.2 yamt sleep 1
49 1.1.1.1.2.2 yamt
50 1.1.1.1.2.2 yamt echo "Testing slapd attribute uniqueness operations..."
51 1.1.1.1.2.2 yamt for i in 0 1 2 3 4 5; do
52 1.1.1.1.2.2 yamt $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
53 1.1.1.1.2.2 yamt 'objectclass=*' > /dev/null 2>&1
54 1.1.1.1.2.2 yamt RC=$?
55 1.1.1.1.2.2 yamt if test $RC = 0 ; then
56 1.1.1.1.2.2 yamt break
57 1.1.1.1.2.2 yamt fi
58 1.1.1.1.2.2 yamt echo "Waiting 5 seconds for slapd to start..."
59 1.1.1.1.2.2 yamt sleep 5
60 1.1.1.1.2.2 yamt done
61 1.1.1.1.2.2 yamt
62 1.1.1.1.2.2 yamt if test $RC != 0 ; then
63 1.1.1.1.2.2 yamt echo "ldapsearch failed ($RC)!"
64 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
65 1.1.1.1.2.2 yamt exit $RC
66 1.1.1.1.2.2 yamt fi
67 1.1.1.1.2.2 yamt
68 1.1.1.1.2.2 yamt echo "Adding a unique record..."
69 1.1.1.1.2.2 yamt $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \
70 1.1.1.1.2.2 yamt > /dev/null << EOTUNIQ1
71 1.1.1.1.2.2 yamt dn: uid=dave,ou=users,o=unique
72 1.1.1.1.2.2 yamt objectClass: inetOrgPerson
73 1.1.1.1.2.2 yamt uid: dave
74 1.1.1.1.2.2 yamt sn: nothere
75 1.1.1.1.2.2 yamt cn: dave
76 1.1.1.1.2.2 yamt businessCategory: otest
77 1.1.1.1.2.2 yamt carLicense: TEST
78 1.1.1.1.2.2 yamt departmentNumber: 42
79 1.1.1.1.2.2 yamt # NOTE: use special chars in attr value to be used
80 1.1.1.1.2.2 yamt # in internal searches ITS#4212
81 1.1.1.1.2.2 yamt displayName: Dave (ITS#4212)
82 1.1.1.1.2.2 yamt employeeNumber: 69
83 1.1.1.1.2.2 yamt employeeType: contractor
84 1.1.1.1.2.2 yamt givenName: Dave
85 1.1.1.1.2.2 yamt EOTUNIQ1
86 1.1.1.1.2.2 yamt RC=$?
87 1.1.1.1.2.2 yamt if test $RC != 0 ; then
88 1.1.1.1.2.2 yamt echo "ldapadd failed ($RC)!"
89 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
90 1.1.1.1.2.2 yamt exit $RC
91 1.1.1.1.2.2 yamt fi
92 1.1.1.1.2.2 yamt
93 1.1.1.1.2.2 yamt echo "Adding a non-unique record..."
94 1.1.1.1.2.2 yamt $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
95 1.1.1.1.2.2 yamt $TESTOUT 2>&1 << EOTUNIQ2
96 1.1.1.1.2.2 yamt dn: uid=bill,ou=users,o=unique
97 1.1.1.1.2.2 yamt objectClass: inetOrgPerson
98 1.1.1.1.2.2 yamt uid: bill
99 1.1.1.1.2.2 yamt sn: johnson
100 1.1.1.1.2.2 yamt cn: bill
101 1.1.1.1.2.2 yamt businessCategory: rtest
102 1.1.1.1.2.2 yamt carLicense: ABC123
103 1.1.1.1.2.2 yamt departmentNumber: 42
104 1.1.1.1.2.2 yamt displayName: Bill
105 1.1.1.1.2.2 yamt employeeNumber: 5150
106 1.1.1.1.2.2 yamt employeeType: contractor
107 1.1.1.1.2.2 yamt givenName: Bill
108 1.1.1.1.2.2 yamt EOTUNIQ2
109 1.1.1.1.2.2 yamt RC=$?
110 1.1.1.1.2.2 yamt if test $RC != 19 ; then
111 1.1.1.1.2.2 yamt echo "unique check failed ($RC)!"
112 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
113 1.1.1.1.2.2 yamt exit -1
114 1.1.1.1.2.2 yamt fi
115 1.1.1.1.2.2 yamt
116 1.1.1.1.2.2 yamt echo Dynamically retrieving initial configuration...
117 1.1.1.1.2.2 yamt $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/initial-config.ldif
118 1.1.1.1.2.2 yamt cat <<EOF >$TESTDIR/initial-reference.ldif
119 1.1.1.1.2.2 yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
120 1.1.1.1.2.2 yamt objectClass: olcOverlayConfig
121 1.1.1.1.2.2 yamt objectClass: olcUniqueConfig
122 1.1.1.1.2.2 yamt olcOverlay: {0}unique
123 1.1.1.1.2.2 yamt olcUniqueBase: o=unique
124 1.1.1.1.2.2 yamt olcUniqueAttribute: employeeNumber
125 1.1.1.1.2.2 yamt olcUniqueAttribute: displayName
126 1.1.1.1.2.2 yamt
127 1.1.1.1.2.2 yamt EOF
128 1.1.1.1.2.2 yamt diff $TESTDIR/initial-config.ldif $TESTDIR/initial-reference.ldif > /dev/null 2>&1
129 1.1.1.1.2.2 yamt RC=$?
130 1.1.1.1.2.2 yamt if test $RC != 0 ; then
131 1.1.1.1.2.2 yamt echo "Initial configuration is not reported correctly."
132 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
133 1.1.1.1.2.2 yamt exit -1
134 1.1.1.1.2.2 yamt fi
135 1.1.1.1.2.2 yamt
136 1.1.1.1.2.2 yamt echo Dynamically trying to add a URI with legacy attrs present...
137 1.1.1.1.2.2 yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
138 1.1.1.1.2.2 yamt > $TESTOUT 2>&1 <<EOF
139 1.1.1.1.2.2 yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
140 1.1.1.1.2.2 yamt changetype: modify
141 1.1.1.1.2.2 yamt add: olcUniqueURI
142 1.1.1.1.2.2 yamt olcUniqueURI: ldap:///?employeeNumber,displayName?sub
143 1.1.1.1.2.2 yamt EOF
144 1.1.1.1.2.2 yamt RC=$?
145 1.1.1.1.2.2 yamt if test $RC != 80 ; then
146 1.1.1.1.2.2 yamt echo "legacy and unique_uri allowed together"
147 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
148 1.1.1.1.2.2 yamt exit -1
149 1.1.1.1.2.2 yamt fi
150 1.1.1.1.2.2 yamt
151 1.1.1.1.2.2 yamt echo Dynamically trying to add legacy ignored attrs with legacy attrs present...
152 1.1.1.1.2.2 yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
153 1.1.1.1.2.2 yamt > $TESTOUT 2>&1 <<EOF
154 1.1.1.1.2.2 yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
155 1.1.1.1.2.2 yamt changetype: modify
156 1.1.1.1.2.2 yamt add: olcUniqueIgnore
157 1.1.1.1.2.2 yamt olcUniqueIgnore: objectClass
158 1.1.1.1.2.2 yamt EOF
159 1.1.1.1.2.2 yamt RC=$?
160 1.1.1.1.2.2 yamt if test $RC != 80 ; then
161 1.1.1.1.2.2 yamt echo "legacy attrs and legacy ignore attrs allowed together"
162 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
163 1.1.1.1.2.2 yamt exit -1
164 1.1.1.1.2.2 yamt fi
165 1.1.1.1.2.2 yamt
166 1.1.1.1.2.2 yamt echo Verifying initial configuration intact...
167 1.1.1.1.2.2 yamt $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/initial-config-recheck.ldif
168 1.1.1.1.2.2 yamt diff $TESTDIR/initial-config-recheck.ldif $TESTDIR/initial-reference.ldif > /dev/null 2>&1
169 1.1.1.1.2.2 yamt RC=$?
170 1.1.1.1.2.2 yamt if test $RC != 0 ; then
171 1.1.1.1.2.2 yamt echo "Initial configuration damaged by unsuccessful modifies."
172 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
173 1.1.1.1.2.2 yamt exit -1
174 1.1.1.1.2.2 yamt fi
175 1.1.1.1.2.2 yamt
176 1.1.1.1.2.2 yamt echo Dynamically removing legacy base...
177 1.1.1.1.2.2 yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
178 1.1.1.1.2.2 yamt > $TESTOUT 2>&1 <<EOF
179 1.1.1.1.2.2 yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
180 1.1.1.1.2.2 yamt changetype: modify
181 1.1.1.1.2.2 yamt delete: olcUniqueBase
182 1.1.1.1.2.2 yamt EOF
183 1.1.1.1.2.2 yamt RC=$?
184 1.1.1.1.2.2 yamt if test $RC != 0 ; then
185 1.1.1.1.2.2 yamt echo "base removal failed"
186 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
187 1.1.1.1.2.2 yamt exit -1
188 1.1.1.1.2.2 yamt fi
189 1.1.1.1.2.2 yamt
190 1.1.1.1.2.2 yamt echo Verifying base removal...
191 1.1.1.1.2.2 yamt $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/baseremoval-config.ldif
192 1.1.1.1.2.2 yamt cat >$TESTDIR/baseremoval-reference.ldif <<EOF
193 1.1.1.1.2.2 yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
194 1.1.1.1.2.2 yamt objectClass: olcOverlayConfig
195 1.1.1.1.2.2 yamt objectClass: olcUniqueConfig
196 1.1.1.1.2.2 yamt olcOverlay: {0}unique
197 1.1.1.1.2.2 yamt olcUniqueAttribute: employeeNumber
198 1.1.1.1.2.2 yamt olcUniqueAttribute: displayName
199 1.1.1.1.2.2 yamt
200 1.1.1.1.2.2 yamt EOF
201 1.1.1.1.2.2 yamt diff $TESTDIR/baseremoval-config.ldif $TESTDIR/baseremoval-reference.ldif > /dev/null 2>&1
202 1.1.1.1.2.2 yamt RC=$?
203 1.1.1.1.2.2 yamt if test $RC != 0 ; then
204 1.1.1.1.2.2 yamt echo "Configuration damaged by base removal"
205 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
206 1.1.1.1.2.2 yamt exit -1
207 1.1.1.1.2.2 yamt fi
208 1.1.1.1.2.2 yamt
209 1.1.1.1.2.2 yamt echo "Adding a non-unique record..."
210 1.1.1.1.2.2 yamt $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
211 1.1.1.1.2.2 yamt $TESTOUT 2>&1 << EOTUNIQ2
212 1.1.1.1.2.2 yamt dn: uid=bill,ou=users,o=unique
213 1.1.1.1.2.2 yamt objectClass: inetOrgPerson
214 1.1.1.1.2.2 yamt uid: bill
215 1.1.1.1.2.2 yamt sn: johnson
216 1.1.1.1.2.2 yamt cn: bill
217 1.1.1.1.2.2 yamt businessCategory: rtest
218 1.1.1.1.2.2 yamt carLicense: ABC123
219 1.1.1.1.2.2 yamt departmentNumber: 42
220 1.1.1.1.2.2 yamt displayName: Bill
221 1.1.1.1.2.2 yamt employeeNumber: 5150
222 1.1.1.1.2.2 yamt employeeType: contractor
223 1.1.1.1.2.2 yamt givenName: Bill
224 1.1.1.1.2.2 yamt EOTUNIQ2
225 1.1.1.1.2.2 yamt RC=$?
226 1.1.1.1.2.2 yamt if test $RC != 19 ; then
227 1.1.1.1.2.2 yamt echo "unique check failed ($RC)!"
228 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
229 1.1.1.1.2.2 yamt exit -1
230 1.1.1.1.2.2 yamt fi
231 1.1.1.1.2.2 yamt
232 1.1.1.1.2.2 yamt echo Trying a legacy base outside of the backend...
233 1.1.1.1.2.2 yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
234 1.1.1.1.2.2 yamt > $TESTOUT 2>&1 <<EOF
235 1.1.1.1.2.2 yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
236 1.1.1.1.2.2 yamt changetype: modify
237 1.1.1.1.2.2 yamt add: olcUniqueBase
238 1.1.1.1.2.2 yamt olcUniqueBase: cn=config
239 1.1.1.1.2.2 yamt EOF
240 1.1.1.1.2.2 yamt RC=$?
241 1.1.1.1.2.2 yamt if test $RC != 80 ; then
242 1.1.1.1.2.2 yamt echo "out of backend scope base allowed"
243 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
244 1.1.1.1.2.2 yamt exit -1
245 1.1.1.1.2.2 yamt fi
246 1.1.1.1.2.2 yamt
247 1.1.1.1.2.2 yamt echo "Adding and removing attrs..."
248 1.1.1.1.2.2 yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
249 1.1.1.1.2.2 yamt > $TESTOUT 2>&1 <<EOF
250 1.1.1.1.2.2 yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
251 1.1.1.1.2.2 yamt changetype: modify
252 1.1.1.1.2.2 yamt add: olcUniqueAttribute
253 1.1.1.1.2.2 yamt olcUniqueAttribute: description
254 1.1.1.1.2.2 yamt olcUniqueAttribute: telephoneNumber
255 1.1.1.1.2.2 yamt -
256 1.1.1.1.2.2 yamt delete: olcUniqueAttribute
257 1.1.1.1.2.2 yamt olcUniqueAttribute: displayName
258 1.1.1.1.2.2 yamt EOF
259 1.1.1.1.2.2 yamt RC=$?
260 1.1.1.1.2.2 yamt if test $RC != 0 ; then
261 1.1.1.1.2.2 yamt echo "Unable to remove an attribute"
262 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
263 1.1.1.1.2.2 yamt exit -1
264 1.1.1.1.2.2 yamt fi
265 1.1.1.1.2.2 yamt
266 1.1.1.1.2.2 yamt echo "Verifying we removed the right attr..."
267 1.1.1.1.2.2 yamt $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
268 1.1.1.1.2.2 yamt $TESTOUT 2>&1 << EOTUNIQ2
269 1.1.1.1.2.2 yamt dn: uid=bill,ou=users,o=unique
270 1.1.1.1.2.2 yamt objectClass: inetOrgPerson
271 1.1.1.1.2.2 yamt uid: bill
272 1.1.1.1.2.2 yamt sn: johnson
273 1.1.1.1.2.2 yamt cn: bill
274 1.1.1.1.2.2 yamt businessCategory: rtest
275 1.1.1.1.2.2 yamt carLicense: ABC123
276 1.1.1.1.2.2 yamt departmentNumber: 42
277 1.1.1.1.2.2 yamt displayName: Bill
278 1.1.1.1.2.2 yamt employeeNumber: 5150
279 1.1.1.1.2.2 yamt employeeType: contractor
280 1.1.1.1.2.2 yamt givenName: Bill
281 1.1.1.1.2.2 yamt EOTUNIQ2
282 1.1.1.1.2.2 yamt RC=$?
283 1.1.1.1.2.2 yamt if test $RC != 19 ; then
284 1.1.1.1.2.2 yamt echo "olcUniqueAttribtue single deletion hit the wrong value"
285 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
286 1.1.1.1.2.2 yamt exit -1
287 1.1.1.1.2.2 yamt fi
288 1.1.1.1.2.2 yamt
289 1.1.1.1.2.2 yamt echo Removing legacy config and adding URIs...
290 1.1.1.1.2.2 yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
291 1.1.1.1.2.2 yamt > $TESTOUT 2>&1 <<EOF
292 1.1.1.1.2.2 yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
293 1.1.1.1.2.2 yamt changetype: modify
294 1.1.1.1.2.2 yamt delete: olcUniqueAttribute
295 1.1.1.1.2.2 yamt -
296 1.1.1.1.2.2 yamt add: olcUniqueURI
297 1.1.1.1.2.2 yamt olcUniqueURI: ldap:///?employeeNumber,displayName?sub
298 1.1.1.1.2.2 yamt olcUniqueURI: ldap:///?description?one
299 1.1.1.1.2.2 yamt EOF
300 1.1.1.1.2.2 yamt RC=$?
301 1.1.1.1.2.2 yamt if test $RC != 0 ; then
302 1.1.1.1.2.2 yamt echo "Reconfiguration to URIs failed"
303 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
304 1.1.1.1.2.2 yamt exit -1
305 1.1.1.1.2.2 yamt fi
306 1.1.1.1.2.2 yamt
307 1.1.1.1.2.2 yamt echo Dynamically retrieving second configuration...
308 1.1.1.1.2.2 yamt $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/second-config.ldif
309 1.1.1.1.2.2 yamt cat >$TESTDIR/second-reference.ldif <<EOF
310 1.1.1.1.2.2 yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
311 1.1.1.1.2.2 yamt objectClass: olcOverlayConfig
312 1.1.1.1.2.2 yamt objectClass: olcUniqueConfig
313 1.1.1.1.2.2 yamt olcOverlay: {0}unique
314 1.1.1.1.2.2 yamt olcUniqueURI: ldap:///?employeeNumber,displayName?sub
315 1.1.1.1.2.2 yamt olcUniqueURI: ldap:///?description?one
316 1.1.1.1.2.2 yamt
317 1.1.1.1.2.2 yamt EOF
318 1.1.1.1.2.2 yamt diff $TESTDIR/second-config.ldif $TESTDIR/second-reference.ldif > /dev/null 2>&1
319 1.1.1.1.2.2 yamt RC=$?
320 1.1.1.1.2.2 yamt if test $RC != 0 ; then
321 1.1.1.1.2.2 yamt echo "Second configuration is not reported correctly."
322 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
323 1.1.1.1.2.2 yamt exit -1
324 1.1.1.1.2.2 yamt fi
325 1.1.1.1.2.2 yamt
326 1.1.1.1.2.2 yamt echo "Adding a non-unique record..."
327 1.1.1.1.2.2 yamt $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
328 1.1.1.1.2.2 yamt $TESTOUT 2>&1 << EOTUNIQ2
329 1.1.1.1.2.2 yamt dn: uid=bill,ou=users,o=unique
330 1.1.1.1.2.2 yamt objectClass: inetOrgPerson
331 1.1.1.1.2.2 yamt uid: bill
332 1.1.1.1.2.2 yamt sn: johnson
333 1.1.1.1.2.2 yamt cn: bill
334 1.1.1.1.2.2 yamt businessCategory: rtest
335 1.1.1.1.2.2 yamt carLicense: ABC123
336 1.1.1.1.2.2 yamt departmentNumber: 42
337 1.1.1.1.2.2 yamt displayName: Bill
338 1.1.1.1.2.2 yamt employeeNumber: 5150
339 1.1.1.1.2.2 yamt employeeType: contractor
340 1.1.1.1.2.2 yamt givenName: Bill
341 1.1.1.1.2.2 yamt EOTUNIQ2
342 1.1.1.1.2.2 yamt RC=$?
343 1.1.1.1.2.2 yamt if test $RC != 19 ; then
344 1.1.1.1.2.2 yamt echo "unique check failed ($RC)!"
345 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
346 1.1.1.1.2.2 yamt exit -1
347 1.1.1.1.2.2 yamt fi
348 1.1.1.1.2.2 yamt
349 1.1.1.1.2.2 yamt echo Dynamically trying to add legacy base
350 1.1.1.1.2.2 yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
351 1.1.1.1.2.2 yamt > $TESTOUT 2>&1 <<EOF
352 1.1.1.1.2.2 yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
353 1.1.1.1.2.2 yamt changetype: modify
354 1.1.1.1.2.2 yamt add: olcUniqueBase
355 1.1.1.1.2.2 yamt olcUniqueBase: o=unique
356 1.1.1.1.2.2 yamt EOF
357 1.1.1.1.2.2 yamt RC=$?
358 1.1.1.1.2.2 yamt if test $RC != 80 ; then
359 1.1.1.1.2.2 yamt echo "legacy base allowed with URIs"
360 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
361 1.1.1.1.2.2 yamt exit -1
362 1.1.1.1.2.2 yamt fi
363 1.1.1.1.2.2 yamt
364 1.1.1.1.2.2 yamt echo Dynamically trying to add legacy attrs
365 1.1.1.1.2.2 yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
366 1.1.1.1.2.2 yamt > $TESTOUT 2>&1 <<EOF
367 1.1.1.1.2.2 yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
368 1.1.1.1.2.2 yamt changetype: modify
369 1.1.1.1.2.2 yamt add: olcUniqueAttribute
370 1.1.1.1.2.2 yamt olcUniqueAttribute: description
371 1.1.1.1.2.2 yamt EOF
372 1.1.1.1.2.2 yamt RC=$?
373 1.1.1.1.2.2 yamt if test $RC != 80 ; then
374 1.1.1.1.2.2 yamt echo "legacy attributes allowed with URIs"
375 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
376 1.1.1.1.2.2 yamt exit -1
377 1.1.1.1.2.2 yamt fi
378 1.1.1.1.2.2 yamt
379 1.1.1.1.2.2 yamt echo Dynamically trying to add legacy strictness
380 1.1.1.1.2.2 yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
381 1.1.1.1.2.2 yamt > $TESTOUT 2>&1 <<EOF
382 1.1.1.1.2.2 yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
383 1.1.1.1.2.2 yamt changetype: modify
384 1.1.1.1.2.2 yamt add: olcUniqueStrict
385 1.1.1.1.2.2 yamt olcUniqueStrict: TRUE
386 1.1.1.1.2.2 yamt EOF
387 1.1.1.1.2.2 yamt RC=$?
388 1.1.1.1.2.2 yamt if test $RC != 80 ; then
389 1.1.1.1.2.2 yamt echo "legacy strictness allowed with URIs"
390 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
391 1.1.1.1.2.2 yamt exit -1
392 1.1.1.1.2.2 yamt fi
393 1.1.1.1.2.2 yamt
394 1.1.1.1.2.2 yamt #echo ----------------------
395 1.1.1.1.2.2 yamt echo Dynamically trying a bad filter...
396 1.1.1.1.2.2 yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
397 1.1.1.1.2.2 yamt > $TESTOUT 2>&1 <<EOF
398 1.1.1.1.2.2 yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
399 1.1.1.1.2.2 yamt changetype: modify
400 1.1.1.1.2.2 yamt replace: olcUniqueURI
401 1.1.1.1.2.2 yamt olcUniqueURI: ldap:///?sn?sub?((cn=e*))
402 1.1.1.1.2.2 yamt EOF
403 1.1.1.1.2.2 yamt RC=$?
404 1.1.1.1.2.2 yamt if test $RC != 80 ; then
405 1.1.1.1.2.2 yamt echo "bad filter allowed"
406 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
407 1.1.1.1.2.2 yamt exit -1
408 1.1.1.1.2.2 yamt fi
409 1.1.1.1.2.2 yamt
410 1.1.1.1.2.2 yamt echo Verifying second configuration intact...
411 1.1.1.1.2.2 yamt $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/second-config-recheck.ldif
412 1.1.1.1.2.2 yamt diff $TESTDIR/second-config-recheck.ldif $TESTDIR/second-reference.ldif > /dev/null 2>&1
413 1.1.1.1.2.2 yamt RC=$?
414 1.1.1.1.2.2 yamt if test $RC != 0 ; then
415 1.1.1.1.2.2 yamt echo "Second configuration damaged by rejected modifies."
416 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
417 1.1.1.1.2.2 yamt exit -1
418 1.1.1.1.2.2 yamt fi
419 1.1.1.1.2.2 yamt
420 1.1.1.1.2.2 yamt #echo ----------------------
421 1.1.1.1.2.2 yamt echo Dynamically reconfiguring to use different URIs...
422 1.1.1.1.2.2 yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
423 1.1.1.1.2.2 yamt > $TESTOUT 2>&1 <<EOF
424 1.1.1.1.2.2 yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
425 1.1.1.1.2.2 yamt changetype: modify
426 1.1.1.1.2.2 yamt add: olcUniqueURI
427 1.1.1.1.2.2 yamt olcUniqueURI: ldap:///?sn?sub?(cn=e*)
428 1.1.1.1.2.2 yamt -
429 1.1.1.1.2.2 yamt delete: olcUniqueURI
430 1.1.1.1.2.2 yamt olcUniqueURI: ldap:///?description?one
431 1.1.1.1.2.2 yamt EOF
432 1.1.1.1.2.2 yamt RC=$?
433 1.1.1.1.2.2 yamt if test $RC != 0 ; then
434 1.1.1.1.2.2 yamt echo "unable to reconfigure"
435 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
436 1.1.1.1.2.2 yamt exit -1
437 1.1.1.1.2.2 yamt fi
438 1.1.1.1.2.2 yamt
439 1.1.1.1.2.2 yamt echo Dynamically retrieving third configuration...
440 1.1.1.1.2.2 yamt $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/third-config.ldif
441 1.1.1.1.2.2 yamt cat >$TESTDIR/third-reference.ldif <<EOF
442 1.1.1.1.2.2 yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
443 1.1.1.1.2.2 yamt objectClass: olcOverlayConfig
444 1.1.1.1.2.2 yamt objectClass: olcUniqueConfig
445 1.1.1.1.2.2 yamt olcOverlay: {0}unique
446 1.1.1.1.2.2 yamt olcUniqueURI: ldap:///?employeeNumber,displayName?sub
447 1.1.1.1.2.2 yamt olcUniqueURI: ldap:///?sn?sub?(cn=e*)
448 1.1.1.1.2.2 yamt
449 1.1.1.1.2.2 yamt EOF
450 1.1.1.1.2.2 yamt diff $TESTDIR/third-config.ldif $TESTDIR/third-reference.ldif > /dev/null 2>&1
451 1.1.1.1.2.2 yamt RC=$?
452 1.1.1.1.2.2 yamt if test $RC != 0 ; then
453 1.1.1.1.2.2 yamt echo "Third configuration is not reported correctly."
454 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
455 1.1.1.1.2.2 yamt exit -1
456 1.1.1.1.2.2 yamt fi
457 1.1.1.1.2.2 yamt
458 1.1.1.1.2.2 yamt echo "Adding a record unique in both domains if filtered..."
459 1.1.1.1.2.2 yamt
460 1.1.1.1.2.2 yamt $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
461 1.1.1.1.2.2 yamt $TESTOUT 2>&1 << EOF
462 1.1.1.1.2.2 yamt dn: uid=edgar,ou=users,o=unique
463 1.1.1.1.2.2 yamt objectClass: inetOrgPerson
464 1.1.1.1.2.2 yamt uid: edgar
465 1.1.1.1.2.2 yamt sn: johnson
466 1.1.1.1.2.2 yamt cn: edgar
467 1.1.1.1.2.2 yamt EOF
468 1.1.1.1.2.2 yamt
469 1.1.1.1.2.2 yamt RC=$?
470 1.1.1.1.2.2 yamt if test $RC != 0 ; then
471 1.1.1.1.2.2 yamt echo "unique check failed ($RC)!"
472 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
473 1.1.1.1.2.2 yamt exit -1
474 1.1.1.1.2.2 yamt fi
475 1.1.1.1.2.2 yamt
476 1.1.1.1.2.2 yamt echo "Adding a record unique in one domain, non-unique in the filtered domain..."
477 1.1.1.1.2.2 yamt
478 1.1.1.1.2.2 yamt $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
479 1.1.1.1.2.2 yamt $TESTOUT 2>&1 << EOF
480 1.1.1.1.2.2 yamt dn: uid=elvis,ou=users,o=unique
481 1.1.1.1.2.2 yamt objectClass: inetOrgPerson
482 1.1.1.1.2.2 yamt uid: elvis
483 1.1.1.1.2.2 yamt sn: johnson
484 1.1.1.1.2.2 yamt cn: elvis
485 1.1.1.1.2.2 yamt EOF
486 1.1.1.1.2.2 yamt
487 1.1.1.1.2.2 yamt RC=$?
488 1.1.1.1.2.2 yamt if test $RC != 19 ; then
489 1.1.1.1.2.2 yamt echo "unique check failed ($RC)!"
490 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
491 1.1.1.1.2.2 yamt exit -1
492 1.1.1.1.2.2 yamt fi
493 1.1.1.1.2.2 yamt
494 1.1.1.1.2.2 yamt #echo ----------------------
495 1.1.1.1.2.2 yamt echo Dynamically reconfiguring to use attribute-ignore URIs...
496 1.1.1.1.2.2 yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
497 1.1.1.1.2.2 yamt > $TESTOUT 2>&1 <<EOF
498 1.1.1.1.2.2 yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
499 1.1.1.1.2.2 yamt changetype: modify
500 1.1.1.1.2.2 yamt replace: olcUniqueURI
501 1.1.1.1.2.2 yamt olcUniqueURI: ignore ldap:///?objectClass,uid,cn,sn?sub
502 1.1.1.1.2.2 yamt EOF
503 1.1.1.1.2.2 yamt RC=$?
504 1.1.1.1.2.2 yamt if test $RC != 0 ; then
505 1.1.1.1.2.2 yamt echo "unable to reconfigure"
506 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
507 1.1.1.1.2.2 yamt exit -1
508 1.1.1.1.2.2 yamt fi
509 1.1.1.1.2.2 yamt
510 1.1.1.1.2.2 yamt echo Dynamically retrieving fourth configuration...
511 1.1.1.1.2.2 yamt $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/fourth-config.ldif
512 1.1.1.1.2.2 yamt cat >$TESTDIR/fourth-reference.ldif <<EOF
513 1.1.1.1.2.2 yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
514 1.1.1.1.2.2 yamt objectClass: olcOverlayConfig
515 1.1.1.1.2.2 yamt objectClass: olcUniqueConfig
516 1.1.1.1.2.2 yamt olcOverlay: {0}unique
517 1.1.1.1.2.2 yamt olcUniqueURI: ignore ldap:///?objectClass,uid,cn,sn?sub
518 1.1.1.1.2.2 yamt
519 1.1.1.1.2.2 yamt EOF
520 1.1.1.1.2.2 yamt diff $TESTDIR/fourth-config.ldif $TESTDIR/fourth-reference.ldif > /dev/null 2>&1
521 1.1.1.1.2.2 yamt RC=$?
522 1.1.1.1.2.2 yamt if test $RC != 0 ; then
523 1.1.1.1.2.2 yamt echo "Fourth configuration is not reported correctly."
524 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
525 1.1.1.1.2.2 yamt exit -1
526 1.1.1.1.2.2 yamt fi
527 1.1.1.1.2.2 yamt
528 1.1.1.1.2.2 yamt echo "Adding a record unique in the ignore-domain..."
529 1.1.1.1.2.2 yamt
530 1.1.1.1.2.2 yamt $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
531 1.1.1.1.2.2 yamt $TESTOUT 2>&1 << EOF
532 1.1.1.1.2.2 yamt dn: uid=elvis,ou=users,o=unique
533 1.1.1.1.2.2 yamt objectClass: inetOrgPerson
534 1.1.1.1.2.2 yamt uid: elvis
535 1.1.1.1.2.2 yamt sn: johnson
536 1.1.1.1.2.2 yamt cn: elvis
537 1.1.1.1.2.2 yamt description: left the building
538 1.1.1.1.2.2 yamt EOF
539 1.1.1.1.2.2 yamt
540 1.1.1.1.2.2 yamt RC=$?
541 1.1.1.1.2.2 yamt if test $RC != 0 ; then
542 1.1.1.1.2.2 yamt echo "unique check failed ($RC)!"
543 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
544 1.1.1.1.2.2 yamt exit -1
545 1.1.1.1.2.2 yamt fi
546 1.1.1.1.2.2 yamt
547 1.1.1.1.2.2 yamt echo "Adding a record non-unique in the ignore-domain..."
548 1.1.1.1.2.2 yamt
549 1.1.1.1.2.2 yamt $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
550 1.1.1.1.2.2 yamt $TESTOUT 2>&1 << EOF
551 1.1.1.1.2.2 yamt dn: uid=harry,ou=users,o=unique
552 1.1.1.1.2.2 yamt objectClass: inetOrgPerson
553 1.1.1.1.2.2 yamt uid: harry
554 1.1.1.1.2.2 yamt sn: johnson
555 1.1.1.1.2.2 yamt cn: harry
556 1.1.1.1.2.2 yamt description: left the building
557 1.1.1.1.2.2 yamt EOF
558 1.1.1.1.2.2 yamt
559 1.1.1.1.2.2 yamt RC=$?
560 1.1.1.1.2.2 yamt if test $RC != 19 ; then
561 1.1.1.1.2.2 yamt echo "unique check failed ($RC)!"
562 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
563 1.1.1.1.2.2 yamt exit -1
564 1.1.1.1.2.2 yamt fi
565 1.1.1.1.2.2 yamt
566 1.1.1.1.2.2 yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
567 1.1.1.1.2.2 yamt
568 1.1.1.1.2.2 yamt echo ">>>>> Test succeeded"
569 1.1.1.1.2.2 yamt
570 1.1.1.1.2.2 yamt test $KILLSERVERS != no && wait
571 1.1.1.1.2.2 yamt
572 1.1.1.1.2.2 yamt exit 0
573