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>(); }
/// <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. } }