don't allow users to use the 'permissions' field.
Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
string str_val;
ESQueryNodeLeafVal *val{nullptr};
ESEntityTypeMap::EntityType entity_type{ESEntityTypeMap::ES_ENTITY_NONE};
+ bool allow_restricted{false};
bool val_from_str(string *perr) {
switch (entity_type) {
}
bool handle_nested(ESQueryNode **pnode, string *perr);
+ void set_allow_restricted(bool allow) {
+ allow_restricted = allow;
+ }
+
virtual void dump(Formatter *f) const = 0;
};
*pnode = this;
auto m = compiler->get_generic_type_map();
if (m) {
- bool found = m->find(field_name, &entity_type);
+ bool found = m->find(field_name, &entity_type) &&
+ (allow_restricted || !compiler->is_restricted(field_name));
if (!found) {
*perr = string("unexpected generic field '") + field_name + "'";
}
for (auto& c : eq_conds) {
ESQueryNode_Op_Equal *eq_node = new ESQueryNode_Op_Equal(this, c.first, c.second);
+ eq_node->set_allow_restricted(true); /* can access restricted fields */
ESQueryNode *effective_node;
if (!eq_node->init(nullptr, &effective_node, perr)) {
delete eq_node;
ESEntityTypeMap *custom_type_map{nullptr};
map<string, string> *field_aliases;
+ set<string> *restricted_fields;
public:
ESQueryCompiler(const string& query, list<pair<string, string> > *prepend_eq_conds, const string& _custom_prefix) : parser(query), custom_prefix(_custom_prefix) {
return i->second;
}
+
+ void set_restricted_fields(set<string> *rf) {
+ restricted_fields = rf;
+ }
+
+ bool is_restricted(const string& f) {
+ return (restricted_fields && restricted_fields->find(f) != restricted_fields->end());
+ }
};
{ "contenttype", "meta.contenttype" },
};
es_query.set_field_aliases(&aliases);
-#warning permissions need to be restricted value
+
static map<string, ESEntityTypeMap::EntityType> generic_map = { {"bucket", ESEntityTypeMap::ES_ENTITY_STR},
{"name", ESEntityTypeMap::ES_ENTITY_STR},
{"instance", ESEntityTypeMap::ES_ENTITY_STR},
ESEntityTypeMap gm(generic_map);
es_query.set_generic_type_map(&gm);
+ static set<string> restricted_fields = { {"permissions"} };
+ es_query.set_restricted_fields(&restricted_fields);
+
static map<string, ESEntityTypeMap::EntityType> custom_map = { };
ESEntityTypeMap em(custom_map);
es_query.set_custom_type_map(&em);