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