/// <exception cref="System.Exception"/> private void InitKDCServer() { string orgName = conf.GetProperty(OrgName); string orgDomain = conf.GetProperty(OrgDomain); string bindAddress = conf.GetProperty(KdcBindAddress); IDictionary <string, string> map = new Dictionary <string, string>(); map["0"] = orgName.ToLower(Extensions.GetEnglishCulture()); map["1"] = orgDomain.ToLower(Extensions.GetEnglishCulture()); map["2"] = orgName.ToUpper(Extensions.GetEnglishCulture()); map["3"] = orgDomain.ToUpper(Extensions.GetEnglishCulture()); map["4"] = bindAddress; ClassLoader cl = Thread.CurrentThread().GetContextClassLoader(); InputStream is1 = cl.GetResourceAsStream("minikdc.ldiff"); SchemaManager schemaManager = ds.GetSchemaManager(); LdifReader reader = null; try { string content = StrSubstitutor.Replace(IOUtils.ToString(is1), map); reader = new LdifReader(new StringReader(content)); foreach (LdifEntry ldifEntry in reader) { ds.GetAdminSession().Add(new DefaultEntry(schemaManager, ldifEntry.GetEntry())); } } finally { IOUtils.CloseQuietly(reader); IOUtils.CloseQuietly(is1); } KerberosConfig kerberosConfig = new KerberosConfig(); kerberosConfig.SetMaximumRenewableLifetime(long.Parse(conf.GetProperty(MaxRenewableLifetime ))); kerberosConfig.SetMaximumTicketLifetime(long.Parse(conf.GetProperty(MaxTicketLifetime ))); kerberosConfig.SetSearchBaseDn(string.Format("dc=%s,dc=%s", orgName, orgDomain)); kerberosConfig.SetPaEncTimestampRequired(false); //kdc = new KdcServer(kerberosConfig); kdc = new KdcServer(); kdc.SetDirectoryService(ds); // transport string transport = conf.GetProperty(Transport); if (transport.Trim().Equals("TCP")) { kdc.AddTransports(new TcpTransport(bindAddress, port, 3, 50)); } else { if (transport.Trim().Equals("UDP")) { kdc.AddTransports(new UdpTransport(port)); } else { throw new ArgumentException("Invalid transport: " + transport); } } kdc.SetServiceName(conf.GetProperty(Instance)); kdc.Start(); StringBuilder sb = new StringBuilder(); InputStream is2 = cl.GetResourceAsStream("minikdc-krb5.conf"); BufferedReader r = null; try { r = new BufferedReader(new InputStreamReader(is2, Charsets.Utf8)); string line = r.ReadLine(); while (line != null) { sb.Append(line).Append("{3}"); line = r.ReadLine(); } } finally { IOUtils.CloseQuietly(r); IOUtils.CloseQuietly(is2); } krb5conf = new FilePath(workDir, "krb5.conf").GetAbsoluteFile(); FileUtils.WriteStringToFile(krb5conf, MessageFormat.Format(sb.ToString(), GetRealm (), GetHost(), Extensions.ToString(GetPort()), Runtime.GetProperty("line.separator" ))); Runtime.SetProperty(JavaSecurityKrb5Conf, krb5conf.GetAbsolutePath()); Runtime.SetProperty(SunSecurityKrb5Debug, conf.GetProperty(Debug, "false")); // refresh the config Type classRef; if (Runtime.GetProperty("java.vendor").Contains("IBM")) { classRef = Runtime.GetType("com.ibm.security.krb5.internal.Config"); } else { classRef = Runtime.GetType("sun.security.krb5.Config"); } MethodInfo refreshMethod = classRef.GetMethod("refresh", new Type[0]); refreshMethod.Invoke(classRef, new object[0]); Log.Info("MiniKdc listening at port: {}", GetPort()); Log.Info("MiniKdc setting JVM krb5.conf to: {}", krb5conf.GetAbsolutePath()); }