1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.server.core.jndi;
21
22
23 import org.apache.directory.server.core.DirectoryService;
24 import org.apache.directory.server.core.integ.CiRunner;
25 import static org.apache.directory.server.core.integ.IntegrationUtils.getSystemContext;
26 import static org.apache.directory.server.core.integ.IntegrationUtils.getSchemaContext;
27 import org.apache.directory.shared.ldap.constants.JndiPropertyConstants;
28 import org.apache.directory.shared.ldap.exception.LdapSizeLimitExceededException;
29 import org.apache.directory.shared.ldap.exception.LdapTimeLimitExceededException;
30 import org.apache.directory.shared.ldap.message.AliasDerefMode;
31 import static org.junit.Assert.assertEquals;
32 import static org.junit.Assert.assertTrue;
33 import static org.junit.Assert.assertFalse;
34 import static org.junit.Assert.assertNull;
35 import static org.junit.Assert.assertNotNull;
36 import static org.junit.Assert.fail;
37
38 import org.junit.Ignore;
39 import org.junit.Test;
40 import org.junit.runner.RunWith;
41
42 import javax.naming.NamingEnumeration;
43 import javax.naming.NamingException;
44 import javax.naming.directory.Attribute;
45 import javax.naming.directory.Attributes;
46 import javax.naming.directory.BasicAttribute;
47 import javax.naming.directory.BasicAttributes;
48 import javax.naming.directory.DirContext;
49 import javax.naming.directory.ModificationItem;
50 import javax.naming.directory.SearchControls;
51 import javax.naming.directory.SearchResult;
52 import javax.naming.ldap.LdapContext;
53 import java.util.HashMap;
54 import java.util.Set;
55 import java.util.HashSet;
56
57
58
59
60
61
62
63
64 @RunWith ( CiRunner.class )
65 public class SearchIT
66 {
67 private static final String RDN = "cn=Heather Nova";
68 private static final String FILTER = "(objectclass=*)";
69
70 public static DirectoryService service;
71
72
73
74
75
76
77
78 protected void createData( LdapContext sysRoot ) throws Exception
79 {
80
81
82
83 Attributes attributes = new BasicAttributes( true );
84 Attribute attribute = new BasicAttribute( "objectClass" );
85 attribute.add( "top" );
86 attribute.add( "organizationalUnit" );
87 attributes.put( attribute );
88 attributes.put( "ou", "testing00" );
89
90 DirContext ctx = sysRoot.createSubcontext( "ou=testing00", attributes );
91 assertNotNull( ctx );
92
93 ctx = ( DirContext ) sysRoot.lookup( "ou=testing00" );
94 assertNotNull( ctx );
95 attributes = ctx.getAttributes( "" );
96 assertNotNull( attributes );
97 assertEquals( "testing00", attributes.get( "ou" ).get() );
98 attribute = attributes.get( "objectClass" );
99 assertNotNull( attribute );
100 assertTrue( attribute.contains( "top" ) );
101 assertTrue( attribute.contains( "organizationalUnit" ) );
102
103
104
105
106 attributes = new BasicAttributes( true );
107 attribute = new BasicAttribute( "objectClass" );
108 attribute.add( "top" );
109 attribute.add( "organizationalUnit" );
110 attributes.put( attribute );
111 attributes.put( "ou", "testing01" );
112
113 ctx = sysRoot.createSubcontext( "ou=testing01", attributes );
114 assertNotNull( ctx );
115
116 ctx = ( DirContext ) sysRoot.lookup( "ou=testing01" );
117 assertNotNull( ctx );
118 attributes = ctx.getAttributes( "" );
119 assertNotNull( attributes );
120 assertEquals( "testing01", attributes.get( "ou" ).get() );
121 attribute = attributes.get( "objectClass" );
122 assertNotNull( attribute );
123 assertTrue( attribute.contains( "top" ) );
124 assertTrue( attribute.contains( "organizationalUnit" ) );
125
126
127
128
129 attributes = new BasicAttributes( true );
130 attribute = new BasicAttribute( "objectClass" );
131 attribute.add( "top" );
132 attribute.add( "organizationalUnit" );
133 attributes.put( attribute );
134 attributes.put( "ou", "testing02" );
135 ctx = sysRoot.createSubcontext( "ou=testing02", attributes );
136 assertNotNull( ctx );
137
138 ctx = ( DirContext ) sysRoot.lookup( "ou=testing02" );
139 assertNotNull( ctx );
140
141 attributes = ctx.getAttributes( "" );
142 assertNotNull( attributes );
143 assertEquals( "testing02", attributes.get( "ou" ).get() );
144
145 attribute = attributes.get( "objectClass" );
146 assertNotNull( attribute );
147 assertTrue( attribute.contains( "top" ) );
148 assertTrue( attribute.contains( "organizationalUnit" ) );
149
150
151
152
153 ctx = ( DirContext ) sysRoot.lookup( "ou=testing01" );
154
155 attributes = new BasicAttributes( true );
156 attribute = new BasicAttribute( "objectClass" );
157 attribute.add( "top" );
158 attribute.add( "organizationalUnit" );
159 attributes.put( attribute );
160 attributes.put( "ou", "subtest" );
161
162 ctx = ctx.createSubcontext( "ou=subtest", attributes );
163 assertNotNull( ctx );
164
165 ctx = ( DirContext ) sysRoot.lookup( "ou=subtest,ou=testing01" );
166 assertNotNull( ctx );
167
168 attributes = ctx.getAttributes( "" );
169 assertNotNull( attributes );
170 assertEquals( "subtest", attributes.get( "ou" ).get() );
171
172 attribute = attributes.get( "objectClass" );
173 assertNotNull( attribute );
174 assertTrue( attribute.contains( "top" ) );
175 assertTrue( attribute.contains( "organizationalUnit" ) );
176
177
178 Attributes heather = new BasicAttributes( true );
179 Attribute ocls = new BasicAttribute( "objectClass" );
180 ocls.add( "top" );
181 ocls.add( "person" );
182 heather.put( ocls );
183 heather.put( "cn", "Heather Nova" );
184 heather.put( "sn", "Nova" );
185 ctx = sysRoot.createSubcontext( RDN, heather );
186 assertNotNull( ctx );
187
188 ctx = ( DirContext ) sysRoot.lookup( RDN );
189 assertNotNull( ctx );
190
191
192
193
194
195
196
197 LdapContext schemaRoot = getSchemaContext( service );
198 Attributes nisAttrs = schemaRoot.getAttributes( "cn=nis" );
199 boolean isNisDisabled = false;
200 if ( nisAttrs.get( "m-disabled" ) != null )
201 {
202 isNisDisabled = ( ( String ) nisAttrs.get( "m-disabled" ).get() ).equalsIgnoreCase( "TRUE" );
203 }
204
205
206 if ( isNisDisabled )
207 {
208 Attribute disabled = new BasicAttribute( "m-disabled" );
209 ModificationItem[] mods = new ModificationItem[] {
210 new ModificationItem( DirContext.REMOVE_ATTRIBUTE, disabled ) };
211 schemaRoot.modifyAttributes( "cn=nis", mods );
212 }
213
214
215
216
217
218 addNisPosixGroup( "testGroup0", 0 );
219 addNisPosixGroup( "testGroup1", 1 );
220 addNisPosixGroup( "testGroup2", 2 );
221 addNisPosixGroup( "testGroup4", 4 );
222 addNisPosixGroup( "testGroup5", 5 );
223 }
224
225
226 private DirContext addNisPosixGroup( String name, int gid ) throws Exception
227 {
228 Attributes attrs = new BasicAttributes( "objectClass", "top", true );
229 attrs.get( "objectClass" ).add( "posixGroup" );
230 attrs.put( "cn", name );
231 attrs.put( "gidNumber", String.valueOf( gid ) );
232 return getSystemContext( service ).createSubcontext( "cn="+name+",ou=groups", attrs );
233 }
234
235
236 @Test
237 public void testSearchOneLevel() throws Exception
238 {
239 LdapContext sysRoot = getSystemContext( service );
240 createData( sysRoot );
241
242 SearchControls controls = new SearchControls();
243 controls.setSearchScope( SearchControls.ONELEVEL_SCOPE );
244 controls.setDerefLinkFlag( false );
245 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
246 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
247 HashMap<String,Attributes> map = new HashMap<String,Attributes>();
248
249 NamingEnumeration<SearchResult> list = sysRoot.search( "", "(ou=*)", controls );
250
251 while ( list.hasMore() )
252 {
253 SearchResult result = list.next();
254 map.put( result.getName(), result.getAttributes() );
255 }
256
257 assertEquals( "Expected number of results returned was incorrect!", 6, map.size() );
258 assertTrue( map.containsKey( "ou=testing00,ou=system" ) );
259 assertTrue( map.containsKey( "ou=testing01,ou=system" ) );
260 assertTrue( map.containsKey( "ou=testing02,ou=system" ) );
261 }
262
263
264 @Test
265 public void testSearchSubTreeLevel() throws Exception
266 {
267 LdapContext sysRoot = getSystemContext( service );
268 createData( sysRoot );
269
270 SearchControls controls = new SearchControls();
271 controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
272 controls.setDerefLinkFlag( false );
273 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
274 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
275
276 HashMap<String, Attributes> map = new HashMap<String, Attributes>();
277 NamingEnumeration<SearchResult> list = sysRoot.search( "", "(ou=*)", controls );
278
279 while ( list.hasMore() )
280 {
281 SearchResult result = list.next();
282 map.put( result.getName(), result.getAttributes() );
283 }
284
285 assertEquals( "Expected number of results returned was incorrect", 11, map.size() );
286 assertTrue( map.containsKey( "ou=system" ) );
287 assertTrue( map.containsKey( "ou=testing00,ou=system" ) );
288 assertTrue( map.containsKey( "ou=testing01,ou=system" ) );
289 assertTrue( map.containsKey( "ou=testing02,ou=system" ) );
290 assertTrue( map.containsKey( "ou=subtest,ou=testing01,ou=system" ) );
291 }
292
293
294 @Test
295 public void testSearchSubTreeLevelNoAttributes() throws Exception
296 {
297 LdapContext sysRoot = getSystemContext( service );
298 createData( sysRoot );
299
300 SearchControls controls = new SearchControls();
301 controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
302 controls.setDerefLinkFlag( false );
303 controls.setReturningAttributes( new String[]{ "1.1" } );
304
305 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
306 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
307
308 HashMap<String, Attributes> map = new HashMap<String, Attributes>();
309 NamingEnumeration<SearchResult> list = sysRoot.search( "", "(ou=testing02)", controls );
310
311 while ( list.hasMore() )
312 {
313 SearchResult result = list.next();
314 map.put( result.getName(), result.getAttributes() );
315 }
316
317 assertEquals( "Expected number of results returned was incorrect", 1, map.size() );
318 assertTrue( map.containsKey( "ou=testing02,ou=system" ) );
319 Attributes attrs = map.get( "ou=testing02,ou=system" );
320
321 assertEquals( 0, attrs.size() );
322 }
323
324
325 @Test
326 public void testSearchSubstringSubTreeLevel() throws Exception
327 {
328 LdapContext sysRoot = getSystemContext( service );
329 createData( sysRoot );
330
331 SearchControls controls = new SearchControls();
332 controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
333 controls.setDerefLinkFlag( false );
334 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
335 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
336
337 HashMap<String, Attributes> map = new HashMap<String, Attributes>();
338 NamingEnumeration<SearchResult> list = sysRoot.search( "", "(objectClass=organ*)", controls );
339
340 while ( list.hasMore() )
341 {
342 SearchResult result = list.next();
343 map.put( result.getName(), result.getAttributes() );
344 }
345
346
347 assertEquals( "Expected number of results returned was incorrect", 13, map.size() );
348 assertTrue( map.containsKey( "ou=system" ) );
349 assertTrue( map.containsKey( "ou=configuration,ou=system" ) );
350 assertTrue( map.containsKey( "ou=interceptors,ou=configuration,ou=system" ) );
351 assertTrue( map.containsKey( "ou=partitions,ou=configuration,ou=system" ) );
352 assertTrue( map.containsKey( "ou=services,ou=configuration,ou=system" ) );
353 assertTrue( map.containsKey( "ou=groups,ou=system" ) );
354 assertTrue( map.containsKey( "ou=testing00,ou=system" ) );
355 assertTrue( map.containsKey( "ou=testing01,ou=system" ) );
356 assertTrue( map.containsKey( "ou=subtest,ou=testing01,ou=system" ) );
357 assertTrue( map.containsKey( "ou=testing02,ou=system" ) );
358 assertTrue( map.containsKey( "ou=users,ou=system" ) );
359 assertTrue( map.containsKey( "prefNodeName=sysPrefRoot,ou=system" ) );
360 assertTrue( map.containsKey( "uid=admin,ou=system" ) );
361 }
362
363
364
365
366
367
368 @Test
369 public void testBogusAttributeInSearchFilter() throws Exception
370 {
371 boolean oldSetAllowAnnonymousAccess = service.isAllowAnonymousAccess();
372 service.setAllowAnonymousAccess( true );
373
374 LdapContext sysRoot = getSystemContext( service );
375 SearchControls cons = new SearchControls();
376 NamingEnumeration<SearchResult> e = sysRoot.search( "", "(bogusAttribute=abc123)", cons );
377 assertNotNull( e );
378
379 e = sysRoot.search( "", "(!(bogusAttribute=abc123))", cons );
380 assertNotNull( e );
381 assertFalse( e.hasMore() );
382
383 e = sysRoot.search( "", "(|(bogusAttribute=abc123)(bogusAttribute=abc123))", cons );
384 assertNotNull( e );
385 assertFalse( e.hasMore() );
386
387 e = sysRoot.search( "", "(|(bogusAttribute=abc123)(ou=abc123))", cons );
388 assertNotNull( e );
389 assertFalse( e.hasMore() );
390
391 e = sysRoot.search( "", "(OBJECTclass=*)", cons );
392 assertNotNull( e );
393 assertTrue( e.hasMore() );
394
395 e = sysRoot.search( "", "(objectclass=*)", cons );
396 assertNotNull( e );
397
398 service.setAllowAnonymousAccess( oldSetAllowAnnonymousAccess );
399 }
400
401
402 @Test
403 public void testSearchFilterArgs() throws Exception
404 {
405 LdapContext sysRoot = getSystemContext( service );
406 createData( sysRoot );
407
408 SearchControls controls = new SearchControls();
409 controls.setSearchScope( SearchControls.ONELEVEL_SCOPE );
410 controls.setDerefLinkFlag( false );
411 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
412 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
413 HashMap<String, Attributes> map = new HashMap<String, Attributes>();
414
415 NamingEnumeration<SearchResult> list = sysRoot.search( "", "(|(ou={0})(ou={1}))", new Object[]
416 { "testing00", "testing01" }, controls );
417
418 while ( list.hasMore() )
419 {
420 SearchResult result = list.next();
421 map.put( result.getName(), result.getAttributes() );
422 }
423
424 assertEquals( "Expected number of results returned was incorrect!", 2, map.size() );
425 assertTrue( map.containsKey( "ou=testing00,ou=system" ) );
426 assertTrue( map.containsKey( "ou=testing01,ou=system" ) );
427 }
428
429
430 @Test
431 @Ignore ( "TODO - fix me" )
432 public void testSearchSizeLimit() throws Exception
433 {
434 LdapContext sysRoot = getSystemContext( service );
435 createData( sysRoot );
436
437 SearchControls controls = new SearchControls();
438 controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
439 controls.setDerefLinkFlag( false );
440 controls.setCountLimit( 7 );
441 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
442 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
443
444 HashMap<String, Attributes> map = new HashMap<String, Attributes>();
445 NamingEnumeration<SearchResult> list = sysRoot.search( "", "(ou=*)", controls );
446
447 try
448 {
449 while ( list.hasMore() )
450 {
451 SearchResult result = list.next();
452 map.put( result.getName(), result.getAttributes() );
453 }
454
455 fail( "Should not get here due to a SizeLimitExceededException" );
456 }
457 catch ( LdapSizeLimitExceededException e )
458 {
459 }
460 assertEquals( "Expected number of results returned was incorrect", 7, map.size() );
461 }
462
463
464 @Test
465 @Ignore ( "TODO - fix me" )
466 public void testSearchTimeLimit() throws Exception, InterruptedException
467 {
468 LdapContext sysRoot = getSystemContext( service );
469 createData( sysRoot );
470
471 SearchControls controls = new SearchControls();
472 controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
473 controls.setDerefLinkFlag( false );
474 controls.setTimeLimit( 200 );
475 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
476 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
477
478 HashMap<String, Attributes> map = new HashMap<String, Attributes>();
479 NamingEnumeration<SearchResult> list = sysRoot.search( "", "(ou=*)", controls );
480
481 try
482 {
483 while ( list.hasMore() )
484 {
485 SearchResult result = ( SearchResult ) list.next();
486
487
488 Thread.sleep( 201 );
489 map.put( result.getName(), result.getAttributes() );
490 }
491
492 fail( "Should not get here due to a TimeLimitExceededException" );
493 }
494 catch ( LdapTimeLimitExceededException e )
495 {
496 }
497
498 assertEquals( "Expected number of results returned was incorrect", 1, map.size() );
499 }
500
501
502 @Test
503 public void testFilterExpansion0() throws Exception
504 {
505 LdapContext sysRoot = getSystemContext( service );
506 createData( sysRoot );
507
508 SearchControls controls = new SearchControls();
509 controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
510 controls.setDerefLinkFlag( false );
511 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
512 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
513
514 HashMap<String, Attributes> map = new HashMap<String, Attributes>();
515 NamingEnumeration<SearchResult> list = sysRoot.search( "", "(name=testing00)", controls );
516
517 while ( list.hasMore() )
518 {
519 SearchResult result = list.next();
520 map.put( result.getName(), result.getAttributes() );
521 }
522
523 assertEquals( "size of results", 1, map.size() );
524 assertTrue( "contains ou=testing00,ou=system", map.containsKey( "ou=testing00,ou=system" ) );
525 }
526
527
528 @Test
529 public void testFilterExpansion1() throws Exception
530 {
531 LdapContext sysRoot = getSystemContext( service );
532 createData( sysRoot );
533
534 SearchControls controls = new SearchControls();
535 controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
536 controls.setDerefLinkFlag( false );
537 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
538 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
539
540 HashMap<String, Attributes> map = new HashMap<String, Attributes>();
541 NamingEnumeration<SearchResult> list = sysRoot.search( "", "(name=*)", controls );
542
543 while ( list.hasMore() )
544 {
545 SearchResult result = list.next();
546 map.put( result.getName(), result.getAttributes() );
547 }
548
549 assertEquals( "size of results", 19, map.size() );
550 assertTrue( "contains ou=testing00,ou=system", map.containsKey( "ou=testing00,ou=system" ) );
551 assertTrue( "contains ou=testing01,ou=system", map.containsKey( "ou=testing01,ou=system" ) );
552 assertTrue( "contains ou=testing02,ou=system", map.containsKey( "ou=testing01,ou=system" ) );
553 assertTrue( "contains ou=configuration,ou=system", map.containsKey( "ou=configuration,ou=system" ) );
554 assertTrue( "contains ou=groups,ou=system", map.containsKey( "ou=groups,ou=system" ) );
555 assertTrue( "contains ou=interceptors,ou=configuration,ou=system", map.containsKey( "ou=interceptors,ou=configuration,ou=system" ) );
556 assertTrue( "contains ou=partitions,ou=configuration,ou=system", map.containsKey( "ou=partitions,ou=configuration,ou=system" ) );
557 assertTrue( "contains ou=services,ou=configuration,ou=system", map.containsKey( "ou=services,ou=configuration,ou=system" ) );
558 assertTrue( "contains ou=subtest,ou=testing01,ou=system", map.containsKey( "ou=subtest,ou=testing01,ou=system" ) );
559 assertTrue( "contains ou=system", map.containsKey( "ou=system" ) );
560 assertTrue( "contains ou=users,ou=system", map.containsKey( "ou=users,ou=system" ) );
561 assertTrue( "contains uid=admin,ou=system", map.containsKey( "uid=admin,ou=system" ) );
562 assertTrue( "contains cn=administrators,ou=groups,ou=system", map.containsKey( "cn=Administrators,ou=groups,ou=system" ) );
563 }
564
565
566 @Test
567 public void testFilterExpansion2() throws Exception
568 {
569 LdapContext sysRoot = getSystemContext( service );
570 createData( sysRoot );
571
572 SearchControls controls = new SearchControls();
573 controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
574 controls.setDerefLinkFlag( false );
575 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
576 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
577
578 HashMap<String, Attributes> map = new HashMap<String, Attributes>();
579 NamingEnumeration<SearchResult> list = sysRoot.search( "", "(|(name=testing00)(name=testing01))", controls );
580
581 while ( list.hasMore() )
582 {
583 SearchResult result = list.next();
584 map.put( result.getName(), result.getAttributes() );
585 }
586
587 assertEquals( "size of results", 2, map.size() );
588 assertTrue( "contains ou=testing00,ou=system", map.containsKey( "ou=testing00,ou=system" ) );
589 assertTrue( "contains ou=testing01,ou=system", map.containsKey( "ou=testing01,ou=system" ) );
590 }
591
592
593 @Test
594 public void testFilterExpansion4() throws Exception
595 {
596 LdapContext sysRoot = getSystemContext( service );
597 createData( sysRoot );
598
599 SearchControls controls = new SearchControls();
600 controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
601 controls.setDerefLinkFlag( false );
602 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
603 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
604
605 HashMap<String, Attributes> map = new HashMap<String, Attributes>();
606 NamingEnumeration<SearchResult> list = sysRoot.search( "", "(name=testing*)", controls );
607
608 while ( list.hasMore() )
609 {
610 SearchResult result = list.next();
611 map.put( result.getName(), result.getAttributes() );
612 }
613
614 assertEquals( "size of results", 3, map.size() );
615 assertTrue( "contains ou=testing00,ou=system", map.containsKey( "ou=testing00,ou=system" ) );
616 assertTrue( "contains ou=testing01,ou=system", map.containsKey( "ou=testing01,ou=system" ) );
617 assertTrue( "contains ou=testing02,ou=system", map.containsKey( "ou=testing01,ou=system" ) );
618 }
619
620
621 @Test
622 public void testFilterExpansion5() throws Exception
623 {
624 LdapContext sysRoot = getSystemContext( service );
625 createData( sysRoot );
626
627 SearchControls controls = new SearchControls();
628 controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
629 controls.setDerefLinkFlag( false );
630 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
631 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
632
633 HashMap<String, Attributes> map = new HashMap<String, Attributes>();
634 String filter = "(|(2.5.4.11.1=testing*)(2.5.4.54=testing*)(2.5.4.10=testing*)" +
635 "(2.5.4.6=testing*)(2.5.4.43=testing*)(2.5.4.7.1=testing*)(2.5.4.10.1=testing*)" +
636 "(2.5.4.44=testing*)(2.5.4.11=testing*)(2.5.4.4=testing*)(2.5.4.8.1=testing*)" +
637 "(2.5.4.12=testing*)(1.3.6.1.4.1.18060.0.4.1.2.3=testing*)" +
638 "(2.5.4.7=testing*)(2.5.4.3=testing*)(2.5.4.8=testing*)(2.5.4.42=testing*))";
639 NamingEnumeration<SearchResult> list = sysRoot.search( "", filter, controls );
640
641 while ( list.hasMore() )
642 {
643 SearchResult result = list.next();
644 map.put( result.getName(), result.getAttributes() );
645 }
646
647 assertEquals( "size of results", 3, map.size() );
648 assertTrue( "contains ou=testing00,ou=system", map.containsKey( "ou=testing00,ou=system" ) );
649 assertTrue( "contains ou=testing01,ou=system", map.containsKey( "ou=testing01,ou=system" ) );
650 assertTrue( "contains ou=testing02,ou=system", map.containsKey( "ou=testing01,ou=system" ) );
651 }
652
653
654 @Test
655 public void testOpAttrDenormalizationOff() throws Exception
656 {
657 LdapContext sysRoot = getSystemContext( service );
658 createData( sysRoot );
659
660 SearchControls controls = new SearchControls();
661 controls.setSearchScope( SearchControls.ONELEVEL_SCOPE );
662 controls.setDerefLinkFlag( false );
663 controls.setReturningAttributes( new String[] { "creatorsName" } );
664 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
665 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
666 HashMap<String, Attributes> map = new HashMap<String, Attributes>();
667
668 NamingEnumeration<SearchResult> list = sysRoot.search( "", "(ou=testing00)", controls );
669
670 while ( list.hasMore() )
671 {
672 SearchResult result = list.next();
673 map.put( result.getName(), result.getAttributes() );
674 }
675
676 assertEquals( "Expected number of results returned was incorrect!", 1, map.size() );
677 assertTrue( map.containsKey( "ou=testing00,ou=system" ) );
678 Attributes attrs = map.get( "ou=testing00,ou=system" );
679 assertEquals( "normalized creator's name", "0.9.2342.19200300.100.1.1=admin,2.5.4.11=system",
680 attrs.get( "creatorsName" ).get() );
681 }
682
683
684 @Test
685 public void testOpAttrDenormalizationOn() throws Exception
686 {
687 LdapContext sysRoot = getSystemContext( service );
688 createData( sysRoot );
689
690 service.setDenormalizeOpAttrsEnabled( true );
691 SearchControls controls = new SearchControls();
692 controls.setSearchScope( SearchControls.ONELEVEL_SCOPE );
693 controls.setDerefLinkFlag( false );
694 controls.setReturningAttributes( new String[] { "creatorsName" } );
695 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
696 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
697 HashMap<String, Attributes> map = new HashMap<String, Attributes>();
698
699 NamingEnumeration<SearchResult> list = sysRoot.search( "", "(ou=testing00)", controls );
700
701 while ( list.hasMore() )
702 {
703 SearchResult result = list.next();
704 map.put( result.getName(), result.getAttributes() );
705 }
706
707 assertEquals( "Expected number of results returned was incorrect!", 1, map.size() );
708 assertTrue( map.containsKey( "ou=testing00,ou=system" ) );
709 Attributes attrs = map.get( "ou=testing00,ou=system" );
710 assertEquals( "normalized creator's name", "uid=admin,ou=system",
711 attrs.get( "creatorsName" ).get() );
712 }
713
714
715
716
717
718
719
720
721
722 protected Attributes getPersonAttributes( String sn, String cn )
723 {
724 Attributes attributes = new BasicAttributes( true );
725 Attribute attribute = new BasicAttribute( "objectClass" );
726 attribute.add( "top" );
727 attribute.add( "person" );
728 attributes.put( attribute );
729 attributes.put( "cn", cn );
730 attributes.put( "sn", sn );
731
732 return attributes;
733 }
734
735
736 @Test
737 public void testBinaryAttributesInFilter() throws Exception
738 {
739 LdapContext sysRoot = getSystemContext( service );
740 createData( sysRoot );
741
742 byte[] certData = new byte[] { 0x34, 0x56, 0x4e, 0x5f };
743
744
745 Attributes attrs = getPersonAttributes( "Bush", "Kate Bush" );
746 attrs.put( "userCertificate", certData );
747
748 Attribute objectClasses = attrs.get( "objectClass" );
749 objectClasses.add( "strongAuthenticationUser" );
750
751 sysRoot.createSubcontext( "cn=Kate Bush", attrs );
752
753
754 SearchControls controls = new SearchControls();
755 controls.setSearchScope( SearchControls.ONELEVEL_SCOPE );
756 NamingEnumeration<SearchResult> enm = sysRoot.search( "", "(cn=Kate Bush)", controls );
757 assertTrue( enm.hasMore() );
758 SearchResult sr = enm.next();
759 assertNotNull( sr );
760 assertFalse( enm.hasMore() );
761 assertEquals( "cn=Kate Bush,ou=system", sr.getName() );
762
763 enm = sysRoot.search( "", "(userCertificate=\\34\\56\\4E\\5F)", controls );
764 assertTrue( enm.hasMore() );
765 sr = ( SearchResult ) enm.next();
766 assertNotNull( sr );
767 assertFalse( enm.hasMore() );
768 assertEquals( "cn=Kate Bush,ou=system", sr.getName() );
769 }
770
771
772 @Test
773 public void testSearchOperationalAttr() throws Exception
774 {
775 LdapContext sysRoot = getSystemContext( service );
776 createData( sysRoot );
777
778 SearchControls controls = new SearchControls();
779 controls.setSearchScope( SearchControls.ONELEVEL_SCOPE );
780 controls.setDerefLinkFlag( false );
781 controls.setReturningAttributes( new String[] { "+" } );
782 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
783 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
784 HashMap<String, Attributes> map = new HashMap<String, Attributes>();
785
786 NamingEnumeration<SearchResult> list = sysRoot.search( "", "(ou=testing01)", controls );
787
788 while ( list.hasMore() )
789 {
790 SearchResult result = list.next();
791 map.put( result.getName(), result.getAttributes() );
792 }
793
794 assertEquals( "Expected number of results returned was incorrect!", 1, map.size() );
795
796 Attributes attrs = map.get( "ou=testing01,ou=system" );
797
798 assertNotNull( attrs.get( "createTimestamp" ) );
799 assertNotNull( attrs.get( "creatorsName" ) );
800 assertNull( attrs.get( "objectClass" ) );
801 assertNull( attrs.get( "ou" ) );
802 }
803
804
805 @Test
806 public void testSearchUserAttr() throws Exception
807 {
808 LdapContext sysRoot = getSystemContext( service );
809 createData( sysRoot );
810
811 SearchControls controls = new SearchControls();
812 controls.setSearchScope( SearchControls.ONELEVEL_SCOPE );
813 controls.setDerefLinkFlag( false );
814 controls.setReturningAttributes( new String[] { "*" } );
815 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
816 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
817 HashMap<String, Attributes> map = new HashMap<String, Attributes>();
818
819 NamingEnumeration<SearchResult> list = sysRoot.search( "", "(ou=testing01)", controls );
820
821 while ( list.hasMore() )
822 {
823 SearchResult result = list.next();
824 map.put( result.getName(), result.getAttributes() );
825 }
826
827 assertEquals( "Expected number of results returned was incorrect!", 1, map.size() );
828
829 Attributes attrs = map.get( "ou=testing01,ou=system" );
830
831 assertNotNull( attrs.get( "objectClass" ) );
832 assertNotNull( attrs.get( "ou" ) );
833 assertNull( attrs.get( "createTimestamp" ) );
834 assertNull( attrs.get( "creatorsName" ) );
835 }
836
837
838 @Test
839 public void testSearchUserAttrAndOpAttr() throws Exception
840 {
841 LdapContext sysRoot = getSystemContext( service );
842 createData( sysRoot );
843
844 SearchControls controls = new SearchControls();
845 controls.setSearchScope( SearchControls.ONELEVEL_SCOPE );
846 controls.setDerefLinkFlag( false );
847 controls.setReturningAttributes( new String[] { "*", "creatorsName" } );
848 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
849 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
850 HashMap<String, Attributes> map = new HashMap<String, Attributes>();
851
852 NamingEnumeration<SearchResult> list = sysRoot.search( "", "(ou=testing01)", controls );
853
854 while ( list.hasMore() )
855 {
856 SearchResult result = list.next();
857 map.put( result.getName(), result.getAttributes() );
858 }
859
860 assertEquals( "Expected number of results returned was incorrect!", 1, map.size() );
861
862 Attributes attrs = map.get( "ou=testing01,ou=system" );
863
864 assertNotNull( attrs.get( "objectClass" ) );
865 assertNotNull( attrs.get( "ou" ) );
866 assertNotNull( attrs.get( "creatorsName" ) );
867 assertNull( attrs.get( "createTimestamp" ) );
868 }
869
870
871 @Test
872 public void testSearchUserAttrAndNoAttr() throws Exception
873 {
874 LdapContext sysRoot = getSystemContext( service );
875 createData( sysRoot );
876
877 SearchControls controls = new SearchControls();
878 controls.setSearchScope( SearchControls.ONELEVEL_SCOPE );
879 controls.setDerefLinkFlag( false );
880 controls.setReturningAttributes( new String[] { "1.1", "ou" } );
881 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
882 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
883 HashMap<String, Attributes> map = new HashMap<String, Attributes>();
884
885 NamingEnumeration<SearchResult> list = sysRoot.search( "", "(ou=testing01)", controls );
886
887 while ( list.hasMore() )
888 {
889 SearchResult result = list.next();
890 map.put( result.getName(), result.getAttributes() );
891 }
892
893 assertEquals( "Expected number of results returned was incorrect!", 1, map.size() );
894
895 Attributes attrs = map.get( "ou=testing01,ou=system" );
896
897 assertNull( attrs.get( "objectClass" ) );
898 assertNotNull( attrs.get( "ou" ) );
899 assertNull( attrs.get( "creatorsName" ) );
900 assertNull( attrs.get( "createTimestamp" ) );
901 }
902
903
904 @Test
905 public void testSearchNoAttr() throws Exception
906 {
907 LdapContext sysRoot = getSystemContext( service );
908 createData( sysRoot );
909
910 SearchControls controls = new SearchControls();
911 controls.setSearchScope( SearchControls.ONELEVEL_SCOPE );
912 controls.setDerefLinkFlag( false );
913 controls.setReturningAttributes( new String[] { "1.1" } );
914 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
915 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
916 HashMap<String, Attributes> map = new HashMap<String, Attributes>();
917
918 NamingEnumeration<SearchResult> list = sysRoot.search( "", "(ou=testing01)", controls );
919
920 while ( list.hasMore() )
921 {
922 SearchResult result = list.next();
923 map.put( result.getName(), result.getAttributes() );
924 }
925
926 assertEquals( "Expected number of results returned was incorrect!", 1, map.size() );
927
928 Attributes attrs = map.get( "ou=testing01,ou=system" );
929
930 assertNull( attrs.get( "objectClass" ) );
931 assertNull( attrs.get( "ou" ) );
932 assertNull( attrs.get( "creatorsName" ) );
933 assertNull( attrs.get( "createTimestamp" ) );
934 }
935
936
937 @Test
938 public void testSearchAllAttr() throws Exception
939 {
940 LdapContext sysRoot = getSystemContext( service );
941 createData( sysRoot );
942
943 SearchControls controls = new SearchControls();
944 controls.setSearchScope( SearchControls.ONELEVEL_SCOPE );
945 controls.setDerefLinkFlag( false );
946 controls.setReturningAttributes( new String[] { "+", "*" } );
947 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
948 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
949 HashMap<String, Attributes> map = new HashMap<String, Attributes>();
950
951 NamingEnumeration<SearchResult> list = sysRoot.search( "", "(ou=testing01)", controls );
952
953
954 while ( list.hasMore() )
955 {
956 SearchResult result = list.next();
957 map.put( result.getName(), result.getAttributes() );
958 }
959
960 assertEquals( "Expected number of results returned was incorrect!", 1, map.size() );
961
962 Attributes attrs = map.get( "ou=testing01,ou=system" );
963
964 assertNotNull( attrs.get( "createTimestamp" ) );
965 assertNotNull( attrs.get( "creatorsName" ) );
966 assertNotNull( attrs.get( "objectClass" ) );
967 assertNotNull( attrs.get( "ou" ) );
968 }
969
970
971
972
973
974
975 @Test
976 public void testSearchFetchNonExistingAttributeOption() throws Exception
977 {
978 LdapContext sysRoot = getSystemContext( service );
979 createData( sysRoot );
980
981 SearchControls ctls = new SearchControls();
982 ctls.setSearchScope( SearchControls.OBJECT_SCOPE );
983 ctls.setReturningAttributes( new String[]
984 { "cn", "sn;unknownOption", "badAttr" } );
985
986 NamingEnumeration<SearchResult> result = sysRoot.search( RDN, FILTER, ctls );
987
988 if ( result.hasMore() )
989 {
990 SearchResult entry = result.next();
991 Attributes attrs = entry.getAttributes();
992 Attribute cn = attrs.get( "cn" );
993
994 assertNotNull( cn );
995 assertEquals( "Heather Nova", cn.get().toString() );
996
997 Attribute sn = attrs.get( "sn" );
998 assertNull( sn );
999 }
1000 else
1001 {
1002 fail( "entry " + RDN + " not found" );
1003 }
1004
1005 result.close();
1006 }
1007
1008
1009
1010
1011
1012
1013 @Test
1014 public void testSearchFetchTwiceSameAttribute() throws Exception
1015 {
1016 LdapContext sysRoot = getSystemContext( service );
1017 createData( sysRoot );
1018
1019 SearchControls ctls = new SearchControls();
1020 ctls.setSearchScope( SearchControls.OBJECT_SCOPE );
1021 ctls.setReturningAttributes( new String[]
1022 { "cn", "cn" } );
1023
1024 NamingEnumeration<SearchResult> result = sysRoot.search( RDN, FILTER, ctls );
1025
1026 if ( result.hasMore() )
1027 {
1028 SearchResult entry = result.next();
1029 Attributes attrs = entry.getAttributes();
1030 Attribute cn = attrs.get( "cn" );
1031
1032 assertNotNull( cn );
1033 assertEquals( "Heather Nova", cn.get().toString() );
1034 }
1035 else
1036 {
1037 fail( "entry " + RDN + " not found" );
1038 }
1039
1040 result.close();
1041 }
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087 public Set<String> searchGroups( String filter, SearchControls controls ) throws Exception
1088 {
1089 if ( controls == null )
1090 {
1091 controls = new SearchControls();
1092 }
1093
1094 Set<String> results = new HashSet<String>();
1095 NamingEnumeration<SearchResult> list = getSystemContext( service ).search( "ou=groups", filter, controls );
1096
1097 while( list.hasMore() )
1098 {
1099 SearchResult result = list.next();
1100 results.add( result.getName() );
1101 }
1102
1103 return results;
1104 }
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115 public Set<String> searchGroups( String filter ) throws Exception
1116 {
1117 return searchGroups( filter, null );
1118 }
1119
1120
1121 @Test
1122 public void testSetup() throws Exception
1123 {
1124 LdapContext sysRoot = getSystemContext( service );
1125 createData( sysRoot );
1126
1127 Set<String> results = searchGroups( "(objectClass=posixGroup)" );
1128 assertTrue( results.contains( "cn=testGroup0,ou=groups,ou=system" ) );
1129 assertTrue( results.contains( "cn=testGroup1,ou=groups,ou=system" ) );
1130 assertTrue( results.contains( "cn=testGroup2,ou=groups,ou=system" ) );
1131 assertFalse( results.contains( "cn=testGroup3,ou=groups,ou=system" ) );
1132 assertTrue( results.contains( "cn=testGroup4,ou=groups,ou=system" ) );
1133 assertTrue( results.contains( "cn=testGroup5,ou=groups,ou=system" ) );
1134 }
1135
1136
1137 @Test
1138 public void testLessThanSearch() throws Exception
1139 {
1140 LdapContext sysRoot = getSystemContext( service );
1141 createData( sysRoot );
1142
1143 Set<String> results = searchGroups( "(gidNumber<=5)" );
1144 assertTrue( results.contains( "cn=testGroup0,ou=groups,ou=system" ) );
1145 assertTrue( results.contains( "cn=testGroup1,ou=groups,ou=system" ) );
1146 assertTrue( results.contains( "cn=testGroup2,ou=groups,ou=system" ) );
1147 assertFalse( results.contains( "cn=testGroup3,ou=groups,ou=system" ) );
1148 assertTrue( results.contains( "cn=testGroup4,ou=groups,ou=system" ) );
1149 assertTrue( results.contains( "cn=testGroup5,ou=groups,ou=system" ) );
1150
1151 results = searchGroups( "(gidNumber<=4)" );
1152 assertTrue( results.contains( "cn=testGroup0,ou=groups,ou=system" ) );
1153 assertTrue( results.contains( "cn=testGroup1,ou=groups,ou=system" ) );
1154 assertTrue( results.contains( "cn=testGroup2,ou=groups,ou=system" ) );
1155 assertFalse( results.contains( "cn=testGroup3,ou=groups,ou=system" ) );
1156 assertTrue( results.contains( "cn=testGroup4,ou=groups,ou=system" ) );
1157 assertFalse( results.contains( "cn=testGroup5,ou=groups,ou=system" ) );
1158
1159 results = searchGroups( "(gidNumber<=3)" );
1160 assertTrue( results.contains( "cn=testGroup0,ou=groups,ou=system" ) );
1161 assertTrue( results.contains( "cn=testGroup1,ou=groups,ou=system" ) );
1162 assertTrue( results.contains( "cn=testGroup2,ou=groups,ou=system" ) );
1163 assertFalse( results.contains( "cn=testGroup3,ou=groups,ou=system" ) );
1164 assertFalse( results.contains( "cn=testGroup4,ou=groups,ou=system" ) );
1165 assertFalse( results.contains( "cn=testGroup5,ou=groups,ou=system" ) );
1166
1167 results = searchGroups( "(gidNumber<=0)" );
1168 assertTrue( results.contains( "cn=testGroup0,ou=groups,ou=system" ) );
1169 assertFalse( results.contains( "cn=testGroup1,ou=groups,ou=system" ) );
1170 assertFalse( results.contains( "cn=testGroup2,ou=groups,ou=system" ) );
1171 assertFalse( results.contains( "cn=testGroup3,ou=groups,ou=system" ) );
1172 assertFalse( results.contains( "cn=testGroup4,ou=groups,ou=system" ) );
1173 assertFalse( results.contains( "cn=testGroup5,ou=groups,ou=system" ) );
1174
1175 results = searchGroups( "(gidNumber<=-1)" );
1176 assertFalse( results.contains( "cn=testGroup0,ou=groups,ou=system" ) );
1177 assertFalse( results.contains( "cn=testGroup1,ou=groups,ou=system" ) );
1178 assertFalse( results.contains( "cn=testGroup2,ou=groups,ou=system" ) );
1179 assertFalse( results.contains( "cn=testGroup3,ou=groups,ou=system" ) );
1180 assertFalse( results.contains( "cn=testGroup4,ou=groups,ou=system" ) );
1181 assertFalse( results.contains( "cn=testGroup5,ou=groups,ou=system" ) );
1182 }
1183
1184
1185 @Test
1186 public void testGreaterThanSearch() throws Exception
1187 {
1188 LdapContext sysRoot = getSystemContext( service );
1189 createData( sysRoot );
1190
1191 Set<String> results = searchGroups( "(gidNumber>=0)" );
1192 assertTrue( results.contains( "cn=testGroup0,ou=groups,ou=system" ) );
1193 assertTrue( results.contains( "cn=testGroup1,ou=groups,ou=system" ) );
1194 assertTrue( results.contains( "cn=testGroup2,ou=groups,ou=system" ) );
1195 assertFalse( results.contains( "cn=testGroup3,ou=groups,ou=system" ) );
1196 assertTrue( results.contains( "cn=testGroup4,ou=groups,ou=system" ) );
1197 assertTrue( results.contains( "cn=testGroup5,ou=groups,ou=system" ) );
1198
1199 results = searchGroups( "(gidNumber>=1)" );
1200 assertFalse( results.contains( "cn=testGroup0,ou=groups,ou=system" ) );
1201 assertTrue( results.contains( "cn=testGroup1,ou=groups,ou=system" ) );
1202 assertTrue( results.contains( "cn=testGroup2,ou=groups,ou=system" ) );
1203 assertFalse( results.contains( "cn=testGroup3,ou=groups,ou=system" ) );
1204 assertTrue( results.contains( "cn=testGroup4,ou=groups,ou=system" ) );
1205 assertTrue( results.contains( "cn=testGroup5,ou=groups,ou=system" ) );
1206
1207 results = searchGroups( "(gidNumber>=3)" );
1208 assertFalse( results.contains( "cn=testGroup0,ou=groups,ou=system" ) );
1209 assertFalse( results.contains( "cn=testGroup1,ou=groups,ou=system" ) );
1210 assertFalse( results.contains( "cn=testGroup2,ou=groups,ou=system" ) );
1211 assertFalse( results.contains( "cn=testGroup3,ou=groups,ou=system" ) );
1212 assertTrue( results.contains( "cn=testGroup4,ou=groups,ou=system" ) );
1213 assertTrue( results.contains( "cn=testGroup5,ou=groups,ou=system" ) );
1214
1215 results = searchGroups( "(gidNumber>=6)" );
1216 assertFalse( results.contains( "cn=testGroup0,ou=groups,ou=system" ) );
1217 assertFalse( results.contains( "cn=testGroup1,ou=groups,ou=system" ) );
1218 assertFalse( results.contains( "cn=testGroup2,ou=groups,ou=system" ) );
1219 assertFalse( results.contains( "cn=testGroup3,ou=groups,ou=system" ) );
1220 assertFalse( results.contains( "cn=testGroup4,ou=groups,ou=system" ) );
1221 assertFalse( results.contains( "cn=testGroup5,ou=groups,ou=system" ) );
1222 }
1223
1224
1225 @Test
1226 public void testNotOperator() throws Exception
1227 {
1228 LdapContext sysRoot = getSystemContext( service );
1229 createData( sysRoot );
1230
1231 Set<String> results = searchGroups( "(!(gidNumber=4))" );
1232 assertTrue( results.contains( "cn=testGroup0,ou=groups,ou=system" ) );
1233 assertTrue( results.contains( "cn=testGroup1,ou=groups,ou=system" ) );
1234 assertTrue( results.contains( "cn=testGroup2,ou=groups,ou=system" ) );
1235 assertFalse( results.contains( "cn=testGroup3,ou=groups,ou=system" ) );
1236 assertFalse( results.contains( "cn=testGroup4,ou=groups,ou=system" ) );
1237 assertTrue( results.contains( "cn=testGroup5,ou=groups,ou=system" ) );
1238 }
1239
1240
1241 @Test
1242 public void testNotOperatorSubtree() throws Exception
1243 {
1244 LdapContext sysRoot = getSystemContext( service );
1245 createData( sysRoot );
1246
1247 SearchControls controls = new SearchControls();
1248 controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
1249
1250 Set<String> results = searchGroups( "(!(gidNumber=4))", controls );
1251 assertTrue( results.contains( "cn=testGroup0,ou=groups,ou=system" ) );
1252 assertTrue( results.contains( "cn=testGroup1,ou=groups,ou=system" ) );
1253 assertTrue( results.contains( "cn=testGroup2,ou=groups,ou=system" ) );
1254 assertFalse( results.contains( "cn=testGroup3,ou=groups,ou=system" ) );
1255 assertFalse( results.contains( "cn=testGroup4,ou=groups,ou=system" ) );
1256 assertTrue( results.contains( "cn=testGroup5,ou=groups,ou=system" ) );
1257 }
1258
1259
1260 @Test
1261 public void testSearchWithEscapedCharsInFilter() throws Exception
1262 {
1263
1264 LdapContext sysRoot = getSystemContext( service );
1265
1266 Attributes vicious = new BasicAttributes( true );
1267 Attribute ocls = new BasicAttribute( "objectClass" );
1268 ocls.add( "top" );
1269 ocls.add( "person" );
1270 vicious.put( ocls );
1271 vicious.put( "cn", "Sid Vicious" );
1272 vicious.put( "sn", "Vicious" );
1273 vicious.put( "description", "(sex pistols)" );
1274 DirContext ctx = sysRoot.createSubcontext( "cn=Sid Vicious", vicious );
1275 assertNotNull( ctx );
1276
1277 ctx = ( DirContext ) sysRoot.lookup( "cn=Sid Vicious" );
1278 assertNotNull( ctx );
1279
1280 Attributes attributes = ctx.getAttributes( "" );
1281
1282 assertEquals( "(sex pistols)", attributes.get( "description" ).get() );
1283
1284
1285 SearchControls controls = new SearchControls();
1286 controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
1287 controls.setDerefLinkFlag( false );
1288 controls.setReturningAttributes( new String[] { "*" } );
1289 sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES,
1290 AliasDerefMode.NEVER_DEREF_ALIASES.getJndiValue() );
1291 HashMap<String, Attributes> map = new HashMap<String, Attributes>();
1292
1293 NamingEnumeration<SearchResult> list = sysRoot.search( "", "(description=\\28sex pistols\\29)", controls );
1294
1295 while ( list.hasMore() )
1296 {
1297 SearchResult result = list.next();
1298 map.put( result.getName(), result.getAttributes() );
1299 }
1300
1301 assertEquals( "Expected number of results returned was incorrect!", 1, map.size() );
1302
1303 Attributes attrs = map.get( "cn=Sid Vicious,ou=system" );
1304
1305 assertNotNull( attrs.get( "objectClass" ) );
1306 assertNotNull( attrs.get( "cn" ) );
1307 }
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347 }