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