1#! /bin/sh
2# $OpenLDAP$
3## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4##
5## Copyright 1998-2011 The OpenLDAP Foundation.
6## All rights reserved.
7##
8## Redistribution and use in source and binary forms, with or without
9## modification, are permitted only as authorized by the OpenLDAP
10## Public License.
11##
12## A copy of this license is available in the file LICENSE in the
13## top-level directory of the distribution or, alternatively, at
14## <http://www.OpenLDAP.org/license.html>.
15
16## FIXME: need to exclude legal but wrong results...
17
18echo "running defines.sh"
19. $SRCDIR/scripts/defines.sh
20
21if test $BACKEND = null; then
22	echo "Limits irrelevant to $BACKEND backend, test skipped"
23	exit 0
24fi
25
26mkdir -p $TESTDIR $DBDIR1
27
28echo "Running slapadd to build slapd database..."
29. $CONFFILTER $BACKEND $MONITORDB < $LIMITSCONF > $ADDCONF
30$SLAPADD -f $ADDCONF -l $LDIFLIMITS
31RC=$?
32if test $RC != 0 ; then
33	echo "slapadd failed ($RC)!"
34	exit $RC
35fi
36
37echo "Running slapindex to index slapd database..."
38. $CONFFILTER $BACKEND $MONITORDB < $LIMITSCONF > $CONF1
39$SLAPINDEX -f $CONF1
40RC=$?
41if test $RC != 0 ; then
42	echo "warning: slapindex failed ($RC)"
43	echo "  assuming no indexing support"
44fi
45
46echo "Starting slapd on TCP/IP port $PORT1..."
47$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
48PID=$!
49if test $WAIT != 0 ; then
50    echo PID $PID
51    read foo
52fi
53KILLPIDS="$PID"
54
55sleep 1
56
57echo "Testing slapd searching..."
58for i in 0 1 2 3 4 5; do
59	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
60		'(objectclass=*)' > /dev/null 2>&1
61	RC=$?
62	if test $RC = 0 ; then
63		break
64	fi
65	echo "Waiting 5 seconds for slapd to start..."
66	sleep 5
67done
68
69if test $RC != 0 ; then
70	echo "ldapsearch failed ($RC)!"
71	test $KILLSERVERS != no && kill -HUP $KILLPIDS
72	exit $RC
73fi
74
75cat /dev/null > $SEARCHOUT
76
77echo ""
78echo "Testing regular search limits"
79echo ""
80
81echo "Testing no limits requested for unlimited ID..."
82$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
83	-D 'cn=Unlimited User,ou=People,dc=example,dc=com' \
84	'(objectClass=*)' >$SEARCHOUT 2>&1
85RC=$?
86COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
87case $RC in
88	0)
89		if test x"$COUNT" != x ; then
90			echo "...success (got $COUNT entries)"
91		else
92			echo "...error: did not expect ldapsearch success ($RC)!"
93                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
94                        exit 1
95                fi
96	;;
97	*)
98		echo "ldapsearch failed ($RC)!"
99		test $KILLSERVERS != no && kill -HUP $KILLPIDS
100		exit $RC
101	;;
102esac
103
104echo "Testing no limits requested for rootdn=$MANAGERDN..."
105$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
106	-D "$MANAGERDN" \
107	'(objectClass=*)' >$SEARCHOUT 2>&1
108RC=$?
109COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
110case $RC in
111	0)
112		if test x"$COUNT" != x ; then
113			echo "...success (got $COUNT entries)"
114		else
115			echo "...error: did not expect ldapsearch success ($RC)!"
116                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
117                        exit 1
118                fi
119	;;
120	*)
121		echo "ldapsearch failed ($RC)!"
122		test $KILLSERVERS != no && kill -HUP $KILLPIDS
123		exit $RC
124	;;
125esac
126
127SIZELIMIT=4
128echo "Testing limit requested for rootdn=$MANAGERDN..."
129$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \
130	-D "$MANAGERDN" \
131	'(objectClass=*)' >$SEARCHOUT 2>&1
132RC=$?
133COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
134case $RC in
135	0)
136		if test x"$COUNT" != x ; then
137			if test "$COUNT" -gt "$SIZELIMIT" ; then
138				echo "...error: got $COUNT entries instead of the requested $SIZELIMIT"
139				test $KILLSERVERS != no && kill -HUP $KILLPIDS
140				exit 1
141			fi
142			echo "...didn't bump into the requested size limit ($SIZELIMIT; got $COUNT entries)"
143		else
144			echo "...error: did not expect ldapsearch success ($RC)!"
145			test $KILLSERVERS != no && kill -HUP $KILLPIDS
146			exit 1
147		fi
148	;;
149	4)
150		if test x"$COUNT" != x ; then
151			if test "$COUNT" = "$SIZELIMIT" ; then
152				echo "...bumped into requested size limit ($SIZELIMIT)"
153			else
154				echo "...error: got $COUNT entries with a requested sizelimit of $SIZELIMIT"
155				test $KILLSERVERS != no && kill -HUP $KILLPIDS
156				exit $RC
157			fi
158		else
159			echo "...error: bumped into server-side size limit, but got no entries!"
160                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
161                        exit $RC
162		fi
163	;;
164	*)
165		echo "ldapsearch failed ($RC)!"
166		test $KILLSERVERS != no && kill -HUP $KILLPIDS
167		exit $RC
168	;;
169esac
170
171SIZELIMIT=2
172echo "Testing size limit request ($SIZELIMIT) for unlimited ID..."
173$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \
174	-D 'cn=Unlimited User,ou=People,dc=example,dc=com' \
175	'(objectClass=*)' > $SEARCHOUT 2>&1
176RC=$?
177COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
178case $RC in
179	0)
180		if test x"$COUNT" != x ; then
181			if test "$COUNT" -gt "$SIZELIMIT" ; then
182				echo "...error: got $COUNT entries instead of the requested $SIZELIMIT"
183				test $KILLSERVERS != no && kill -HUP $KILLPIDS
184				exit 1
185			fi
186			echo "...didn't bump into the requested size limit ($SIZELIMIT; got $COUNT entries)"
187		else
188			echo "...error: did not expect ldapsearch success ($RC)!"
189			test $KILLSERVERS != no && kill -HUP $KILLPIDS
190			exit 1
191		fi
192	;;
193	4)
194		if test x"$COUNT" != x ; then
195			if test "$COUNT" = "$SIZELIMIT" ; then
196				echo "...bumped into requested size limit ($SIZELIMIT)"
197			else
198				echo "...error: got $COUNT entries with a requested sizelimit of $SIZELIMIT"
199				test $KILLSERVERS != no && kill -HUP $KILLPIDS
200				exit $RC
201			fi
202		else
203			echo "...error: bumped into server-side size limit, but got no entries!"
204                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
205                        exit $RC
206		fi
207	;;
208	*)
209		echo "ldapsearch failed ($RC)!"
210		test $KILLSERVERS != no && kill -HUP $KILLPIDS
211		exit $RC
212	;;
213esac
214
215TIMELIMIT=10
216echo "Testing time limit request ($TIMELIMIT s) for unlimited ID..."
217$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -l $TIMELIMIT \
218	-D 'cn=Unlimited User,ou=People,dc=example,dc=com' \
219	'(objectClass=*)' > $SEARCHOUT 2>&1
220RC=$?
221COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
222case $RC in
223	0)
224		if test x"$COUNT" != x ; then
225			echo "...didn't bump into the requested time limit ($TIMELIMIT s; got $COUNT entries)"
226		else
227			echo "...error: did not expect ldapsearch success ($RC)!"
228                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
229                        exit 1
230                fi
231	;;
232	3)
233		if test x"$COUNT" != x ; then
234			COUNT=0
235		fi
236		echo "...bumped into requested time limit ($TIMELIMIT s; got $COUNT entries)"
237	;;
238	*)
239		echo "ldapsearch failed ($RC)!"
240		test $KILLSERVERS != no && kill -HUP $KILLPIDS
241		exit $RC
242	;;
243esac
244
245echo "Testing no limits requested for soft limited ID..."
246$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
247	-D 'cn=Soft Limited User,ou=People,dc=example,dc=com' \
248	'(objectClass=*)' > $SEARCHOUT 2>&1
249RC=$?
250COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
251case $RC in
252	0)
253		if test x"$COUNT" != x ; then
254			echo "...didn't bump into server-side size limit (got $COUNT entries)"
255		else
256                        echo "...error: did not expect ldapsearch success ($RC)!"
257                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
258                        exit 1
259                fi
260	;;
261	4)
262		if test x"$COUNT" != x ; then
263			echo "...bumped into server-side size limit (got $COUNT entries)"
264		else
265			echo "...error: bumped into server-side size limit, but got no entries!"
266                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
267                        exit $RC
268                fi
269	;;
270	*)
271		echo "ldapsearch failed ($RC)!"
272		test $KILLSERVERS != no && kill -HUP $KILLPIDS
273		exit $RC
274	;;
275esac
276
277SIZELIMIT=2
278echo "Testing lower than soft limit request ($SIZELIMIT) for soft limited ID..."
279$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \
280	-D 'cn=Soft Limited User,ou=People,dc=example,dc=com' \
281	'(objectClass=*)' > $SEARCHOUT 2>&1
282RC=$?
283COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
284case $RC in
285	0)
286		if test x"$COUNT" != x ; then
287			if test "$COUNT" -gt "$SIZELIMIT" ; then
288				echo "...error: got $COUNT entries instead of the requested $SIZELIMIT"
289				test $KILLSERVERS != no && kill -HUP $KILLPIDS
290				exit 1
291			fi
292			echo "...didn't bump into either requested ($SIZELIMIT) or server-side size limit (got $COUNT entries)"
293		else
294			echo "...error: did not expect ldapsearch success ($RC)!"
295			test $KILLSERVERS != no && kill -HUP $KILLPIDS
296			exit 1
297		fi
298	;;
299	4)
300		if test "x$COUNT" != "x" ; then
301			if test "x$SIZELIMIT" = "x$COUNT" ; then
302				echo "...bumped into requested ($SIZELIMIT) size limit"
303			else
304				echo "...bumped into server-side size limit ($COUNT)"
305			fi
306		else
307			echo "...error: bumped into server-side size limit, but got no entries!"
308                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
309                        exit $RC
310		fi
311	;;
312	*)
313		echo "ldapsearch failed ($RC)!"
314		test $KILLSERVERS != no && kill -HUP $KILLPIDS
315		exit $RC
316	;;
317esac
318
319SIZELIMIT=100
320echo "Testing higher than soft limit request ($SIZELIMIT) for soft limited ID..."
321$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \
322	-D 'cn=Soft Limited User,ou=People,dc=example,dc=com' \
323	'(objectClass=*)' > $SEARCHOUT 2>&1
324RC=$?
325COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
326case $RC in
327	0)
328		if test x"$COUNT" != x ; then
329			if test "$COUNT" -gt "$SIZELIMIT" ; then
330				echo "...error: got $COUNT entries instead of the requested $SIZELIMIT"
331				test $KILLSERVERS != no && kill -HUP $KILLPIDS
332				exit 1
333			fi
334			echo "...didn't bump into either requested ($SIZELIMIT) or server-side size limit (got $COUNT entries)"
335		else
336			echo "...error: did not expect ldapsearch success ($RC)!"
337			test $KILLSERVERS != no && kill -HUP $KILLPIDS
338			exit 1
339		fi
340	;;
341	4)
342		if test "x$COUNT" != "x" ; then
343			if test "x$SIZELIMIT" = "x$COUNT" ; then
344				echo "...bumped into requested ($SIZELIMIT) size limit"
345			else
346				echo "...bumped into server-side size limit ($COUNT)"
347			fi
348		else
349			echo "...error: bumped into server-side size limit, but got no entries!"
350                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
351                        exit $RC
352		fi
353	;;
354	*)
355		echo "ldapsearch failed ($RC)!"
356		test $KILLSERVERS != no && kill -HUP $KILLPIDS
357		exit $RC
358	;;
359esac
360
361SIZELIMIT=2
362echo "Testing lower than hard limit request ($SIZELIMIT) for hard limited ID..."
363$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \
364	-D 'cn=Hard Limited User,ou=People,dc=example,dc=com' \
365	'(objectClass=*)' > $SEARCHOUT 2>&1
366RC=$?
367COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
368case $RC in
369	0)
370		if test x"$COUNT" != x ; then
371			if test "$COUNT" -gt "$SIZELIMIT" ; then
372				echo "...error: got $COUNT entries instead of the requested $SIZELIMIT"
373				test $KILLSERVERS != no && kill -HUP $KILLPIDS
374				exit 1
375			fi
376			echo "...didn't bump into either requested ($SIZELIMIT) or server-side size limit (got $COUNT entries)"
377		else
378			echo "...error: did not expect ldapsearch success ($RC)!"
379			test $KILLSERVERS != no && kill -HUP $KILLPIDS
380			exit 1
381		fi
382	;;
383	4)
384		echo "...bumped into requested ($SIZELIMIT) size limit"
385	;;
386	*)
387		echo "ldapsearch failed ($RC)!"
388		test $KILLSERVERS != no && kill -HUP $KILLPIDS
389		exit $RC
390	;;
391esac
392
393SIZELIMIT=100
394echo "Testing higher than hard limit request ($SIZELIMIT) for hard limited ID..."
395$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \
396	-D 'cn=Hard Limited User,ou=People,dc=example,dc=com' \
397	'(objectClass=*)' > $SEARCHOUT 2>&1
398RC=$?
399COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
400case $RC in
401	0)
402		if test x"$COUNT" != x ; then
403			if test "$COUNT" -gt "$SIZELIMIT" ; then
404				echo "...error: got $COUNT entries instead of the requested $SIZELIMIT"
405				test $KILLSERVERS != no && kill -HUP $KILLPIDS
406				exit 1
407			fi
408			echo "...didn't bump into either requested ($SIZELIMIT) or server-side size limit (got $COUNT entries)"
409		else
410			echo "...error: did not expect ldapsearch success ($RC)!"
411			test $KILLSERVERS != no && kill -HUP $KILLPIDS
412			exit 1
413		fi
414	;;
415	4)
416		if test x"$COUNT" != x ; then
417			if test "$COUNT" = "$SIZELIMIT" ; then
418				echo "...error: bumped into requested ($SIZELIMIT) size limit"
419                		test $KILLSERVERS != no && kill -HUP $KILLPIDS
420                		exit $RC
421			else
422				echo "...got size limit $COUNT instead of requested $SIZELIMIT entries"
423			fi
424		else
425			echo "...error: bumped into server-side size limit, but got no entries!"
426                	test $KILLSERVERS != no && kill -HUP $KILLPIDS
427                	exit $RC
428		fi
429	;;
430#	11)
431#		echo "...bumped into server-side hard size administrative limit"
432#	;;
433	*)
434		echo "ldapsearch failed ($RC)!"
435		test $KILLSERVERS != no && kill -HUP $KILLPIDS
436		exit $RC
437	;;
438esac
439
440SIZELIMIT=max
441echo "Testing max limit request ($SIZELIMIT) for hard limited ID..."
442$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \
443	-D 'cn=Hard Limited User,ou=People,dc=example,dc=com' \
444	'(objectClass=*)' > $SEARCHOUT 2>&1
445RC=$?
446COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
447case $RC in
448	0)
449		if test x"$COUNT" != x ; then
450			echo "...didn't bump into either requested ($SIZELIMIT) or server-side size limit (got $COUNT entries)"
451		else
452			echo "...error: did not expect ldapsearch success ($RC)!"
453			test $KILLSERVERS != no && kill -HUP $KILLPIDS
454			exit 1
455		fi
456	;;
457	4)
458		if test x"$COUNT" != x ; then
459			echo "...bumped into requested ($SIZELIMIT=$COUNT) size limit"
460		else
461			echo "...error: bumped into server-side size limit, but got no entries!"
462                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
463                        exit $RC
464		fi
465	;;
466#	11)
467#		echo "...bumped into server-side hard size administrative limit"
468#	;;
469	*)
470		echo "ldapsearch failed ($RC)!"
471		test $KILLSERVERS != no && kill -HUP $KILLPIDS
472		exit $RC
473	;;
474esac
475
476echo "Testing lower than unchecked limit request for unchecked limited ID..."
477$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
478	-D 'cn=Unchecked Limited User,ou=People,dc=example,dc=com' \
479	'(uid=uncheckedlimited)' > $SEARCHOUT 2>&1
480RC=$?
481COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
482case $RC in
483	0)
484		if test x"$COUNT" != x ; then
485			echo "...success; didn't bump into server-side unchecked limit (got $COUNT entries)"
486		else
487			echo "...error: did not expect ldapsearch success ($RC)!"
488			test $KILLSERVERS != no && kill -HUP $KILLPIDS
489			exit 1
490		fi
491	;;
492	11)
493		echo "...error: bumped into unchecked administrative limit"
494		test $KILLSERVERS != no && kill -HUP $KILLPIDS
495		exit $RC
496	;;
497	*)
498		echo "ldapsearch failed ($RC)!"
499		test $KILLSERVERS != no && kill -HUP $KILLPIDS
500		exit $RC
501	;;
502esac
503
504if test $INDEXDB = indexdb ; then
505
506echo "Testing higher than unchecked limit requested for unchecked limited ID..."
507$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
508	-D 'cn=Unchecked Limited User,ou=People,dc=example,dc=com' \
509	'(objectClass=*)' > $SEARCHOUT 2>&1
510RC=$?
511COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
512case $RC in
513	0)
514		if test x"$COUNT" != x ; then
515			echo "...error: didn't bump into server-side unchecked limit (got $COUNT entries)"
516		else
517			echo "...error: did not expect ldapsearch success ($RC)!"
518		fi
519		test $KILLSERVERS != no && kill -HUP $KILLPIDS
520		exit 1
521	;;
522	11)
523		echo "...bumped into unchecked administrative limit"
524	;;
525	*)
526		echo "ldapsearch failed ($RC)!"
527		test $KILLSERVERS != no && kill -HUP $KILLPIDS
528		exit $RC
529	;;
530esac
531
532echo "Testing no limits requested for unchecked limited group..."
533$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
534	-D 'cn=Unchecked Limited User 2,ou=People,dc=example,dc=com' \
535	'(objectClass=*)' > $SEARCHOUT 2>&1
536RC=$?
537COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
538case $RC in
539	0)
540		if test x"$COUNT" != x ; then
541			echo "...error: didn't bump into server-side unchecked limit (got $COUNT entries)"
542		else
543			echo "...error: did not expect ldapsearch success ($RC)!"
544		fi
545		test $KILLSERVERS != no && kill -HUP $KILLPIDS
546		exit 1
547	;;
548	11)
549		echo "...bumped into unchecked administrative limit"
550	;;
551	*)
552		echo "ldapsearch failed ($RC)!"
553		test $KILLSERVERS != no && kill -HUP $KILLPIDS
554		exit $RC
555	;;
556esac
557else
558	echo "Skipping test for unchecked limit with $BACKEND backend."
559fi
560
561echo "Testing no limits requested for limited regex..."
562$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
563	-D 'cn=Foo User,ou=People,dc=example,dc=com' \
564	'(objectClass=*)' > $SEARCHOUT 2>&1
565RC=$?
566COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
567case $RC in
568	0)
569		if test x"$COUNT" != x ; then
570			echo "...didn't bump into server-side size limit (got $COUNT entries)"
571		else
572			echo "...error: did not expect ldapsearch success ($RC)!"
573			test $KILLSERVERS != no && kill -HUP $KILLPIDS
574			exit 1
575		fi
576	;;
577	4)
578		if test "x$COUNT" != "x" ; then
579			echo "...bumped into server-side size limit ($COUNT)"
580		else
581			echo "...error: bumped into server-side size limit, but got no entries!"
582			test $KILLSERVERS != no && kill -HUP $KILLPIDS
583			exit $RC
584		fi
585	;;
586	*)
587		echo "ldapsearch failed ($RC)!"
588		test $KILLSERVERS != no && kill -HUP $KILLPIDS
589		exit $RC
590	;;
591esac
592
593echo "Testing no limits requested for limited onelevel..."
594$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
595	-D 'cn=Bar User,ou=People,dc=example,dc=com' \
596	'(objectClass=*)' > $SEARCHOUT 2>&1
597RC=$?
598COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
599case $RC in
600	0)
601		if test x"$COUNT" != x ; then
602			echo "...didn't bump into server-side size limit (got $COUNT entries)"
603		else
604			echo "...error: did not expect ldapsearch success ($RC)!"
605			test $KILLSERVERS != no && kill -HUP $KILLPIDS
606			exit 1
607		fi
608	;;
609	4)
610		if test "x$COUNT" != "x" ; then
611			echo "...bumped into server-side size limit ($COUNT)"
612		else
613			echo "...error: bumped into server-side size limit, but got no entries!"
614			test $KILLSERVERS != no && kill -HUP $KILLPIDS
615			exit $RC
616		fi
617	;;
618	*)
619		echo "ldapsearch failed ($RC)!"
620		test $KILLSERVERS != no && kill -HUP $KILLPIDS
621		exit $RC
622	;;
623esac
624
625echo "Testing no limit requested for limited children..."
626$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
627	-D 'cn=Unchecked Limited Users,ou=Groups,dc=example,dc=com' \
628	'(objectClass=*)' > $SEARCHOUT 2>&1
629RC=$?
630COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
631case $RC in
632	0)
633		if test x"$COUNT" != x ; then
634			echo "...didn't bump into server-side size limit (got $COUNT entries)"
635		else
636			echo "...error: did not expect ldapsearch success ($RC)!"
637			test $KILLSERVERS != no && kill -HUP $KILLPIDS
638			exit 1
639		fi
640	;;
641	4)
642		if test "x$COUNT" != "x" ; then
643			echo "...bumped into server-side size limit ($COUNT)"
644		else
645			echo "...error: bumped into server-side size limit, but got no entries!"
646			test $KILLSERVERS != no && kill -HUP $KILLPIDS
647			exit $RC
648		fi
649	;;
650	*)
651		echo "ldapsearch failed ($RC)!"
652		test $KILLSERVERS != no && kill -HUP $KILLPIDS
653		exit $RC
654	;;
655esac
656
657echo "Testing no limit requested for limited subtree..."
658$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
659	-D 'cn=Unchecked Limited User 3,ou=Admin,dc=example,dc=com' \
660	'(objectClass=*)' > $SEARCHOUT 2>&1
661RC=$?
662COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
663case $RC in
664	0)
665		if test x"$COUNT" != x ; then
666			echo "...didn't bump into server-side size limit (got $COUNT entries)"
667		else
668			echo "...error: did not expect ldapsearch success ($RC)!"
669			test $KILLSERVERS != no && kill -HUP $KILLPIDS
670			exit 1
671		fi
672	;;
673	4)
674		if test "x$COUNT" != "x" ; then
675			echo "...bumped into server-side size limit ($COUNT)"
676		else
677			echo "...error: bumped into server-side size limit, but got no entries!"
678			test $KILLSERVERS != no && kill -HUP $KILLPIDS
679			exit $RC
680		fi
681	;;
682	*)
683		echo "ldapsearch failed ($RC)!"
684		test $KILLSERVERS != no && kill -HUP $KILLPIDS
685		exit $RC
686	;;
687esac
688
689echo "Testing no limit requested for limited users..."
690$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
691	-D 'cn=Special User,dc=example,dc=com' \
692	'(objectClass=*)' > $SEARCHOUT 2>&1
693RC=$?
694COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
695case $RC in
696	0)
697		if test x"$COUNT" != x ; then
698			echo "...didn't bump into server-side size limit (got $COUNT entries)"
699		else
700			echo "...error: did not expect ldapsearch success ($RC)!"
701			test $KILLSERVERS != no && kill -HUP $KILLPIDS
702			exit 1
703		fi
704	;;
705	4)
706		if test "x$COUNT" != "x" ; then
707			echo "...bumped into server-side size limit ($COUNT)"
708		else
709			echo "...error: bumped into server-side size limit, but got no entries!"
710			test $KILLSERVERS != no && kill -HUP $KILLPIDS
711			exit $RC
712		fi
713	;;
714	*)
715		echo "ldapsearch failed ($RC)!"
716		test $KILLSERVERS != no && kill -HUP $KILLPIDS
717		exit $RC
718	;;
719esac
720
721echo "Testing no limit requested for limited anonymous..."
722$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
723	'(objectClass=*)' > $SEARCHOUT 2>&1
724RC=$?
725COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
726case $RC in
727	0)
728		if test x"$COUNT" != x ; then
729			echo "...didn't bump into server-side size limit (got $COUNT entries)"
730		else
731			echo "...error: did not expect ldapsearch success ($RC)!"
732			test $KILLSERVERS != no && kill -HUP $KILLPIDS
733			exit 1
734		fi
735	;;
736	4)
737		if test "x$COUNT" != "x" ; then
738			echo "...bumped into server-side size limit ($COUNT)"
739		else
740			echo "...error: bumped into server-side size limit, but got no entries!"
741			test $KILLSERVERS != no && kill -HUP $KILLPIDS
742			exit $RC
743		fi
744	;;
745	*)
746		echo "ldapsearch failed ($RC)!"
747		test $KILLSERVERS != no && kill -HUP $KILLPIDS
748		exit $RC
749	;;
750esac
751
752if test $MAINDB != maindb ; then
753		# only bdb|hdb|mdb currently supports pagedResults control
754		test $KILLSERVERS != no && kill -HUP $KILLPIDS
755
756		echo ">>>>> Test succeeded"
757		exit 0
758fi
759
760if test x"$SLAPD_PAGE_SIZE" != x ; then
761	PAGESIZE="$SLAPD_PAGE_SIZE"
762	if test "$PAGESIZE" -le 0 ; then
763		test $KILLSERVERS != no && kill -HUP $KILLPIDS
764
765		echo ""
766		echo "Testing with pagedResults control disabled"
767		echo ""
768		echo ">>>>> Test succeeded"
769		exit 0
770	fi
771else
772	PAGESIZE=5
773fi
774
775echo ""
776echo "Testing regular search limits with pagedResults control (page size $PAGESIZE)"
777echo ""
778
779echo "Testing no limits requested for unlimited ID..."
780$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
781	-D 'cn=Unlimited User,ou=People,dc=example,dc=com' \
782	-E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' >$SEARCHOUT 2>&1
783RC=$?
784COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
785case $RC in
786	0)
787		if test x"$COUNT" != x ; then
788			echo "...success (got $COUNT entries)"
789		else
790                        echo "...error: did not expect ldapsearch success ($RC)!"
791                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
792                        exit 1
793                fi
794	;;
795	*)
796		echo "ldapsearch failed ($RC)!"
797		test $KILLSERVERS != no && kill -HUP $KILLPIDS
798		exit $RC
799	;;
800esac
801
802SIZELIMIT=2
803echo "Testing size limit request ($SIZELIMIT) for unlimited ID..."
804$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \
805	-D 'cn=Unlimited User,ou=People,dc=example,dc=com' \
806	-E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1
807RC=$?
808COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
809case $RC in
810	0)
811		if test x"$COUNT" != x ; then
812                        if test "$COUNT" -gt "$SIZELIMIT" ; then
813                                echo "...error: got $COUNT entries instead of the requested $SIZELIMIT"
814                                test $KILLSERVERS != no && kill -HUP $KILLPIDS
815                                exit 1
816                        fi
817                        echo "...didn't bump into the requested size limit ($SIZELIMIT; got $COUNT entries)"
818                else
819                        echo "...error: did not expect ldapsearch success ($RC)!"
820                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
821                        exit 1
822                fi
823	;;
824	4)
825		if test x"$COUNT" != x ; then
826			if test $COUNT = $SIZELIMIT ; then
827				echo "...bumped into requested size limit ($SIZELIMIT)"
828			else
829				echo "...error: got $COUNT entries while requesting $SIZELIMIT..."
830                                test $KILLSERVERS != no && kill -HUP $KILLPIDS
831                                exit $RC
832                        fi
833		else
834			echo "...error: bumped into server-side size limit, but got no entries!"
835                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
836                        exit $RC
837		fi
838	;;
839	*)
840		echo "ldapsearch failed ($RC)!"
841		test $KILLSERVERS != no && kill -HUP $KILLPIDS
842		exit $RC
843	;;
844esac
845
846TIMELIMIT=10
847echo "Testing time limit request ($TIMELIMIT s) for unlimited ID..."
848$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -l $TIMELIMIT \
849	-D 'cn=Unlimited User,ou=People,dc=example,dc=com' \
850	-E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1
851RC=$?
852COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
853case $RC in
854	0)
855		if test x"$COUNT" != x ; then
856			echo "...didn't bump into the requested time limit ($TIMELIMIT s; got $COUNT entries)"
857		else
858			echo "...error: did not expect ldapsearch success ($RC)!"
859                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
860                        exit 1
861                fi
862	;;
863	3)
864		if test x"$COUNT" = x ; then
865			COUNT=0
866		fi
867		echo "...bumped into requested time limit ($TIMELIMIT s; got $COUNT entries)"
868	;;
869	*)
870		echo "ldapsearch failed ($RC)!"
871		test $KILLSERVERS != no && kill -HUP $KILLPIDS
872		exit $RC
873	;;
874esac
875
876echo "Testing no limits requested for soft limited ID..."
877$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
878	-D 'cn=Soft Limited User,ou=People,dc=example,dc=com' \
879	-E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1
880RC=$?
881COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
882case $RC in
883	0)
884		if test x"$COUNT" != x ; then
885			echo "...didn't bump into server-side size limit (got $COUNT entries)"
886		else
887			echo "...error: did not expect ldapsearch success ($RC)!"
888                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
889                        exit 1
890		fi
891	;;
892	4)
893		if test x"$COUNT" != x ; then
894			echo "...bumped into server-side size limit (got $COUNT entries)"
895		else
896			echo "...error: bumped into server-side size limit, but got no entries!"
897                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
898                        exit $RC
899		fi
900	;;
901	*)
902		echo "ldapsearch failed ($RC)!"
903		test $KILLSERVERS != no && kill -HUP $KILLPIDS
904		exit $RC
905	;;
906esac
907
908SIZELIMIT=2
909echo "Testing lower than soft limit request ($SIZELIMIT) for soft limited ID..."
910$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \
911	-D 'cn=Soft Limited User,ou=People,dc=example,dc=com' \
912	-E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1
913RC=$?
914COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
915case $RC in
916	0)
917		if test x"$COUNT" != x ; then
918                        if test "$COUNT" -gt "$SIZELIMIT" ; then
919                                echo "...error: got $COUNT entries instead of the requested $SIZELIMIT"
920                                test $KILLSERVERS != no && kill -HUP $KILLPIDS
921                                exit 1
922                        fi
923                        echo "...didn't bump into either requested ($SIZELIMIT) or server-side size limit (got $COUNT entries)"
924                else
925                        echo "...error: did not expect ldapsearch success ($RC)!"
926                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
927                        exit 1
928                fi
929	;;
930	4)
931		if test "x$COUNT" != "x" ; then
932			if test "x$SIZELIMIT" = "x$COUNT" ; then
933				echo "...bumped into requested ($SIZELIMIT) size limit"
934			else
935				echo "...bumped into server-side size limit ($COUNT)"
936			fi
937		else
938			echo "...bumped into either requested ($SIZELIMIT) or server-side size limit"
939		fi
940	;;
941	*)
942		echo "ldapsearch failed ($RC)!"
943		test $KILLSERVERS != no && kill -HUP $KILLPIDS
944		exit $RC
945	;;
946esac
947
948SIZELIMIT=100
949echo "Testing higher than soft limit request ($SIZELIMIT) for soft limited ID..."
950$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \
951	-D 'cn=Soft Limited User,ou=People,dc=example,dc=com' \
952	-E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1
953RC=$?
954COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
955case $RC in
956	0)
957		if test x"$COUNT" != x ; then
958                        if test "$COUNT" -gt "$SIZELIMIT" ; then
959                                echo "...error: got $COUNT entries instead of the requested $SIZELIMIT"
960                                test $KILLSERVERS != no && kill -HUP $KILLPIDS
961                                exit 1
962                        fi
963                        echo "...didn't bump into either requested ($SIZELIMIT) or server-side size limit (got $COUNT entries)"
964                else
965                        echo "...error: did not expect ldapsearch success ($RC)!"
966                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
967                        exit 1
968                fi
969	;;
970	4)
971		if test "x$COUNT" != "x" ; then
972			if test "x$SIZELIMIT" = "x$COUNT" ; then
973				echo "...bumped into requested ($SIZELIMIT) size limit"
974			else
975				echo "...bumped into server-side size limit ($COUNT)"
976			fi
977		else
978			echo "...bumped into either requested ($SIZELIMIT) or server-side size limit"
979		fi
980	;;
981	*)
982		echo "ldapsearch failed ($RC)!"
983		test $KILLSERVERS != no && kill -HUP $KILLPIDS
984		exit $RC
985	;;
986esac
987
988SIZELIMIT=2
989echo "Testing lower than hard limit request ($SIZELIMIT) for hard limited ID..."
990$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \
991	-D 'cn=Hard Limited User,ou=People,dc=example,dc=com' \
992	-E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1
993RC=$?
994COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
995case $RC in
996	0)
997		if test x"$COUNT" != x ; then
998                        if test "$COUNT" -gt "$SIZELIMIT" ; then
999                                echo "...error: got $COUNT entries instead of the requested $SIZELIMIT"
1000                                test $KILLSERVERS != no && kill -HUP $KILLPIDS
1001                                exit 1
1002                        fi
1003                        echo "...didn't bump into either requested ($SIZELIMIT) or server-side size limit (got $COUNT entries)"
1004                else
1005                        echo "...error: did not expect ldapsearch success ($RC)!"
1006                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
1007                        exit 1
1008                fi
1009	;;
1010	4)
1011		if test x"$COUNT" != x ; then
1012			if test "$COUNT" = "$SIZELIMIT" ; then
1013				echo "...bumped into requested ($SIZELIMIT) size limit"
1014			else
1015				echo "...error: got size limit $SIZELIMIT but $COUNT entries"
1016                        	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1017                        	exit $RC
1018                	fi
1019		else
1020			echo "...error: bumped into server-side size limit, but got no entries!"
1021                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
1022                        exit $RC
1023                fi
1024	;;
1025	*)
1026		echo "ldapsearch failed ($RC)!"
1027		test $KILLSERVERS != no && kill -HUP $KILLPIDS
1028		exit $RC
1029	;;
1030esac
1031
1032SIZELIMIT=100
1033echo "Testing higher than hard limit request ($SIZELIMIT) for hard limited ID..."
1034$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \
1035	-D 'cn=Hard Limited User,ou=People,dc=example,dc=com' \
1036	-E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1
1037RC=$?
1038COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1039case $RC in
1040	0)
1041		if test x"$COUNT" != x ; then
1042                        if test "$COUNT" -gt "$SIZELIMIT" ; then
1043                                echo "...error: got $COUNT entries instead of the requested $SIZELIMIT"
1044                                test $KILLSERVERS != no && kill -HUP $KILLPIDS
1045                                exit 1
1046                        fi
1047                        echo "...didn't bump into either requested ($SIZELIMIT) or server-side size limit (got $COUNT entries)"
1048                else
1049                        echo "...error: did not expect ldapsearch success ($RC)!"
1050                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
1051                        exit 1
1052                fi
1053	;;
1054	4)
1055		if test x"$COUNT" != x ; then
1056			if test "$COUNT" = "$SIZELIMIT" ; then
1057				echo "...error: bumped into requested ($SIZELIMIT) size limit"
1058                		test $KILLSERVERS != no && kill -HUP $KILLPIDS
1059                		exit $RC
1060			else
1061				echo "...got size limit $COUNT instead of requested $SIZELIMIT entries"
1062			fi
1063		else
1064			echo "...error: bumped into server-side size limit, but got no entries!"
1065                	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1066                	exit $RC
1067		fi
1068	;;
1069#	11)
1070#		echo "...bumped into hard size administrative limit"
1071#	;;
1072	*)
1073		echo "ldapsearch failed ($RC)!"
1074		test $KILLSERVERS != no && kill -HUP $KILLPIDS
1075		exit $RC
1076	;;
1077esac
1078
1079SIZELIMIT=max
1080echo "Testing max limit request ($SIZELIMIT) for hard limited ID..."
1081$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \
1082	-D 'cn=Hard Limited User,ou=People,dc=example,dc=com' \
1083	-E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1
1084RC=$?
1085COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1086case $RC in
1087	0)
1088		if test x"$COUNT" != x ; then
1089                        echo "...didn't bump into either requested ($SIZELIMIT) or server-side size limit (got $COUNT entries)"
1090                else
1091                        echo "...error: did not expect ldapsearch success ($RC)!"
1092                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
1093                        exit 1
1094                fi
1095	;;
1096	4)
1097		if test x"$COUNT" != x ; then
1098			echo "...bumped into requested ($SIZELIMIT=$COUNT) size limit"
1099		else
1100			echo "...error: bumped into size limit but got no entries!"
1101			test $KILLSERVERS != no && kill -HUP $KILLPIDS
1102			exit $RC
1103		fi
1104	;;
1105#	11)
1106#		echo "...bumped into hard size administrative limit"
1107#	;;
1108	*)
1109		echo "ldapsearch failed ($RC)!"
1110		test $KILLSERVERS != no && kill -HUP $KILLPIDS
1111		exit $RC
1112	;;
1113esac
1114
1115echo "Testing lower than unchecked limit request for unchecked limited ID..."
1116$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
1117	-D 'cn=Unchecked Limited User,ou=People,dc=example,dc=com' \
1118	-E '!pr='$PAGESIZE'/noprompt' '(uid=uncheckedlimited)' > $SEARCHOUT 2>&1
1119RC=$?
1120COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1121case $RC in
1122	0)
1123		if test x"$COUNT" != x ; then
1124                        echo "...success; didn't bump into server-side unchecked limit (got $COUNT entries)"
1125                else
1126                        echo "...error: did not expect ldapsearch success ($RC)!"
1127                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
1128                        exit 1
1129                fi
1130	;;
1131#	11)
1132#		echo "...bumped into unchecked administrative limit"
1133#	;;
1134	*)
1135		echo "ldapsearch failed ($RC)!"
1136		test $KILLSERVERS != no && kill -HUP $KILLPIDS
1137		exit $RC
1138	;;
1139esac
1140
1141echo "Testing higher than unchecked limit requested for unchecked limited ID..."
1142$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
1143	-D 'cn=Unchecked Limited User,ou=People,dc=example,dc=com' \
1144	-E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1
1145RC=$?
1146COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1147case $RC in
1148	0)
1149		if test x"$COUNT" != x ; then
1150                        echo "...error: didn't bump into server-side unchecked limit (got $COUNT entries)"
1151                else
1152                        echo "...error: did not expect ldapsearch success ($RC)!"
1153                fi
1154                test $KILLSERVERS != no && kill -HUP $KILLPIDS
1155                exit 1
1156	;;
1157	11)
1158		echo "...bumped into unchecked administrative limit"
1159	;;
1160	*)
1161		echo "ldapsearch failed ($RC)!"
1162		test $KILLSERVERS != no && kill -HUP $KILLPIDS
1163		exit $RC
1164	;;
1165esac
1166
1167echo ""
1168echo "Testing specific search limits with pagedResults control"
1169echo ""
1170
1171echo "Testing no limit requested for unlimited page size ID..."
1172$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
1173	-D 'cn=Unlimited User,ou=Paged Results Users,dc=example,dc=com' \
1174	-E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1
1175RC=$?
1176COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1177case $RC in
1178	0)
1179		if test x"$COUNT" != x ; then
1180			echo "...success; didn't bump into server-side size limit (got $COUNT entries)"
1181		else
1182			echo "...error: did not expect ldapsearch success ($RC)!"
1183                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
1184                        exit 1
1185                fi
1186	;;
1187	4)
1188		if test x"$COUNT" != x ; then
1189			echo "...bumped into server-side size limit (got $COUNT entries)"
1190		else
1191			echo "...error: bumped into server-side size limit, but got no entries!"
1192                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
1193                        exit $RC
1194		fi
1195	;;
1196	*)
1197		echo "ldapsearch failed ($RC)!"
1198		test $KILLSERVERS != no && kill -HUP $KILLPIDS
1199		exit $RC
1200	;;
1201esac
1202
1203echo "Testing no limit requested for limited page size ID..."
1204$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
1205	-D 'cn=Page Size Limited User,ou=Paged Results Users,dc=example,dc=com' \
1206	-E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1
1207RC=$?
1208COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1209case $RC in
1210	0)
1211		echo "...success; didn't bump into server-side page size limit (got $COUNT entries)"
1212	;;
1213	4)
1214		echo "...bumped into page size limit ($COUNT)"
1215	;;
1216	11)
1217		echo "...bumped into page size administrative limit"
1218	;;
1219	*)
1220		echo "ldapsearch failed ($RC)!"
1221		test $KILLSERVERS != no && kill -HUP $KILLPIDS
1222		exit $RC
1223	;;
1224esac
1225
1226echo "Testing no limit requested for pagedResults disabled ID..."
1227$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
1228	-D 'cn=Paged Results Disabled User,ou=Paged Results Users,dc=example,dc=com' \
1229	-E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1
1230RC=$?
1231COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1232case $RC in
1233	0)
1234		echo "...success; didn't bump into server-side unchecked limit (got $COUNT entries)"
1235	;;
1236	4)
1237		echo "...bumped into server-side size limit ($COUNT)"
1238	;;
1239	11)
1240		echo "...bumped into pagedResults disabled administrative limit"
1241	;;
1242	*)
1243		echo "ldapsearch failed ($RC)!"
1244		test $KILLSERVERS != no && kill -HUP $KILLPIDS
1245		exit $RC
1246	;;
1247esac
1248
1249echo "Testing no limit requested for pagedResults total count limited ID..."
1250$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
1251	-D 'cn=Paged Results Limited User,ou=Paged Results Users,dc=example,dc=com' \
1252	-E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1
1253RC=$?
1254COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1255case $RC in
1256	0)
1257		echo "...success; didn't bump into server-side unchecked limit (got $COUNT entries)"
1258	;;
1259	4)
1260		echo "...bumped into server-side size limit ($COUNT)"
1261	;;
1262	11)
1263		echo "...bumped into pagedResults total count administrative limit"
1264	;;
1265	*)
1266		echo "ldapsearch failed ($RC)!"
1267		test $KILLSERVERS != no && kill -HUP $KILLPIDS
1268		exit $RC
1269	;;
1270esac
1271
1272SIZELIMIT=8
1273echo "Testing higher than hard but lower then total count limit requested for pagedResults total count limited ID..."
1274$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
1275	-D 'cn=Paged Results Limited User,ou=Paged Results Users,dc=example,dc=com' \
1276	-z $SIZELIMIT -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1
1277RC=$?
1278COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1279case $RC in
1280	0)
1281		echo "...success; didn't bump into either requested ($SIZELIMIT) or server-side unchecked limit (got $COUNT entries)"
1282	;;
1283	4)
1284		if test "x$COUNT" != "x" ; then
1285			if test "x$SIZELIMIT" = "x$COUNT" ; then
1286				echo "...bumped into requested ($SIZELIMIT) size limit"
1287			else
1288				echo "...bumped into server-side size limit ($COUNT)"
1289			fi
1290		else
1291			echo "...bumped into either requested ($SIZELIMIT) or server-side size limit"
1292		fi
1293	;;
1294	11)
1295		echo "...bumped into either hard size or pagedResults total count administrative limit"
1296	;;
1297	*)
1298		echo "ldapsearch failed ($RC)!"
1299		test $KILLSERVERS != no && kill -HUP $KILLPIDS
1300		exit $RC
1301	;;
1302esac
1303
1304SIZELIMIT=15
1305echo "Testing higher than total count limit requested for pagedResults total count limited ID..."
1306$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
1307	-D 'cn=Paged Results Limited User,ou=Paged Results Users,dc=example,dc=com' \
1308	-z $SIZELIMIT -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1
1309RC=$?
1310COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1311case $RC in
1312	0)
1313		echo "...success; didn't bump into either requested ($SIZELIMIT) or server-side unchecked limit (got $COUNT entries)"
1314	;;
1315	4)
1316		if test "x$COUNT" != "x" ; then
1317			if test "x$SIZELIMIT" = "x$COUNT" ; then
1318				echo "...bumped into requested ($SIZELIMIT) size limit"
1319			else
1320				echo "...bumped into server-side size limit ($COUNT)"
1321			fi
1322		else
1323			echo "...bumped into either requested ($SIZELIMIT) or server-side size limit"
1324		fi
1325	;;
1326	11)
1327		echo "...bumped into pagedResults total count administrative limit"
1328	;;
1329	*)
1330		echo "ldapsearch failed ($RC)!"
1331		test $KILLSERVERS != no && kill -HUP $KILLPIDS
1332		exit $RC
1333	;;
1334esac
1335
1336SIZELIMIT=max
1337echo "Testing max limit requested for pagedResults total count limited ID..."
1338$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \
1339	-D 'cn=Paged Results Limited User,ou=Paged Results Users,dc=example,dc=com' \
1340	-z $SIZELIMIT -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1
1341RC=$?
1342COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1343case $RC in
1344	0)
1345		echo "...success; didn't bump into either requested ($SIZELIMIT) or server-side unchecked limit (got $COUNT entries)"
1346	;;
1347	4)
1348		if test "x$COUNT" != "x" ; then
1349			if test "x$SIZELIMIT" = "x$COUNT" ; then
1350				echo "...bumped into requested ($SIZELIMIT) size limit"
1351			else
1352				echo "...bumped into server-side size limit ($COUNT)"
1353			fi
1354		else
1355			echo "...bumped into either requested ($SIZELIMIT) or server-side size limit"
1356		fi
1357	;;
1358	11)
1359		echo "...bumped into pagedResults total count administrative limit"
1360	;;
1361	*)
1362		echo "ldapsearch failed ($RC)!"
1363		test $KILLSERVERS != no && kill -HUP $KILLPIDS
1364		exit $RC
1365	;;
1366esac
1367
1368# ITS#4479
1369PAGESIZE=1
1370SIZELIMIT=2
1371echo "Testing size limit request ($SIZELIMIT) for unlimited ID and pagesize=$PAGESIZE..."
1372$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \
1373	-D 'cn=Unlimited User,ou=People,dc=example,dc=com' \
1374	-E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1
1375RC=$?
1376COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1377case $RC in
1378	0)
1379		if test x"$COUNT" != x ; then
1380                        if test "$COUNT" -gt "$SIZELIMIT" ; then
1381                                echo "...error: got $COUNT entries instead of the requested $SIZELIMIT"
1382                                test $KILLSERVERS != no && kill -HUP $KILLPIDS
1383                                exit 1
1384                        fi
1385                        echo "...didn't bump into the requested size limit ($SIZELIMIT; got $COUNT entries)"
1386                else
1387                        echo "...error: did not expect ldapsearch success ($RC)!"
1388                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
1389                        exit 1
1390                fi
1391	;;
1392	4)
1393		if test x"$COUNT" != x ; then
1394			if test $COUNT = $SIZELIMIT ; then
1395				echo "...bumped into requested size limit ($SIZELIMIT)"
1396			else
1397				echo "...error: got $COUNT entries while requesting $SIZELIMIT..."
1398                                test $KILLSERVERS != no && kill -HUP $KILLPIDS
1399                                exit $RC
1400                        fi
1401		else
1402			echo "...error: bumped into server-side size limit, but got no entries!"
1403                        test $KILLSERVERS != no && kill -HUP $KILLPIDS
1404                        exit $RC
1405		fi
1406	;;
1407	*)
1408		echo "ldapsearch failed ($RC)!"
1409		test $KILLSERVERS != no && kill -HUP $KILLPIDS
1410		exit $RC
1411	;;
1412esac
1413
1414test $KILLSERVERS != no && kill -HUP $KILLPIDS
1415
1416echo ">>>>> Test succeeded"
1417
1418test $KILLSERVERS != no && wait
1419
1420exit 0
1421