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
27 import static org.junit.Assert.assertEquals;
28 import static org.junit.Assert.assertTrue;
29 import org.junit.Test;
30 import org.junit.runner.RunWith;
31
32 import javax.naming.Context;
33 import javax.naming.NamingEnumeration;
34 import javax.naming.NamingException;
35 import javax.naming.directory.Attribute;
36 import javax.naming.directory.Attributes;
37 import javax.naming.directory.BasicAttribute;
38 import javax.naming.directory.BasicAttributes;
39 import javax.naming.directory.DirContext;
40 import javax.naming.directory.InitialDirContext;
41 import javax.naming.directory.SearchControls;
42 import javax.naming.directory.SearchResult;
43 import javax.naming.ldap.LdapContext;
44 import java.util.Hashtable;
45
46
47
48
49
50
51
52
53 @RunWith ( CiRunner.class )
54 public class DIRSERVER169IT
55 {
56 public static DirectoryService service;
57
58
59
60
61
62
63
64 protected void createData() throws Exception
65 {
66 LdapContext sysRoot = getSystemContext( service );
67
68 Attributes people = new BasicAttributes( true );
69 Attribute attribute = new BasicAttribute( "objectClass" );
70 attribute.add( "top" );
71 attribute.add( "organizationalUnit" );
72 people.put( attribute );
73 people.put( "ou", "people" );
74 sysRoot.createSubcontext( "ou=people", people );
75
76 Attributes user = new BasicAttributes( "uid", "bob", true );
77 user.put( "cn", "Bob Hamilton" );
78 user.put( "userPassword", "bobspassword" );
79
80 Attribute objectClass = new BasicAttribute( "objectClass" );
81 user.put( objectClass );
82 objectClass.add( "top" );
83 objectClass.add( "person" );
84 objectClass.add( "organizationalPerson" );
85 objectClass.add( "inetOrgPerson" );
86 user.put( "sn", "Hamilton" );
87
88 sysRoot.createSubcontext( "uid=bob,ou=people", user );
89 }
90
91
92 @Test
93 public void testSearchResultNameIsRelativeToSearchContext() throws Exception
94 {
95
96 createData();
97
98 LdapContext sysRoot = getSystemContext( service );
99
100 Hashtable<String,Object> env = new Hashtable<String,Object>();
101 env.put( DirectoryService.JNDI_KEY, service );
102 env.put( Context.INITIAL_CONTEXT_FACTORY, CoreContextFactory.class.getName() );
103 env.put( Context.PROVIDER_URL, "ou=system" );
104
105 DirContext ctx = new InitialDirContext( env );
106 SearchControls ctls = new SearchControls();
107 String searchBase = "ou=people";
108
109 NamingEnumeration<SearchResult> results = ctx.search( searchBase, "(uid=bob)", ctls );
110 assertTrue( results.hasMore() );
111 SearchResult searchResult = results.next();
112
113 StringBuffer userDn = new StringBuffer();
114 userDn.append( searchResult.getName() );
115
116
117
118 if ( searchResult.isRelative() )
119 {
120 if ( searchBase.length() > 0 )
121 {
122 userDn.append( "," );
123 userDn.append( searchBase );
124 }
125 userDn.append( "," );
126 userDn.append( ctx.getNameInNamespace() );
127 }
128
129 assertEquals( "uid=bob,ou=people," + sysRoot.getNameInNamespace(), userDn.toString() );
130 }
131
132
133
134
135
136
137
138
139 @Test
140 public void testPasswordComparisonSucceeds() throws Exception
141 {
142
143 createData();
144
145 Hashtable<String,Object> env = new Hashtable<String,Object>();
146 env.put( DirectoryService.JNDI_KEY, service );
147 env.put( Context.INITIAL_CONTEXT_FACTORY, CoreContextFactory.class.getName() );
148 env.put( Context.PROVIDER_URL, "ou=system" );
149
150 DirContext ctx = new InitialDirContext( env );
151 SearchControls ctls = new SearchControls();
152 ctls.setReturningAttributes( new String[0] );
153 ctls.setSearchScope( SearchControls.OBJECT_SCOPE );
154
155 String filter = "(userPassword={0})";
156 NamingEnumeration<SearchResult> results =
157 ctx.search( "uid=bob,ou=people", filter, new Object[] { "bobspassword" }, ctls );
158
159
160 assertTrue( results.hasMore() );
161 }
162 }