| | |
| | | * |
| | | * |
| | | * Copyright 2008 Sun Microsystems, Inc. |
| | | * Portions Copyright 2013 ForgeRock AS |
| | | */ |
| | | |
| | | package org.opends.server.authorization.dseecompat; |
| | | import org.opends.messages.Message; |
| | | |
| | | import static org.opends.messages.AccessControlMessages.*; |
| | | import static org.opends.server.authorization.dseecompat.Aci.*; |
| | | import java.util.regex.Pattern; |
| | | import java.util.regex.Matcher; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | |
| | | import org.opends.messages.Message; |
| | | |
| | | /** |
| | | * This class represents a single bind rule of an ACI permission-bind rule |
| | |
| | | */ |
| | | public class BindRule { |
| | | |
| | | /* |
| | | * This hash table holds the keyword bind rule mapping. |
| | | */ |
| | | private HashMap<String, KeywordBindRule> keywordRuleMap = |
| | | /** This hash table holds the keyword bind rule mapping. */ |
| | | private final HashMap<String, KeywordBindRule> keywordRuleMap = |
| | | new HashMap<String, KeywordBindRule>(); |
| | | |
| | | /* |
| | | * True is a boolean "not" was seen. |
| | | */ |
| | | /** True is a boolean "not" was seen. */ |
| | | private boolean negate=false; |
| | | |
| | | /* |
| | | * Complex bind rules have left and right values. |
| | | */ |
| | | /** Complex bind rules have left and right values. */ |
| | | private BindRule left = null; |
| | | private BindRule right = null; |
| | | |
| | | /* |
| | | /** |
| | | * Enumeration of the boolean type of the complex bind rule ("and" or "or"). |
| | | */ |
| | | private EnumBooleanTypes booleanType = null; |
| | | |
| | | /* |
| | | * The keyword of a simple bind rule. |
| | | */ |
| | | /** The keyword of a simple bind rule. */ |
| | | private EnumBindRuleKeyword keyword = null; |
| | | |
| | | /* |
| | | * Regular expression group position of a bind rule keyword. |
| | | */ |
| | | /** Regular expression group position of a bind rule keyword. */ |
| | | private static final int keywordPos = 1; |
| | | |
| | | /* |
| | | * Regular expression group position of a bind rule operation. |
| | | */ |
| | | /** Regular expression group position of a bind rule operation. */ |
| | | private static final int opPos = 2; |
| | | |
| | | /* |
| | | * Regular expression group position of a bind rule expression. |
| | | */ |
| | | /** Regular expression group position of a bind rule expression. */ |
| | | private static final int expressionPos = 3; |
| | | |
| | | /* |
| | | /** |
| | | * Regular expression group position of the remainder part of an operand. |
| | | */ |
| | | private static final int remainingOperandPos = 1; |
| | | |
| | | /* |
| | | * Regular expression group position of the remainder of the bind rule. |
| | | */ |
| | | /** Regular expression group position of the remainder of the bind rule. */ |
| | | private static final int remainingBindrulePos = 2; |
| | | |
| | | /* |
| | | * Regular expression for valid bind rule operator group. |
| | | */ |
| | | /** Regular expression for valid bind rule operator group. */ |
| | | private static final String opRegGroup = "([!=<>]+)"; |
| | | |
| | | /* |
| | | /** |
| | | * Regular expression for the expression part of a partially parsed |
| | | * bind rule. |
| | | */ |
| | | private static final String expressionRegex = |
| | | "\"([^\"]+)\"" + ZERO_OR_MORE_WHITESPACE; |
| | | |
| | | /* |
| | | * Regular expression for a single bind rule. |
| | | */ |
| | | /** Regular expression for a single bind rule. */ |
| | | private static final String bindruleRegex = |
| | | WORD_GROUP_START_PATTERN + ZERO_OR_MORE_WHITESPACE + |
| | | opRegGroup + ZERO_OR_MORE_WHITESPACE + expressionRegex; |
| | | |
| | | /* |
| | | /** |
| | | * Regular expression of the remainder part of a partially parsed bind rule. |
| | | */ |
| | | private static final String remainingBindruleRegex = |
| | |
| | | ret=evalComplex(left.evaluate(evalCtx),right.evaluate(evalCtx)); |
| | | return EnumEvalResult.negateIfNeeded(ret, negate); |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public String toString() { |
| | | final StringBuilder sb = new StringBuilder(); |
| | | toString(sb); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * Appends a string representation of this object to the provided buffer. |
| | | * |
| | | * @param buffer |
| | | * The buffer into which a string representation of this object |
| | | * should be appended. |
| | | */ |
| | | public final void toString(StringBuilder buffer) { |
| | | if (this.keywordRuleMap != null) { |
| | | for (KeywordBindRule rule : this.keywordRuleMap.values()) { |
| | | rule.toString(buffer); |
| | | buffer.append(";"); |
| | | } |
| | | } |
| | | } |
| | | } |