2.4.4.17.7 Logical Operator Tokens
Logical operators test the logical value of operands and produce TRUE, FALSE, or UNKNOWN according to the defined behavior of the operator. The operands of logical operators must be conditional expressions and/or expression terms. The logical value of an operand is the tri-state logical value it receives when evaluated according to the following:
If the type of the operand is "Literal" then the operation returns an error.
If the type of the operand is "Local Attribute", "Resource Attribute", "Device Attribute" or "User Attribute" and the value is null then the logical value of the operand is UNKNOWN.
If an operand is a "Local Attribute", "Resource Attribute", "Device Attribute" or "User Attribute" and the value is an integer, the logical value of the operand is TRUE if the value is nonzero, and FALSE otherwise.
If an operand is a "Local Attribute", "Resource Attribute", "Device Attribute" or "User Attribute" and the value is string, the logical value of the operand is TRUE if the length of the string is nonzero, and FALSE otherwise.
If the type of an operand is "Result Value", the logical value of the operand is the value of the operand.
If any processing rule returns an error, then the entire conditional expression evaluates to UNKNOWN regardless of the rest of the expression.
Unary Logical Operators
The operand for unary operators is the variable on the top of the evaluation stack as specified in the EvaluateAceCondition algorithm in section 2.5.3.1.5.
Token Type |
Byte-Code |
Processing |
---|---|---|
Exists |
0x87 |
SDDL Form: Exists operand
|
Not_Exists<70> |
0x8d |
SDDL Form: Not_Exists operand Logical inverse of Exists. |
Logical NOT (!) |
0xa2 |
|
Binary Logical Operators
In the processing rules that follow, the LHS is the second element on the stack and the RHS is the top of the stack as specified in the EvaluateAceCondition algorithm in section 2.5.3.1.5.
Token Type |
Byte-Code |
Processing |
---|---|---|
logical AND (&&) |
0xa0 |
SDDL Form: LHS && RHS
|
logical OR (||) |
0xa1 |
SDDL Form: LHS || RHS
|