public FilterTokenParserTests(ITestOutputHelper outputHelper, CultureSwitcher cultureSwitcher)
        {
            _tokenizer       = new FilterTokenizer();
            _outputHelper    = outputHelper;
            _cultureSwitcher = cultureSwitcher;
            _cultureSwitcher.DefaultCulture = CultureInfo.GetCultureInfo("fr-FR");

            _outputHelper.WriteLine($"Current culture is '{_cultureSwitcher.CurrentCulture}'");
        }
Exemple #2
0
        public void TestLexerAnyOfScenarios()
        {
            FilterTokenizer tokenizer = new FilterTokenizer();

            var tokens = tokenizer.Tokenize("Ask if any of (AA000, AA001, AA002)=1");

            foreach (DslToken t in tokens)
            {
            }
        }
Exemple #3
0
        public void TestLexer2Scenarios()
        {
            FilterTokenizer tokenizer = new FilterTokenizer();

            var tokens = tokenizer.Tokenize("AA000=1, 2 or 3 or AA001=2");

            foreach (DslToken t in tokens)
            {
            }
        }
Exemple #4
0
        private Asn1Tagged Parse(string expression)
        {
            var filterExpr = string.IsNullOrWhiteSpace(expression) ? "(objectclass=*)" : expression;

            int idx;

            if ((idx = filterExpr.IndexOf('\\')) != -1)
            {
                var sb = new StringBuilder(filterExpr);
                var i  = idx;
                while (i < sb.Length - 1)
                {
                    var c = sb[i++];

                    if (c != '\\')
                    {
                        continue;
                    }

                    // found '\' (backslash)
                    // If V2 escape, turn to a V3 escape
                    c = sb[i];
                    if (c != '*' && c != '(' && c != ')' && c != '\\')
                    {
                        continue;
                    }

                    // Ldap v2 filter, convert them into hex chars
                    sb.Remove(i, i + 1 - i);
                    sb.Insert(i, Convert.ToString(c, 16));
                    i += 2;
                }

                filterExpr = sb.ToString();
            }

            // missing opening and closing parentheses, must be V2, add parentheses
            if (filterExpr[0] != '(' && filterExpr[filterExpr.Length - 1] != ')')
            {
                filterExpr = "(" + filterExpr + ")";
            }

            var ch  = filterExpr[0];
            var len = filterExpr.Length;

            // missing opening parenthesis ?
            if (ch != '(')
            {
                throw new LdapException(LdapException.MissingLeftParen, LdapStatusCode.FilterError);
            }

            // missing closing parenthesis ?
            if (filterExpr[len - 1] != ')')
            {
                throw new LdapException(LdapException.MissingRightParen, LdapStatusCode.FilterError);
            }

            // unmatched parentheses ?
            var parenCount = 0;

            for (var i = 0; i < len; i++)
            {
                switch (filterExpr[i])
                {
                case '(':
                    parenCount++;
                    break;

                case ')':
                    parenCount--;
                    break;
                }
            }

            if (parenCount > 0)
            {
                throw new LdapException(LdapException.MissingRightParen, LdapStatusCode.FilterError);
            }

            if (parenCount < 0)
            {
                throw new LdapException(LdapException.MissingLeftParen, LdapStatusCode.FilterError);
            }

            _ft = new FilterTokenizer(this, filterExpr);
            return(ParseFilter());
        }
Exemple #5
0
        //*************************************************************************
        // Helper methods for RFC 2254 Search Filter parsing.
        //*************************************************************************
        /// <summary> Parses an RFC 2251 filter string into an ASN.1 Ldap Filter object.</summary>
        private Asn1Tagged parse(System.String filterExpr)
        {
            if ((System.Object) filterExpr == null || filterExpr.Equals(""))
            {
                filterExpr = new System.Text.StringBuilder("(objectclass=*)").ToString();
            }
            int idx;
            if ((idx = filterExpr.IndexOf((System.Char) '\\')) != - 1)
            {
                System.Text.StringBuilder sb = new System.Text.StringBuilder(filterExpr);
                int i = idx;
                while (i < (sb.Length - 1))
                {
                    char c = sb[i++];
                    if (c == '\\')
                    {
                        // found '\' (backslash)
                        // If V2 escape, turn to a V3 escape
                        c = sb[i];
                        if (c == '*' || c == '(' || c == ')' || c == '\\')
                        {
                            // Ldap v2 filter, convert them into hex chars
                            sb.Remove(i, i + 1 - i);
                            sb.Insert(i, System.Convert.ToString((int) c, 16));
                            i += 2;
                        }
                    }
                }
                filterExpr = sb.ToString();
            }

            // missing opening and closing parentheses, must be V2, add parentheses
            if ((filterExpr[0] != '(') && (filterExpr[filterExpr.Length - 1] != ')'))
            {
                filterExpr = "(" + filterExpr + ")";
            }

            char ch = filterExpr[0];
            int len = filterExpr.Length;

            // missing opening parenthesis ?
            if (ch != '(')
            {
                throw new LdapLocalException(ExceptionMessages.MISSING_LEFT_PAREN, LdapException.FILTER_ERROR);
            }

            // missing closing parenthesis ?
            if (filterExpr[len - 1] != ')')
            {
                throw new LdapLocalException(ExceptionMessages.MISSING_RIGHT_PAREN, LdapException.FILTER_ERROR);
            }

            // unmatched parentheses ?
            int parenCount = 0;
            for (int i = 0; i < len; i++)
            {
                if (filterExpr[i] == '(')
                {
                    parenCount++;
                }

                if (filterExpr[i] == ')')
                {
                    parenCount--;
                }
            }

            if (parenCount > 0)
            {
                throw new LdapLocalException(ExceptionMessages.MISSING_RIGHT_PAREN, LdapException.FILTER_ERROR);
            }

            if (parenCount < 0)
            {
                throw new LdapLocalException(ExceptionMessages.MISSING_LEFT_PAREN, LdapException.FILTER_ERROR);
            }
            ft = new FilterTokenizer(this, filterExpr);

            return parseFilter();
        }
 public FilterTokenizerTests(ITestOutputHelper outputHelper)
 {
     _sut          = new FilterTokenizer();
     _outputHelper = outputHelper;
 }
Exemple #7
0
        public void TestLexer2()
        {
            FilterTokenizer tokenizer = new FilterTokenizer();

            var tokens = tokenizer.Tokenize("AA000=1, 2 or 3");
        }