Code

store: Apply filters when evaluating attribute values or expressions.
[sysdb.git] / src / core / store_lookup.c
index 0c9d36199abca8e6db5fea26e34c0c52c80b852f..dc3e49942efb0cd4db2f0a3d7e53aa5542364df7 100644 (file)
@@ -114,7 +114,7 @@ attr_cmp(sdb_store_obj_t *obj, sdb_store_cond_t *cond,
        if (obj->type != SDB_HOST)
                return INT_MAX;
 
-       if (sdb_store_expr_eval(ATTR_C(cond)->expr, obj, &value))
+       if (sdb_store_expr_eval(ATTR_C(cond)->expr, obj, &value, filter))
                return INT_MAX;
 
        attr = attr_get(HOST(obj), ATTR_C(cond)->name, filter);
@@ -130,13 +130,13 @@ attr_cmp(sdb_store_obj_t *obj, sdb_store_cond_t *cond,
 
 static int
 obj_cmp(sdb_store_obj_t *obj, sdb_store_cond_t *cond,
-               sdb_store_matcher_t __attribute__((unused)) *filter)
+               sdb_store_matcher_t *filter)
 {
        sdb_data_t obj_value = SDB_DATA_INIT;
        sdb_data_t value = SDB_DATA_INIT;
        int status;
 
-       if (sdb_store_expr_eval(OBJ_C(cond)->expr, obj, &value))
+       if (sdb_store_expr_eval(OBJ_C(cond)->expr, obj, &value, filter))
                return INT_MAX;
 
        if (OBJ_C(cond)->field == SDB_FIELD_BACKEND) {
@@ -588,7 +588,7 @@ cond_tostring(sdb_store_matcher_t *m, char *buf, size_t buflen)
                return buf;
        }
 
-       if (sdb_store_expr_eval(expr, NULL, &value))
+       if (sdb_store_expr_eval(expr, /* obj */ NULL, &value, /* filter */ NULL))
                snprintf(value_str, sizeof(value_str), "ERR");
        else if (sdb_data_format(&value, value_str, sizeof(value_str),
                                SDB_SINGLE_QUOTED) < 0)
@@ -1007,8 +1007,8 @@ sdb_store_matcher_parse_cmp(const char *obj_type, const char *attr,
        if (! expr)
                return NULL;
 
-       if (sdb_store_expr_eval(expr, NULL, &value) ||
-                       (value.type != SDB_TYPE_STRING)) {
+       if (sdb_store_expr_eval(expr, /* obj */ NULL, &value, /* filter */ NULL)
+                       || (value.type != SDB_TYPE_STRING)) {
                sdb_data_free_datum(&value);
                if (type != SDB_ATTRIBUTE)
                        return NULL;