public SchemaParser(System.String aString) { InitBlock(); int index; if ((index = aString.IndexOf((System.Char) '\\')) != - 1) { /* * Unless we escape the slash, StreamTokenizer will interpret the * single slash and convert it assuming octal values. * Two successive back slashes are intrepreted as one backslash. */ System.Text.StringBuilder newString = new System.Text.StringBuilder(aString.Substring(0, (index) - (0))); for (int i = index; i < aString.Length; i++) { newString.Append(aString[i]); if (aString[i] == '\\') { newString.Append('\\'); } } rawString = newString.ToString(); } else { rawString = aString; } SchemaTokenCreator st2 = new SchemaTokenCreator(new System.IO.StringReader(rawString)); st2.OrdinaryCharacter('.'); st2.OrdinaryCharacters('0', '9'); st2.OrdinaryCharacter('{'); st2.OrdinaryCharacter('}'); st2.OrdinaryCharacter('_'); st2.OrdinaryCharacter(';'); st2.WordCharacters('.', '9'); st2.WordCharacters('{', '}'); st2.WordCharacters('_', '_'); st2.WordCharacters(';', ';'); //First parse out the OID try { System.String currName; if ((int)TokenTypes.EOF != st2.nextToken()) { if (st2.lastttype == '(') { if ((int)TokenTypes.WORD == st2.nextToken()) { id = st2.StringValue; } while ((int)TokenTypes.EOF != st2.nextToken()) { if (st2.lastttype == (int)TokenTypes.WORD) { if (st2.StringValue.ToUpper().Equals("NAME".ToUpper())) { if (st2.nextToken() == '\'') { names = new System.String[1]; names[0] = st2.StringValue; } else { if (st2.lastttype == '(') { System.Collections.ArrayList nameList = new System.Collections.ArrayList(); while (st2.nextToken() == '\'') { if ((System.Object) st2.StringValue != null) { nameList.Add(st2.StringValue); } } if (nameList.Count > 0) { names = new System.String[nameList.Count]; SupportClass.ArrayListSupport.ToArray(nameList, names); } } } continue; } if (st2.StringValue.ToUpper().Equals("DESC".ToUpper())) { if (st2.nextToken() == '\'') { description = st2.StringValue; } continue; } if (st2.StringValue.ToUpper().Equals("SYNTAX".ToUpper())) { result = st2.nextToken(); if ((result == (int)TokenTypes.WORD) || (result == '\'')) //Test for non-standard schema { syntax = st2.StringValue; } continue; } if (st2.StringValue.ToUpper().Equals("EQUALITY".ToUpper())) { if (st2.nextToken() == (int)TokenTypes.WORD) { equality = st2.StringValue; } continue; } if (st2.StringValue.ToUpper().Equals("ORDERING".ToUpper())) { if (st2.nextToken() == (int)TokenTypes.WORD) { ordering = st2.StringValue; } continue; } if (st2.StringValue.ToUpper().Equals("SUBSTR".ToUpper())) { if (st2.nextToken() == (int)TokenTypes.WORD) { substring = st2.StringValue; } continue; } if (st2.StringValue.ToUpper().Equals("FORM".ToUpper())) { if (st2.nextToken() == (int)TokenTypes.WORD) { nameForm = st2.StringValue; } continue; } if (st2.StringValue.ToUpper().Equals("OC".ToUpper())) { if (st2.nextToken() == (int)TokenTypes.WORD) { objectClass = st2.StringValue; } continue; } if (st2.StringValue.ToUpper().Equals("SUP".ToUpper())) { System.Collections.ArrayList values = new System.Collections.ArrayList(); st2.nextToken(); if (st2.lastttype == '(') { st2.nextToken(); while (st2.lastttype != ')') { if (st2.lastttype != '$') { values.Add(st2.StringValue); } st2.nextToken(); } } else { values.Add(st2.StringValue); superior = st2.StringValue; } if (values.Count > 0) { superiors = new System.String[values.Count]; SupportClass.ArrayListSupport.ToArray(values, superiors); } continue; } if (st2.StringValue.ToUpper().Equals("SINGLE-VALUE".ToUpper())) { single = true; continue; } if (st2.StringValue.ToUpper().Equals("OBSOLETE".ToUpper())) { obsolete = true; continue; } if (st2.StringValue.ToUpper().Equals("COLLECTIVE".ToUpper())) { collective = true; continue; } if (st2.StringValue.ToUpper().Equals("NO-USER-MODIFICATION".ToUpper())) { userMod = false; continue; } if (st2.StringValue.ToUpper().Equals("MUST".ToUpper())) { System.Collections.ArrayList values = new System.Collections.ArrayList(); st2.nextToken(); if (st2.lastttype == '(') { st2.nextToken(); while (st2.lastttype != ')') { if (st2.lastttype != '$') { values.Add(st2.StringValue); } st2.nextToken(); } } else { values.Add(st2.StringValue); } if (values.Count > 0) { required = new System.String[values.Count]; SupportClass.ArrayListSupport.ToArray(values, required); } continue; } if (st2.StringValue.ToUpper().Equals("MAY".ToUpper())) { System.Collections.ArrayList values = new System.Collections.ArrayList(); st2.nextToken(); if (st2.lastttype == '(') { st2.nextToken(); while (st2.lastttype != ')') { if (st2.lastttype != '$') { values.Add(st2.StringValue); } st2.nextToken(); } } else { values.Add(st2.StringValue); } if (values.Count > 0) { optional = new System.String[values.Count]; SupportClass.ArrayListSupport.ToArray(values, optional); } continue; } if (st2.StringValue.ToUpper().Equals("NOT".ToUpper())) { System.Collections.ArrayList values = new System.Collections.ArrayList(); st2.nextToken(); if (st2.lastttype == '(') { st2.nextToken(); while (st2.lastttype != ')') { if (st2.lastttype != '$') { values.Add(st2.StringValue); } st2.nextToken(); } } else { values.Add(st2.StringValue); } if (values.Count > 0) { precluded = new System.String[values.Count]; SupportClass.ArrayListSupport.ToArray(values, precluded); } continue; } if (st2.StringValue.ToUpper().Equals("AUX".ToUpper())) { System.Collections.ArrayList values = new System.Collections.ArrayList(); st2.nextToken(); if (st2.lastttype == '(') { st2.nextToken(); while (st2.lastttype != ')') { if (st2.lastttype != '$') { values.Add(st2.StringValue); } st2.nextToken(); } } else { values.Add(st2.StringValue); } if (values.Count > 0) { auxiliary = new System.String[values.Count]; SupportClass.ArrayListSupport.ToArray(values, auxiliary); } continue; } if (st2.StringValue.ToUpper().Equals("ABSTRACT".ToUpper())) { type = LdapObjectClassSchema.ABSTRACT; continue; } if (st2.StringValue.ToUpper().Equals("STRUCTURAL".ToUpper())) { type = LdapObjectClassSchema.STRUCTURAL; continue; } if (st2.StringValue.ToUpper().Equals("AUXILIARY".ToUpper())) { type = LdapObjectClassSchema.AUXILIARY; continue; } if (st2.StringValue.ToUpper().Equals("USAGE".ToUpper())) { if (st2.nextToken() == (int)TokenTypes.WORD) { currName = st2.StringValue; if (currName.ToUpper().Equals("directoryOperation".ToUpper())) { usage = LdapAttributeSchema.DIRECTORY_OPERATION; } else if (currName.ToUpper().Equals("distributedOperation".ToUpper())) { usage = LdapAttributeSchema.DISTRIBUTED_OPERATION; } else if (currName.ToUpper().Equals("dSAOperation".ToUpper())) { usage = LdapAttributeSchema.DSA_OPERATION; } else if (currName.ToUpper().Equals("userApplications".ToUpper())) { usage = LdapAttributeSchema.USER_APPLICATIONS; } } continue; } if (st2.StringValue.ToUpper().Equals("APPLIES".ToUpper())) { System.Collections.ArrayList values = new System.Collections.ArrayList(); st2.nextToken(); if (st2.lastttype == '(') { st2.nextToken(); while (st2.lastttype != ')') { if (st2.lastttype != '$') { values.Add(st2.StringValue); } st2.nextToken(); } } else { values.Add(st2.StringValue); } if (values.Count > 0) { applies = new System.String[values.Count]; SupportClass.ArrayListSupport.ToArray(values, applies); } continue; } currName = st2.StringValue; AttributeQualifier q = parseQualifier(st2, currName); if (q != null) { qualifiers.Add(q); } continue; } } } } } catch (System.IO.IOException e) { throw e; } }
public SchemaParser(string aString) { InitBlock(); int index; if ((index = aString.IndexOf('\\')) != -1) { /* * Unless we escape the slash, StreamTokenizer will interpret the * single slash and convert it assuming octal values. * Two successive back slashes are intrepreted as one backslash. */ StringBuilder newString = new StringBuilder(aString.Substring(0, (index) - (0))); for (int i = index; i < aString.Length; i++) { newString.Append(aString[i]); if (aString[i] == '\\') { newString.Append('\\'); } } rawString = newString.ToString(); } else { rawString = aString; } SchemaTokenCreator st2 = new SchemaTokenCreator(new StringReader(rawString)); st2.OrdinaryCharacter('.'); st2.OrdinaryCharacters('0', '9'); st2.OrdinaryCharacter('{'); st2.OrdinaryCharacter('}'); st2.OrdinaryCharacter('_'); st2.OrdinaryCharacter(';'); st2.WordCharacters('.', '9'); st2.WordCharacters('{', '}'); st2.WordCharacters('_', '_'); st2.WordCharacters(';', ';'); //First parse out the OID try { string currName; if ((int)TokenTypes.EOF != st2.nextToken()) { if (st2.lastttype == '(') { if ((int)TokenTypes.WORD == st2.nextToken()) { id = st2.StringValue; } while ((int)TokenTypes.EOF != st2.nextToken()) { if (st2.lastttype == (int)TokenTypes.WORD) { if (st2.StringValue.ToUpper().Equals("NAME".ToUpper())) { if (st2.nextToken() == '\'') { names = new string[1]; names[0] = st2.StringValue; } else { if (st2.lastttype == '(') { ArrayList nameList = new ArrayList(); while (st2.nextToken() == '\'') { if (st2.StringValue != null) { nameList.Add(st2.StringValue); } } if (nameList.Count > 0) { names = new string[nameList.Count]; SupportClass.ArrayListSupport.ToArray(nameList, names); } } } continue; } if (st2.StringValue.ToUpper().Equals("DESC".ToUpper())) { if (st2.nextToken() == '\'') { description = st2.StringValue; } continue; } if (st2.StringValue.ToUpper().Equals("SYNTAX".ToUpper())) { result = st2.nextToken(); if ((result == (int)TokenTypes.WORD) || (result == '\'')) //Test for non-standard schema { syntax = st2.StringValue; } continue; } if (st2.StringValue.ToUpper().Equals("EQUALITY".ToUpper())) { if (st2.nextToken() == (int)TokenTypes.WORD) { equality = st2.StringValue; } continue; } if (st2.StringValue.ToUpper().Equals("ORDERING".ToUpper())) { if (st2.nextToken() == (int)TokenTypes.WORD) { ordering = st2.StringValue; } continue; } if (st2.StringValue.ToUpper().Equals("SUBSTR".ToUpper())) { if (st2.nextToken() == (int)TokenTypes.WORD) { substring = st2.StringValue; } continue; } if (st2.StringValue.ToUpper().Equals("FORM".ToUpper())) { if (st2.nextToken() == (int)TokenTypes.WORD) { nameForm = st2.StringValue; } continue; } if (st2.StringValue.ToUpper().Equals("OC".ToUpper())) { if (st2.nextToken() == (int)TokenTypes.WORD) { objectClass = st2.StringValue; } continue; } if (st2.StringValue.ToUpper().Equals("SUP".ToUpper())) { ArrayList values = new ArrayList(); st2.nextToken(); if (st2.lastttype == '(') { st2.nextToken(); while (st2.lastttype != ')') { if (st2.lastttype != '$') { values.Add(st2.StringValue); } st2.nextToken(); } } else { values.Add(st2.StringValue); superior = st2.StringValue; } if (values.Count > 0) { superiors = new string[values.Count]; SupportClass.ArrayListSupport.ToArray(values, superiors); } continue; } if (st2.StringValue.ToUpper().Equals("SINGLE-VALUE".ToUpper())) { single = true; continue; } if (st2.StringValue.ToUpper().Equals("OBSOLETE".ToUpper())) { obsolete = true; continue; } if (st2.StringValue.ToUpper().Equals("COLLECTIVE".ToUpper())) { collective = true; continue; } if (st2.StringValue.ToUpper().Equals("NO-USER-MODIFICATION".ToUpper())) { userMod = false; continue; } if (st2.StringValue.ToUpper().Equals("MUST".ToUpper())) { ArrayList values = new ArrayList(); st2.nextToken(); if (st2.lastttype == '(') { st2.nextToken(); while (st2.lastttype != ')') { if (st2.lastttype != '$') { values.Add(st2.StringValue); } st2.nextToken(); } } else { values.Add(st2.StringValue); } if (values.Count > 0) { required = new string[values.Count]; SupportClass.ArrayListSupport.ToArray(values, required); } continue; } if (st2.StringValue.ToUpper().Equals("MAY".ToUpper())) { ArrayList values = new ArrayList(); st2.nextToken(); if (st2.lastttype == '(') { st2.nextToken(); while (st2.lastttype != ')') { if (st2.lastttype != '$') { values.Add(st2.StringValue); } st2.nextToken(); } } else { values.Add(st2.StringValue); } if (values.Count > 0) { optional = new string[values.Count]; SupportClass.ArrayListSupport.ToArray(values, optional); } continue; } if (st2.StringValue.ToUpper().Equals("NOT".ToUpper())) { ArrayList values = new ArrayList(); st2.nextToken(); if (st2.lastttype == '(') { st2.nextToken(); while (st2.lastttype != ')') { if (st2.lastttype != '$') { values.Add(st2.StringValue); } st2.nextToken(); } } else { values.Add(st2.StringValue); } if (values.Count > 0) { precluded = new string[values.Count]; SupportClass.ArrayListSupport.ToArray(values, precluded); } continue; } if (st2.StringValue.ToUpper().Equals("AUX".ToUpper())) { ArrayList values = new ArrayList(); st2.nextToken(); if (st2.lastttype == '(') { st2.nextToken(); while (st2.lastttype != ')') { if (st2.lastttype != '$') { values.Add(st2.StringValue); } st2.nextToken(); } } else { values.Add(st2.StringValue); } if (values.Count > 0) { auxiliary = new string[values.Count]; SupportClass.ArrayListSupport.ToArray(values, auxiliary); } continue; } if (st2.StringValue.ToUpper().Equals("ABSTRACT".ToUpper())) { type = LdapObjectClassSchema.ABSTRACT; continue; } if (st2.StringValue.ToUpper().Equals("STRUCTURAL".ToUpper())) { type = LdapObjectClassSchema.STRUCTURAL; continue; } if (st2.StringValue.ToUpper().Equals("AUXILIARY".ToUpper())) { type = LdapObjectClassSchema.AUXILIARY; continue; } if (st2.StringValue.ToUpper().Equals("USAGE".ToUpper())) { if (st2.nextToken() == (int)TokenTypes.WORD) { currName = st2.StringValue; if (currName.ToUpper().Equals("directoryOperation".ToUpper())) { usage = LdapAttributeSchema.DIRECTORY_OPERATION; } else if (currName.ToUpper().Equals("distributedOperation".ToUpper())) { usage = LdapAttributeSchema.DISTRIBUTED_OPERATION; } else if (currName.ToUpper().Equals("dSAOperation".ToUpper())) { usage = LdapAttributeSchema.DSA_OPERATION; } else if (currName.ToUpper().Equals("userApplications".ToUpper())) { usage = LdapAttributeSchema.USER_APPLICATIONS; } } continue; } if (st2.StringValue.ToUpper().Equals("APPLIES".ToUpper())) { ArrayList values = new ArrayList(); st2.nextToken(); if (st2.lastttype == '(') { st2.nextToken(); while (st2.lastttype != ')') { if (st2.lastttype != '$') { values.Add(st2.StringValue); } st2.nextToken(); } } else { values.Add(st2.StringValue); } if (values.Count > 0) { applies = new string[values.Count]; SupportClass.ArrayListSupport.ToArray(values, applies); } continue; } currName = st2.StringValue; AttributeQualifier q = parseQualifier(st2, currName); if (q != null) { qualifiers.Add(q); } continue; } } } } } catch (IOException e) { throw e; } }
public SchemaParser(string aString) { Usage = LdapAttributeSchema.UserApplications; int index; if ((index = aString.IndexOf('\\')) != -1) { /* * Unless we escape the slash, StreamTokenizer will interpret the * single slash and convert it assuming octal values. * Two successive back slashes are intrepreted as one backslash. */ var newString = new StringBuilder(aString.Substring(0, index - 0)); for (var i = index; i < aString.Length; i++) { newString.Append(aString[i]); if (aString[i] == '\\') { newString.Append('\\'); } } RawString = newString.ToString(); } else { RawString = aString; } var st2 = new SchemaTokenCreator(new StringReader(RawString)); st2.OrdinaryCharacter('.'); st2.OrdinaryCharacters('0', '9'); st2.OrdinaryCharacter('{'); st2.OrdinaryCharacter('}'); st2.OrdinaryCharacter('_'); st2.OrdinaryCharacter(';'); st2.WordCharacters('.', '9'); st2.WordCharacters('{', '}'); st2.WordCharacters('_', '_'); st2.WordCharacters(';', ';'); // First parse out the OID string currName; if (st2.NextToken() != (int)TokenTypes.Eof) { if (st2.LastType == '(') { if (st2.NextToken() == (int)TokenTypes.Word) { Id = st2.StringValue; } while (st2.NextToken() != (int)TokenTypes.Eof) { if (st2.LastType == (int)TokenTypes.Word) { if (st2.StringValue.EqualsOrdinalCI("NAME")) { if (st2.NextToken() == '\'') { Names = new string[1]; Names[0] = st2.StringValue; } else { if (st2.LastType == '(') { var nameList = new List <string>(); while (st2.NextToken() == '\'') { if (st2.StringValue != null) { nameList.Add(st2.StringValue); } } if (nameList.Count > 0) { Names = nameList.ToArray(); } } } continue; } if (st2.StringValue.EqualsOrdinalCI("DESC")) { if (st2.NextToken() == '\'') { Description = st2.StringValue; } continue; } if (st2.StringValue.EqualsOrdinalCI("SYNTAX")) { _result = st2.NextToken(); // Test for non-standard schema if (_result == (int)TokenTypes.Word || _result == '\'') { Syntax = st2.StringValue; } continue; } if (st2.StringValue.EqualsOrdinalCI("EQUALITY")) { if (st2.NextToken() == (int)TokenTypes.Word) { Equality = st2.StringValue; } continue; } if (st2.StringValue.EqualsOrdinalCI("ORDERING")) { if (st2.NextToken() == (int)TokenTypes.Word) { Ordering = st2.StringValue; } continue; } if (st2.StringValue.EqualsOrdinalCI("SUBSTR")) { if (st2.NextToken() == (int)TokenTypes.Word) { Substring = st2.StringValue; } continue; } if (st2.StringValue.EqualsOrdinalCI("FORM")) { if (st2.NextToken() == (int)TokenTypes.Word) { NameForm = st2.StringValue; } continue; } if (st2.StringValue.EqualsOrdinalCI("OC")) { if (st2.NextToken() == (int)TokenTypes.Word) { _objectClass = st2.StringValue; } continue; } if (st2.StringValue.EqualsOrdinalCI("SUP")) { var values = new List <string>(); st2.NextToken(); if (st2.LastType == '(') { st2.NextToken(); while (st2.LastType != ')') { if (st2.LastType != '$') { values.Add(st2.StringValue); } st2.NextToken(); } } else { values.Add(st2.StringValue); Superior = st2.StringValue; } if (values.Count > 0) { Superiors = values.ToArray(); } continue; } if (st2.StringValue.EqualsOrdinalCI("SINGLE-VALUE")) { Single = true; continue; } if (st2.StringValue.EqualsOrdinalCI("OBSOLETE")) { Obsolete = true; continue; } if (st2.StringValue.EqualsOrdinalCI("COLLECTIVE")) { Collective = true; continue; } if (st2.StringValue.EqualsOrdinalCI("NO-USER-MODIFICATION")) { UserMod = false; continue; } if (st2.StringValue.EqualsOrdinalCI("MUST")) { var values = new List <string>(); st2.NextToken(); if (st2.LastType == '(') { st2.NextToken(); while (st2.LastType != ')') { if (st2.LastType != '$') { values.Add(st2.StringValue); } st2.NextToken(); } } else { values.Add(st2.StringValue); } if (values.Count > 0) { Required = values.ToArray(); } continue; } if (st2.StringValue.EqualsOrdinalCI("MAY")) { var values = new List <string>(); st2.NextToken(); if (st2.LastType == '(') { st2.NextToken(); while (st2.LastType != ')') { if (st2.LastType != '$') { values.Add(st2.StringValue); } st2.NextToken(); } } else { values.Add(st2.StringValue); } if (values.Count > 0) { Optional = values.ToArray(); } continue; } if (st2.StringValue.EqualsOrdinalCI("NOT")) { var values = new List <string>(); st2.NextToken(); if (st2.LastType == '(') { st2.NextToken(); while (st2.LastType != ')') { if (st2.LastType != '$') { values.Add(st2.StringValue); } st2.NextToken(); } } else { values.Add(st2.StringValue); } if (values.Count > 0) { Precluded = values.ToArray(); } continue; } if (st2.StringValue.EqualsOrdinalCI("AUX")) { var values = new List <string>(); st2.NextToken(); if (st2.LastType == '(') { st2.NextToken(); while (st2.LastType != ')') { if (st2.LastType != '$') { values.Add(st2.StringValue); } st2.NextToken(); } } else { values.Add(st2.StringValue); } if (values.Count > 0) { Auxiliary = values.ToArray(); } continue; } if (st2.StringValue.EqualsOrdinalCI("ABSTRACT")) { Type = LdapObjectClassSchema.Abstract; continue; } if (st2.StringValue.EqualsOrdinalCI("STRUCTURAL")) { Type = LdapObjectClassSchema.Structural; continue; } if (st2.StringValue.EqualsOrdinalCI("AUXILIARY")) { Type = LdapObjectClassSchema.Auxiliary; continue; } if (st2.StringValue.EqualsOrdinalCI("USAGE")) { if (st2.NextToken() == (int)TokenTypes.Word) { currName = st2.StringValue; if (currName.EqualsOrdinalCI("directoryOperation")) { Usage = LdapAttributeSchema.DirectoryOperation; } else if (currName.EqualsOrdinalCI("distributedOperation")) { Usage = LdapAttributeSchema.DistributedOperation; } else if (currName.EqualsOrdinalCI("dSAOperation")) { Usage = LdapAttributeSchema.DsaOperation; } else if (currName.EqualsOrdinalCI("userApplications")) { Usage = LdapAttributeSchema.UserApplications; } } continue; } if (st2.StringValue.EqualsOrdinalCI("APPLIES")) { var values = new List <string>(); st2.NextToken(); if (st2.LastType == '(') { st2.NextToken(); while (st2.LastType != ')') { if (st2.LastType != '$') { values.Add(st2.StringValue); } st2.NextToken(); } } else { values.Add(st2.StringValue); } if (values.Count > 0) { Applies = values.ToArray(); } continue; } currName = st2.StringValue; var q = ParseQualifier(st2, currName); if (q != null) { _qualifiers.Add(q); } } } } } }