Code

frontend, parser: Allow typed access to host objects from any context.
authorSebastian Harl <sh@tokkee.org>
Fri, 15 May 2015 19:41:14 +0000 (21:41 +0200)
committerSebastian Harl <sh@tokkee.org>
Fri, 15 May 2015 19:41:14 +0000 (21:41 +0200)
That is, even from the "generic" or "filter" contexts.

src/frontend/analyzer.c
src/parser/analyzer.c

index 4bd370222e8e11d4a41e9a3b297a1e35412155be..01e1ad357adec6502fc7efc74768bee7cdf03969 100644 (file)
@@ -95,7 +95,8 @@ analyze_expr(int context, sdb_store_expr_t *e, sdb_strbuf_t *errbuf)
                        if (context == (int)e->data.data.integer)
                                return 0;
                        if ((e->data.data.integer == SDB_HOST) &&
-                                       ((context == SDB_SERVICE) || (context == SDB_METRIC)))
+                                       ((context == SDB_SERVICE) || (context == SDB_METRIC)
+                                               || (context < 0)))
                                return 0;
                        sdb_strbuf_sprintf(errbuf, "Invalid expression %s.%s "
                                        "in %s context",
index 01539edbe71f870de8486b52320caa6dd9fa4444..e03cbdbc3d2e9ff259e9d18f6729bf9751e920b7 100644 (file)
@@ -347,7 +347,7 @@ analyze_typed(int context, sdb_ast_typed_t *t, sdb_strbuf_t *errbuf)
 
        /* self-references are allowed and services and metrics may reference
         * their parent host; everything may reference attributes */
-       if ((context != t->type) && (context != UNSPEC_CONTEXT)
+       if ((context != t->type) && (context > 0)
                        && (((context != SDB_SERVICE) && (context != SDB_METRIC))
                                || (t->type != SDB_HOST))
                        && (t->type != SDB_ATTRIBUTE)) {