1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.ldap.client.api;
21
22
23 import static org.apache.directory.api.ldap.model.message.ResultCodeEnum.processResponse;
24
25 import java.util.concurrent.atomic.AtomicInteger;
26
27 import org.apache.directory.api.ldap.codec.api.LdapApiService;
28 import org.apache.directory.api.ldap.codec.api.LdapApiServiceFactory;
29 import org.apache.directory.api.ldap.model.exception.LdapException;
30 import org.apache.directory.api.ldap.model.message.BindRequest;
31 import org.apache.directory.api.ldap.model.message.BindRequestImpl;
32 import org.apache.directory.api.ldap.model.message.BindResponse;
33 import org.apache.directory.api.ldap.model.message.Control;
34 import org.apache.directory.api.ldap.model.name.Dn;
35 import org.apache.directory.api.ldap.model.schema.SchemaManager;
36 import org.apache.directory.api.util.StringConstants;
37 import org.apache.directory.api.util.Strings;
38 import org.apache.mina.core.service.IoHandlerAdapter;
39 import org.slf4j.Logger;
40 import org.slf4j.LoggerFactory;
41
42
43
44
45
46
47
48
49 public abstract class AbstractLdapConnection extends IoHandlerAdapter implements LdapConnection
50 {
51
52 private static final Logger LOG = LoggerFactory.getLogger( AbstractLdapConnection.class );
53
54
55 protected SchemaManager schemaManager;
56
57
58 protected AtomicInteger messageId;
59
60
61 protected LdapApiService codec;
62
63
64
65
66
67 protected AbstractLdapConnection()
68 {
69 this( LdapApiServiceFactory.getSingleton() );
70 }
71
72 protected AbstractLdapConnection( LdapApiService codec )
73 {
74 messageId = new AtomicInteger( 0 );
75 this.codec = codec;
76 }
77
78
79
80
81
82 public void bind( Dn name ) throws LdapException
83 {
84 byte[] credBytes = StringConstants.EMPTY_BYTES;
85
86 BindRequest bindRequest = new BindRequestImpl();
87 bindRequest.setDn( name );
88 bindRequest.setCredentials( credBytes );
89
90 BindResponse bindResponse = bind( bindRequest );
91
92 processResponse( bindResponse );
93 }
94
95
96
97
98
99 public void bind( String name ) throws LdapException
100 {
101 LOG.debug( "Bind request : {}", name );
102
103 bind( new Dn( schemaManager, name ), null );
104 }
105
106
107
108
109
110 public void bind( String name, String credentials ) throws LdapException
111 {
112 bind( new Dn( schemaManager, name ), credentials );
113 }
114
115
116
117
118
119 public void bind( Dn name, String credentials ) throws LdapException
120 {
121 byte[] credBytes = ( credentials == null ? StringConstants.EMPTY_BYTES : Strings.getBytesUtf8( credentials ) );
122
123 BindRequest bindRequest = new BindRequestImpl();
124 bindRequest.setDn( name );
125 bindRequest.setCredentials( credBytes );
126
127 BindResponse bindResponse = bind( bindRequest );
128
129 processResponse( bindResponse );
130 }
131
132
133
134
135
136 protected BindRequest createBindRequest( String name, byte[] credentials, String saslMechanism, Control... controls )
137 throws LdapException
138 {
139
140 BindRequest bindRequest = new BindRequestImpl();
141
142
143 bindRequest.setVersion3( true );
144
145
146 bindRequest.setName( name );
147
148
149 if ( Strings.isEmpty( saslMechanism ) )
150 {
151
152 bindRequest.setSimple( true );
153 bindRequest.setCredentials( credentials );
154 }
155 else
156 {
157
158 bindRequest.setSimple( false );
159 bindRequest.setCredentials( credentials );
160 bindRequest.setSaslMechanism( saslMechanism );
161 }
162
163
164 if ( ( controls != null ) && ( controls.length != 0 ) )
165 {
166 bindRequest.addAllControls( controls );
167 }
168
169 return bindRequest;
170 }
171 }