mirror of
https://github.com/SELinuxProject/setools
synced 2025-04-09 02:51:33 +00:00
ConstraintExprNode: Convert to a list-like object.
This is more natural, based on how the object is used.
This commit is contained in:
parent
a73e76b78f
commit
86b4d47349
@ -202,7 +202,7 @@ cdef class Constraint(BaseConstraint):
|
|||||||
elif expr_node.users:
|
elif expr_node.users:
|
||||||
users.extend(expr_node.names)
|
users.extend(expr_node.names)
|
||||||
|
|
||||||
c._postfix_expression.extend(expr_node())
|
c._postfix_expression.extend(expr_node)
|
||||||
|
|
||||||
c.users = frozenset(users)
|
c.users = frozenset(users)
|
||||||
c.roles = frozenset(roles)
|
c.roles = frozenset(roles)
|
||||||
@ -256,7 +256,7 @@ cdef class Validatetrans(BaseConstraint):
|
|||||||
elif expr_node.users:
|
elif expr_node.users:
|
||||||
users.extend(expr_node.names)
|
users.extend(expr_node.names)
|
||||||
|
|
||||||
v._postfix_expression.extend(expr_node())
|
v._postfix_expression.extend(expr_node)
|
||||||
|
|
||||||
v.users = frozenset(users)
|
v.users = frozenset(users)
|
||||||
v.roles = frozenset(roles)
|
v.roles = frozenset(roles)
|
||||||
@ -275,7 +275,14 @@ cdef class Validatetrans(BaseConstraint):
|
|||||||
|
|
||||||
cdef class ConstraintExprNode(PolicySymbol):
|
cdef class ConstraintExprNode(PolicySymbol):
|
||||||
|
|
||||||
"""A node of a constraint expression."""
|
"""
|
||||||
|
A node of a constraint expression.
|
||||||
|
|
||||||
|
This is an immutable list-like object that contains one node
|
||||||
|
of a constraint in postfix notation, e.g.:
|
||||||
|
|
||||||
|
["u1", "u2", "=="]
|
||||||
|
"""
|
||||||
|
|
||||||
cdef:
|
cdef:
|
||||||
sepol.constraint_expr_t *handle
|
sepol.constraint_expr_t *handle
|
||||||
@ -378,33 +385,42 @@ cdef class ConstraintExprNode(PolicySymbol):
|
|||||||
except AttributeError:
|
except AttributeError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
return n
|
#
|
||||||
|
# Build expression
|
||||||
def __call__(self):
|
#
|
||||||
expression = []
|
if n.expression_type == sepol.CEXPR_ATTR:
|
||||||
|
|
||||||
if self.expression_type == sepol.CEXPR_ATTR:
|
|
||||||
# logical operator with symbols (e.g. u1 == u2)
|
# logical operator with symbols (e.g. u1 == u2)
|
||||||
operand1 = self._sym_to_text[self.symbol_type]
|
operand1 = n._sym_to_text[n.symbol_type]
|
||||||
operand2 = self._sym_to_text[self.symbol_type + sepol.CEXPR_TARGET]
|
operand2 = n._sym_to_text[n.symbol_type + sepol.CEXPR_TARGET]
|
||||||
operator = self._expr_op_to_text[self.operator]
|
operator = n._expr_op_to_text[n.operator]
|
||||||
|
|
||||||
expression.extend([operand1, operand2, operator])
|
n._expression = [operand1, operand2, operator]
|
||||||
|
|
||||||
elif self.expression_type == sepol.CEXPR_NAMES:
|
elif n.expression_type == sepol.CEXPR_NAMES:
|
||||||
# logical operator with type or attribute list (e.g. t1 == { spam_t eggs_t })
|
# logical operator with type or attribute list (e.g. t1 == { spam_t eggs_t })
|
||||||
operand1 = self._sym_to_text[self.symbol_type]
|
operand1 = n._sym_to_text[n.symbol_type]
|
||||||
operator = self._expr_op_to_text[self.operator]
|
operand2 = n.names
|
||||||
operand2 = self.names
|
operator = n._expr_op_to_text[n.operator]
|
||||||
|
|
||||||
expression.extend([operand1, operand2, operator])
|
n._expression = [operand1, operand2, operator]
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# individual operators (and/or/not)
|
# individual operators (and/or/not)
|
||||||
expression.append(self._expr_type_to_text[self.expression_type])
|
n._expression = [n._expr_type_to_text[n.expression_type]]
|
||||||
|
|
||||||
return expression
|
return n
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
return iter(self._expression)
|
||||||
|
|
||||||
|
def __contains__(self, item):
|
||||||
|
return item in self._expression
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
return len(self._expression)
|
||||||
|
|
||||||
|
def __getitem__(self, idx):
|
||||||
|
return self._expression[idx]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def names(self):
|
def names(self):
|
||||||
|
Loading…
Reference in New Issue
Block a user