1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package davmail.http;
20
21 import davmail.Settings;
22 import org.apache.log4j.Logger;
23
24 import javax.security.auth.login.AppConfigurationEntry;
25 import javax.security.auth.login.Configuration;
26 import java.util.HashMap;
27
28
29
30
31
32
33
34
35
36
37
38
39 public class KerberosLoginConfiguration extends Configuration {
40 protected static final Logger LOGGER = Logger.getLogger(KerberosLoginConfiguration.class);
41 protected static final AppConfigurationEntry[] CLIENT_LOGIN_MODULE;
42 protected static final AppConfigurationEntry[] SERVER_LOGIN_MODULE;
43
44 static {
45 HashMap<String, String> clientLoginModuleOptions = new HashMap<>();
46 if (LOGGER.isDebugEnabled()) {
47 clientLoginModuleOptions.put("debug", "true");
48 }
49
50 clientLoginModuleOptions.put("useTicketCache", "true");
51 clientLoginModuleOptions.put("renewTGT", "true");
52
53 String krb5ccName = System.getenv().get("KRB5CCNAME");
54 if (krb5ccName != null && !krb5ccName.isEmpty()) {
55 clientLoginModuleOptions.put("ticketCache", krb5ccName);
56 } else if (Settings.isLinux()) {
57 LOGGER.warn("KRB5CCNAME environment variable not set, this may cause Kerberos authentication to fail if default_ccache_name is set to KEYRING");
58 }
59
60 CLIENT_LOGIN_MODULE = new AppConfigurationEntry[]{new AppConfigurationEntry(
61 "com.sun.security.auth.module.Krb5LoginModule",
62 AppConfigurationEntry.LoginModuleControlFlag.REQUIRED,
63 clientLoginModuleOptions)};
64
65 HashMap<String, String> serverLoginModuleOptions = new HashMap<>();
66 if (LOGGER.isDebugEnabled()) {
67 serverLoginModuleOptions.put("debug", "true");
68 }
69
70 serverLoginModuleOptions.put("isInitiator", "false");
71 serverLoginModuleOptions.put("useKeyTab", "false");
72 serverLoginModuleOptions.put("storeKey", "true");
73 SERVER_LOGIN_MODULE = new AppConfigurationEntry[]{new AppConfigurationEntry(
74 "com.sun.security.auth.module.Krb5LoginModule",
75 AppConfigurationEntry.LoginModuleControlFlag.REQUIRED,
76 serverLoginModuleOptions)};
77 }
78
79 @Override
80 public AppConfigurationEntry[] getAppConfigurationEntry(String name) {
81 if ("spnego-client".equals(name)) {
82 return CLIENT_LOGIN_MODULE;
83 } else if ("spnego-server".equals(name)) {
84 return SERVER_LOGIN_MODULE;
85 } else {
86 return null;
87 }
88 }
89
90 @Override
91 public void refresh() {
92
93 }
94 }