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:
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;