예제 #1
0
        public RootDseInfo(LdapEntry rootDseEntry)
        {
            var otherAttributes = new Dictionary <string, IReadOnlyList <string> >();

            foreach (LdapAttribute attr in rootDseEntry.GetAttributeSet())
            {
                switch (attr.Name)
                {
                case "serverName":
                    ServerName = attr.StringValue;
                    break;

                case "defaultNamingContext":
                    DefaultNamingContext = attr.StringValue;
                    break;

                case "supportedSASLMechanisms":
                    SupportedSaslMechanisms = attr.StringValueArray;
                    break;

                case "namingContexts":
                    NamingContexts = attr.StringValueArray;
                    break;

                case "supportedCapabilities":
                    SupportedCapabilities = attr.StringValueArray;
                    break;

                case "supportedControl":
                    SupportedControls = attr.StringValueArray;
                    break;

                case "supportedExtension":
                    SupportedExtensions = attr.StringValueArray;
                    break;

                case "supportedLDAPPolicies":
                    SupportedLDAPPolicies = attr.StringValueArray;
                    break;

                default:
                    otherAttributes[attr.Name] = attr.StringValueArray;
                    break;
                }
            }

            OtherAttributes = otherAttributes;

            // Don't want any of those properties be null
            ServerName              = ServerName ?? "";
            DefaultNamingContext    = DefaultNamingContext ?? "";
            NamingContexts          = NamingContexts ?? Array.Empty <string>();
            SupportedSaslMechanisms = SupportedSaslMechanisms ?? Array.Empty <string>();
            SupportedCapabilities   = SupportedCapabilities ?? Array.Empty <string>();
            SupportedControls       = SupportedControls ?? Array.Empty <string>();
            SupportedExtensions     = SupportedExtensions ?? Array.Empty <string>();
            SupportedLDAPPolicies   = SupportedLDAPPolicies ?? Array.Empty <string>();
        }
