Ejemplo n.º 1
0
        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");
        }
Ejemplo n.º 2
0
        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}.");
                    }
                }
            }
        }
Ejemplo n.º 3
0
        /// <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());
        }