Release bumped to "gts4".
[tac_plus.git] / cfgeval.c
index 5435709..f0aed72 100644 (file)
--- a/cfgeval.c
+++ b/cfgeval.c
@@ -379,12 +379,14 @@ struct expr *parent;
        switch (expr->type) {
 
        case S_not:
-           expr_sink_internal(expr->u.not.child, membership, expr /* parent */);
+           if (expr_sink_internal(expr->u.not.child, membership, expr /* parent */))
+               return (1);
            break;
 
        case S_and:
        case S_or:
-           expr_sink_internal(expr->u.and_or.child_first, membership, expr /* parent */);
+           if (expr_sink_internal(expr->u.and_or.child_first, membership, expr /* parent */))
+               return (1);
            break;
 
        case S_user:
@@ -392,11 +394,18 @@ struct expr *parent;
        case S_group:
            tac_list_node_init(&expr->eval_scan.u.entity.notify_expr_node);
            expr->u.entity.entity = entity_lookup(expr->type, expr->u.entity.name);
+           if (!expr->u.entity.entity && expr->type == S_host) {
+               expr->u.entity.entity = new_entity(expr->type, (char *)expr->u.entity.name, expr->line);
+               if (!expr->u.entity.entity)
+                   return (1);
+               expr->u.entity.name = NULL;
+           }
            if (!expr->u.entity.entity) {
                report(LOG_ERR, "referenced entity %s %s not found on line %d",
                        entity_type_to_string(expr->type), expr->u.entity.name, expr->line);
                return (1);
-               }
+           }
+           /* already NULLed for not-yet-existing S_host */
            free((char *) expr->u.entity.name);
            expr->u.entity.name = NULL;
            break;