예제 #2
0
        /// <summary>
        ///     Build the attribuite list from an LdapEntry.
        /// </summary>
        /// <param name="entry">
        ///     The LdapEntry associated with this add request.
        /// </param>
        private static RfcAttributeList MakeRfcAttrList(LdapEntry entry)
        {
            // convert Java-API LdapEntry to RFC2251 AttributeList
            var attrSet  = entry.GetAttributeSet();
            var attrList = new RfcAttributeList(attrSet.Count);
            var itr      = attrSet.GetEnumerator();

            while (itr.MoveNext())
            {
                var attr     = (LdapAttribute)itr.Current;
                var vals     = new Asn1SetOf(attr.Size());
                var attrEnum = attr.ByteValues;
                while (attrEnum.MoveNext())
                {
                    vals.Add(new RfcAttributeValue((byte[])attrEnum.Current));
                }

                attrList.Add(new RfcAttributeTypeAndValues(new RfcAttributeDescription(attr.Name), vals));
            }

            return(attrList);
        }
        /// <summary>
        ///     Constructs an LdapSchema object from attributes of an LdapEntry.
        ///     The object is empty if the entry parameter contains no schema
        ///     attributes.  The recognized schema attributes are the following:.
        ///     <pre>
        ///         <code>
        /// "attributeTypes", "objectClasses", "ldapSyntaxes",
        /// "nameForms", "dITContentRules", "dITStructureRules",
        /// "matchingRules","matchingRuleUse"
        /// </code>
        ///     </pre>
        /// </summary>
        /// <param name="ent">
        ///     An LdapEntry containing schema information.
        /// </param>
        public LdapSchema(LdapEntry ent)
            : base(ent.Dn, ent.GetAttributeSet())
        {
            _nameTable = new Hashtable[8];
            _idTable   = new Hashtable[8];

            // reset all definitions
            for (var i = 0; i < SchemaTypeNames.Length; i++)
            {
                _idTable[i]   = new Hashtable();
                _nameTable[i] = new Hashtable();
            }

            var itr = GetAttributeSet().GetEnumerator();

            while (itr.MoveNext())
            {
                var    attr = (LdapAttribute)itr.Current;
                string valueRenamed, attrName = attr.Name;
                var    enumString = attr.StringValues;

                if (attrName.EqualsOrdinalCI(SchemaTypeNames[ObjectClass]))
                {
                    LdapObjectClassSchema classSchema;
                    while (enumString.MoveNext())
                    {
                        valueRenamed = (string)enumString.Current;
                        try
                        {
                            classSchema = new LdapObjectClassSchema(valueRenamed);
                        }
                        catch (Exception e)
                        {
                            Logger.Log.LogWarning("Exception swallowed", e);
                            continue; // Error parsing: do not add this definition
                        }

                        AddElement(ObjectClass, classSchema);
                    }
                }
                else if (attrName.EqualsOrdinalCI(SchemaTypeNames[Attribute]))
                {
                    LdapAttributeSchema attrSchema;
                    while (enumString.MoveNext())
                    {
                        valueRenamed = (string)enumString.Current;
                        try
                        {
                            attrSchema = new LdapAttributeSchema(valueRenamed);
                        }
                        catch (Exception e)
                        {
                            Logger.Log.LogWarning("Exception swallowed", e);
                            continue; // Error parsing: do not add this definition
                        }

                        AddElement(Attribute, attrSchema);
                    }
                }
                else if (attrName.EqualsOrdinalCI(SchemaTypeNames[Syntax]))
                {
                    LdapSyntaxSchema syntaxSchema;
                    while (enumString.MoveNext())
                    {
                        valueRenamed = (string)enumString.Current;
                        syntaxSchema = new LdapSyntaxSchema(valueRenamed);
                        AddElement(Syntax, syntaxSchema);
                    }
                }
                else if (attrName.EqualsOrdinalCI(SchemaTypeNames[Matching]))
                {
                    LdapMatchingRuleSchema matchingRuleSchema;
                    while (enumString.MoveNext())
                    {
                        valueRenamed       = (string)enumString.Current;
                        matchingRuleSchema = new LdapMatchingRuleSchema(valueRenamed, null);
                        AddElement(Matching, matchingRuleSchema);
                    }
                }
                else if (attrName.EqualsOrdinalCI(SchemaTypeNames[MatchingUse]))
                {
                    LdapMatchingRuleUseSchema matchingRuleUseSchema;
                    while (enumString.MoveNext())
                    {
                        valueRenamed          = (string)enumString.Current;
                        matchingRuleUseSchema = new LdapMatchingRuleUseSchema(valueRenamed);
                        AddElement(MatchingUse, matchingRuleUseSchema);
                    }
                }
                else if (attrName.EqualsOrdinalCI(SchemaTypeNames[Ditcontent]))
                {
                    LdapDitContentRuleSchema dItContentRuleSchema;
                    while (enumString.MoveNext())
                    {
                        valueRenamed         = (string)enumString.Current;
                        dItContentRuleSchema = new LdapDitContentRuleSchema(valueRenamed);
                        AddElement(Ditcontent, dItContentRuleSchema);
                    }
                }
                else if (attrName.EqualsOrdinalCI(SchemaTypeNames[Ditstructure]))
                {
                    LdapDitStructureRuleSchema dItStructureRuleSchema;
                    while (enumString.MoveNext())
                    {
                        valueRenamed           = (string)enumString.Current;
                        dItStructureRuleSchema = new LdapDitStructureRuleSchema(valueRenamed);
                        AddElement(Ditstructure, dItStructureRuleSchema);
                    }
                }
                else if (attrName.EqualsOrdinalCI(SchemaTypeNames[NameForm]))
                {
                    LdapNameFormSchema nameFormSchema;
                    while (enumString.MoveNext())
                    {
                        valueRenamed   = (string)enumString.Current;
                        nameFormSchema = new LdapNameFormSchema(valueRenamed);
                        AddElement(NameForm, nameFormSchema);
                    }
                }

                // All non schema attributes are ignored.
            }
        }