s4:heimdal: import lorikeet-heimdal-202201172009 (commit 5a0b45cd723628b3690ea848548b...
[samba.git] / source4 / heimdal / lib / hx509 / test_expr.c
1
2 #include "hx_locl.h"
3 #include <err.h>
4
5 struct foo {
6     int val;
7     char *str;
8 } foo[] = {
9     { 0, "FALSE" },
10     { 1, "TRUE" },
11     { 0, "!TRUE" },
12     { 0, "! TRUE" },
13     { 0, "!\tTRUE" },
14     { 0, "( FALSE AND FALSE )" },
15     { 0, "( TRUE AND FALSE )" },
16     { 1, "( TRUE AND TRUE )" },
17     { 1, "( TRUE OR TRUE )" },
18     { 1, "( TRUE OR FALSE )" },
19     { 0, "( FALSE OR FALSE )" },
20     { 1, "! ( FALSE OR FALSE )" },
21
22     { 1, "\"foo\" TAILMATCH \"foo\"" },
23     { 1, "\"foobar\" TAILMATCH \"bar\"" },
24     { 0, "\"foobar\" TAILMATCH \"foo\"" },
25
26     { 1, "\"foo\" == \"foo\"" },
27     { 0, "\"foo\" == \"bar\"" },
28     { 0, "\"foo\" != \"foo\"" },
29     { 1, "\"foo\" != \"bar\"" },
30     { 1, "%{variable} == \"foo\"" },
31     { 0, "%{variable} == \"bar\"" },
32     { 1, "%{context.variable} == \"foo\"" },
33     { 0, "%{context.variable} == \"bar\"" },
34     { 1, "\"foo\" IN ( \"bar\", \"foo\")" },
35     { 0, "\"foo\" IN ( \"bar\", \"baz\")" },
36     { 0, "\"bar\" IN %{context}" },
37     { 1, "\"foo\" IN %{context}" },
38     { 1, "\"variable\" IN %{context}" },
39
40     { 1, "\"foo\" IN %{context} AND %{context.variable} == \"foo\"" }
41 };
42
43 int
44 main(int argc, char **argv)
45 {
46     struct hx_expr *expr;
47     hx509_context context;
48     hx509_env env = NULL, env2 = NULL;
49     int val, i, ret;
50
51 #if 0
52     extern int yydebug;
53     yydebug = 1;
54 #endif
55
56     ret = hx509_context_init(&context);
57     if (ret)
58         errx(1, "hx509_context_init failed with %d", ret);
59
60     hx509_env_add(context, &env, "variable", "foo");
61     hx509_env_add(context, &env2, "variable", "foo");
62     hx509_env_add_binding(context, &env, "context", env2);
63
64     for (i = 0; i < sizeof(foo)/sizeof(foo[0]); i++) {
65
66         expr = _hx509_expr_parse(foo[i].str);
67         if (expr == NULL)
68             errx(1, "_hx509_expr_parse failed for %d: %s", i, foo[i].str);
69
70         val = _hx509_expr_eval(context, env, expr);
71         if (foo[i].val) {
72             if (val == 0)
73                 errx(1, "_hx509_expr_eval not true when it should: %d: %s",
74                      i, foo[i].str);
75         } else {
76             if (val)
77                 errx(1, "_hx509_expr_eval true when it should not: %d: %s",
78                      i, foo[i].str);
79         }
80
81         _hx509_expr_free(expr);
82     }
83
84     hx509_env_free(&env);
85
86     return 0;
87 }