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.cramMD5;
21
22
23 import org.apache.directory.server.core.CoreSession;
24 import org.apache.directory.server.ldap.LdapSession;
25 import org.apache.directory.server.ldap.handlers.bind.AbstractMechanismHandler;
26 import org.apache.directory.server.ldap.handlers.bind.SaslConstants;
27 import org.apache.directory.shared.ldap.constants.SupportedSaslMechanisms;
28 import org.apache.directory.shared.ldap.message.BindRequest;
29
30 import javax.security.auth.callback.CallbackHandler;
31 import javax.security.sasl.Sasl;
32 import javax.security.sasl.SaslServer;
33 import java.util.HashMap;
34 import java.util.Map;
35
36
37
38
39
40
41
42
43
44 public class CramMd5MechanismHandler extends AbstractMechanismHandler
45 {
46 public SaslServer handleMechanism( LdapSession ldapSession, BindRequest bindRequest ) throws Exception
47 {
48 SaslServer ss = (SaslServer)ldapSession.getSaslProperty( SaslConstants.SASL_SERVER );
49
50
51 if ( ss == null )
52 {
53 String saslHost = ldapSession.getLdapServer().getSaslHost();
54 String userBaseDn = ldapSession.getLdapServer().getSearchBaseDn();
55 ldapSession.putSaslProperty( SaslConstants.SASL_HOST, saslHost );
56 ldapSession.putSaslProperty( SaslConstants.SASL_USER_BASE_DN, userBaseDn );
57 Map<String, String> saslProps = new HashMap<String, String>();
58
59 CoreSession adminSession = ldapSession.getLdapServer().getDirectoryService().getAdminSession();
60
61 CallbackHandler callbackHandler = new CramMd5CallbackHandler( ldapSession, adminSession, bindRequest );
62
63 ss = Sasl.createSaslServer( SupportedSaslMechanisms.CRAM_MD5, SaslConstants.LDAP_PROTOCOL, saslHost, saslProps, callbackHandler );
64 ldapSession.putSaslProperty( SaslConstants.SASL_SERVER, ss );
65 }
66
67 return ss;
68 }
69
70
71
72
73
74 public void init( LdapSession ldapSession )
75 {
76
77 String saslHost = ldapSession.getLdapServer().getSaslHost();
78 ldapSession.putSaslProperty( SaslConstants.SASL_HOST, saslHost );
79 }
80
81
82
83
84
85
86
87 public void cleanup( LdapSession ldapSession )
88 {
89 ldapSession.clearSaslProperties();
90 }
91
92 }