public void LdifReaderConstructorTest() { LdifReader target = new LdifReader(@"c:\temp\testinput.ldif"); target.OnAttributeValue += delegate(object sender, AttributeEventArgs args) { Console.WriteLine("Attr name {0}, value {1}", args.Name, args.Value); if (args.Value != null && args.Value is byte[]) { Console.WriteLine(" ---> " + ((byte[])args.Value).Length); } }; target.OnBeginEntry += delegate(object sender, DnEventArgs args) { Console.WriteLine("Begin: {0}", args.DistinguishedName); }; target.OnEndEntry += delegate(object sender, DnEventArgs args) { Console.WriteLine("End: {0}", args.DistinguishedName); }; int i = 0; while (target.Read() && i++ < 200) { // Do stuff! } Assert.Inconclusive("TODO: Implement code to verify target"); }
private static void Main() { // Open and parse an ASCII encoded file. Use 1252 when reading Microsoft's ldifde.exe output. using (TextReader textReader = new StreamReader("input.ldif", Encoding.GetEncoding(20127), false)) { foreach (IChangeRecord changeRecord in LdifReader.Parse(textReader)) { if (changeRecord is ChangeAdd changeAdd) { Console.WriteLine($"Adding {changeAdd.DistinguishedName}"); foreach (LdifAttribute attribute in changeAdd) { Console.WriteLine($" * {attribute.AttributeType}"); foreach (object value in attribute) { Console.WriteLine($" - {value}"); } } } else if (changeRecord is ChangeDelete changeDelete) { Console.WriteLine($"Deleting {changeDelete.DistinguishedName}"); } else if (changeRecord is ChangeModDn changeModDn) { string[] components = Constants.DistinguishedNameRegex.Split(changeModDn.DistinguishedName); if (components.Length < 2) { throw new InvalidOperationException( $"Invalid distinguished name found for {changeModDn.DistinguishedName}."); } // Only the newsuperior field is optional. string newDistinguishedName = changeModDn.NewSuperior == null ? $"{changeModDn.NewRdn},{changeModDn.DistinguishedName.Substring(components[0].Length + 1)}" : $"{changeModDn.NewRdn},{changeModDn.NewSuperior}"; Console.WriteLine($"Renaming {changeModDn.DistinguishedName}"); Console.WriteLine($" * New DN: {newDistinguishedName}."); Console.WriteLine($" * Delete old rdn: {changeModDn.DeleteOldRdn}."); } else if (changeRecord is ChangeModify changeModify) { Console.WriteLine($"Modifying {changeModify.DistinguishedName}"); foreach (ModSpec modSpec in changeModify.ModSpecs) { switch (modSpec.ModSpecType) { case ModSpecType.Add: Console.WriteLine($" * Adding the following values to {modSpec.AttributeType}:"); foreach (object value in modSpec) { Console.WriteLine($" - {value}"); } break; case ModSpecType.Delete: if (modSpec.Count == 0) { Console.WriteLine($" * Deleting all values from {modSpec.AttributeType}."); } else { Console.WriteLine($" * Deleting the following values from {modSpec.AttributeType}:"); foreach (object value in modSpec) { Console.WriteLine($" - {value}"); } } break; case ModSpecType.Replace: Console.WriteLine($" * Replacing all values from {modSpec.AttributeType}:"); foreach (object value in modSpec) { Console.WriteLine($" - {value}"); } break; default: throw new InvalidOperationException( $"Unknown mod-spec type: {modSpec.ModSpecType}."); } } } else { throw new InvalidOperationException( $"Unknown change record type: {changeRecord.GetType().BaseType}."); } } } }
/// <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()); }