]> git.sur5r.net Git - openldap/blob - tests/scripts/test025-limits
Happy New Year!
[openldap] / tests / scripts / test025-limits
1 #! /bin/sh
2 # $OpenLDAP$
3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 ##
5 ## Copyright 1998-2017 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
18 echo "running defines.sh"
19 . $SRCDIR/scripts/defines.sh
20
21 if test $BACKEND = null; then
22         echo "Limits irrelevant to $BACKEND backend, test skipped"
23         exit 0
24 fi
25
26 mkdir -p $TESTDIR $DBDIR1
27
28 echo "Running slapadd to build slapd database..."
29 . $CONFFILTER $BACKEND $MONITORDB < $LIMITSCONF > $ADDCONF
30 $SLAPADD -f $ADDCONF -l $LDIFLIMITS
31 RC=$?
32 if test $RC != 0 ; then
33         echo "slapadd failed ($RC)!"
34         exit $RC
35 fi
36
37 echo "Running slapindex to index slapd database..."
38 . $CONFFILTER $BACKEND $MONITORDB < $LIMITSCONF > $CONF1
39 $SLAPINDEX -f $CONF1
40 RC=$?
41 if test $RC != 0 ; then
42         echo "warning: slapindex failed ($RC)"
43         echo "  assuming no indexing support"
44 fi
45
46 echo "Starting slapd on TCP/IP port $PORT1..."
47 $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
48 PID=$!
49 if test $WAIT != 0 ; then
50     echo PID $PID
51     read foo
52 fi
53 KILLPIDS="$PID"
54
55 sleep 1
56
57 echo "Testing slapd searching..."
58 for 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
67 done
68
69 if test $RC != 0 ; then
70         echo "ldapsearch failed ($RC)!"
71         test $KILLSERVERS != no && kill -HUP $KILLPIDS
72         exit $RC
73 fi
74
75 cat /dev/null > $SEARCHOUT
76
77 echo ""
78 echo "Testing regular search limits"
79 echo ""
80
81 echo "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
85 RC=$?
86 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
87 case $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         ;;
102 esac
103
104 echo "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
108 RC=$?
109 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
110 case $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         ;;
125 esac
126
127 SIZELIMIT=4
128 echo "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
132 RC=$?
133 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
134 case $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         ;;
169 esac
170
171 SIZELIMIT=2
172 echo "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
176 RC=$?
177 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
178 case $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         ;;
213 esac
214
215 TIMELIMIT=10
216 echo "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
220 RC=$?
221 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
222 case $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         ;;
243 esac
244
245 echo "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
249 RC=$?
250 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
251 case $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         ;;
275 esac
276
277 SIZELIMIT=2
278 echo "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
282 RC=$?
283 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
284 case $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         ;;
317 esac
318
319 SIZELIMIT=100
320 echo "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
324 RC=$?
325 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
326 case $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         ;;
359 esac
360
361 SIZELIMIT=2
362 echo "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
366 RC=$?
367 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
368 case $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         ;;
391 esac
392
393 SIZELIMIT=100
394 echo "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
398 RC=$?
399 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
400 case $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         ;;
438 esac
439
440 SIZELIMIT=max
441 echo "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
445 RC=$?
446 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
447 case $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         ;;
474 esac
475
476 echo "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
480 RC=$?
481 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
482 case $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         ;;
502 esac
503
504 if test $INDEXDB = indexdb ; then
505
506 echo "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
510 RC=$?
511 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
512 case $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         ;;
530 esac
531
532 echo "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
536 RC=$?
537 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
538 case $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         ;;
556 esac
557 else
558         echo "Skipping test for unchecked limit with $BACKEND backend."
559 fi
560
561 echo "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
565 RC=$?
566 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
567 case $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         ;;
591 esac
592
593 echo "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
597 RC=$?
598 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
599 case $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         ;;
623 esac
624
625 echo "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
629 RC=$?
630 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
631 case $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         ;;
655 esac
656
657 echo "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
661 RC=$?
662 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
663 case $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         ;;
687 esac
688
689 echo "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
693 RC=$?
694 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
695 case $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         ;;
719 esac
720
721 echo "Testing no limit requested for limited anonymous..."
722 $LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
723         '(objectClass=*)' > $SEARCHOUT 2>&1
724 RC=$?
725 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
726 case $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         ;;
750 esac
751
752 if 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
758 fi
759
760 if 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
771 else
772         PAGESIZE=5
773 fi
774
775 echo ""
776 echo "Testing regular search limits with pagedResults control (page size $PAGESIZE)"
777 echo ""
778
779 echo "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
783 RC=$?
784 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
785 case $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         ;;
800 esac
801
802 SIZELIMIT=2
803 echo "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
807 RC=$?
808 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
809 case $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         ;;
844 esac
845
846 TIMELIMIT=10
847 echo "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
851 RC=$?
852 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
853 case $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         ;;
874 esac
875
876 echo "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
880 RC=$?
881 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
882 case $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         ;;
906 esac
907
908 SIZELIMIT=2
909 echo "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
913 RC=$?
914 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
915 case $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         ;;
946 esac
947
948 SIZELIMIT=100
949 echo "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
953 RC=$?
954 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
955 case $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         ;;
986 esac
987
988 SIZELIMIT=2
989 echo "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
993 RC=$?
994 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
995 case $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         ;;
1030 esac
1031
1032 SIZELIMIT=100
1033 echo "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
1037 RC=$?
1038 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1039 case $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         ;;
1077 esac
1078
1079 SIZELIMIT=max
1080 echo "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
1084 RC=$?
1085 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1086 case $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         ;;
1113 esac
1114
1115 echo "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
1119 RC=$?
1120 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1121 case $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         ;;
1139 esac
1140
1141 echo "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
1145 RC=$?
1146 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1147 case $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         ;;
1165 esac
1166
1167 echo ""
1168 echo "Testing specific search limits with pagedResults control"
1169 echo ""
1170
1171 echo "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
1175 RC=$?
1176 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1177 case $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         ;;
1201 esac
1202
1203 echo "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
1207 RC=$?
1208 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1209 case $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         ;;
1224 esac
1225
1226 echo "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
1230 RC=$?
1231 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1232 case $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         ;;
1247 esac
1248
1249 echo "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
1253 RC=$?
1254 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1255 case $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         ;;
1270 esac
1271
1272 SIZELIMIT=8
1273 echo "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
1277 RC=$?
1278 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1279 case $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         ;;
1302 esac
1303
1304 SIZELIMIT=15
1305 echo "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
1309 RC=$?
1310 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1311 case $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         ;;
1334 esac
1335
1336 SIZELIMIT=max
1337 echo "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
1341 RC=$?
1342 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1343 case $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         ;;
1366 esac
1367
1368 # ITS#4479
1369 PAGESIZE=1
1370 SIZELIMIT=2
1371 echo "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
1375 RC=$?
1376 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT`
1377 case $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         ;;
1412 esac
1413
1414 test $KILLSERVERS != no && kill -HUP $KILLPIDS
1415
1416 echo ">>>>> Test succeeded"
1417
1418 test $KILLSERVERS != no && wait
1419
1420 exit 0