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.ldap.handlers.bind.ntlm;
21
22
23 import org.apache.directory.server.ldap.LdapSession;
24 import org.apache.directory.server.ldap.handlers.bind.AbstractMechanismHandler;
25 import org.apache.directory.server.ldap.handlers.bind.SaslConstants;
26 import org.apache.directory.shared.ldap.message.BindRequest;
27
28 import javax.security.sasl.SaslServer;
29
30
31
32
33
34
35
36
37
38
39
40 public class NtlmMechanismHandler extends AbstractMechanismHandler
41 {
42 private String providerFqcn;
43 private NtlmProvider provider;
44
45
46 public void setNtlmProvider( NtlmProvider provider )
47 {
48 this.provider = provider;
49 }
50
51
52 public void setNtlmProviderFqcn( String fqcnProvider )
53 {
54 this.providerFqcn = fqcnProvider;
55 }
56
57
58 public SaslServer handleMechanism( LdapSession ldapSession, BindRequest bindRequest ) throws Exception
59 {
60 SaslServer ss = ( SaslServer ) ldapSession.getSaslProperty( SaslConstants.SASL_SERVER );
61
62 if ( ss == null )
63 {
64 if ( provider == null )
65 {
66 initProvider();
67 }
68
69 ss = new NtlmSaslServer( provider, bindRequest, ldapSession );
70 ldapSession.putSaslProperty( SaslConstants.SASL_SERVER, ss );
71 }
72
73 return ss;
74 }
75
76
77 private void initProvider() throws Exception
78 {
79 provider = ( NtlmProvider ) Class.forName( providerFqcn ).newInstance();
80 }
81
82
83
84
85
86 public void init( LdapSession ldapSession )
87 {
88
89 String saslHost = ldapSession.getLdapServer().getSaslHost();
90 ldapSession.putSaslProperty( SaslConstants.SASL_HOST, saslHost );
91 }
92
93
94
95
96
97
98
99 public void cleanup( LdapSession ldapSession )
100 {
101 ldapSession.removeSaslProperty( SaslConstants.SASL_HOST );
102 ldapSession.removeSaslProperty( SaslConstants.SASL_USER_BASE_DN );
103 ldapSession.removeSaslProperty( SaslConstants.SASL_MECH );
104 ldapSession.removeSaslProperty( SaslConstants.SASL_PROPS );
105 ldapSession.removeSaslProperty( SaslConstants.SASL_AUTHENT_USER );
106 }
107 }