/* * The contents of this file are subject to the terms of the Common Development and * Distribution License (the License). You may not use this file except in compliance with the * License. * * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the * specific language governing permission and limitations under the License. * * When distributing Covered Software, include this CDDL Header Notice in each file and include * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL * Header, with the fields enclosed by brackets [] replaced by your own identifying * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2008-2010 Sun Microsystems, Inc. * Portions Copyright 2011-2016 ForgeRock AS. */ package org.opends.server.authorization.dseecompat; import org.forgerock.opendj.ldap.DN; import org.opends.server.types.Entry; import org.forgerock.opendj.ldap.schema.AttributeType; import org.opends.server.api.Group; import java.net.InetAddress; import java.util.List; /** * Interface that provides a view of the AciContainer that is * used by the ACI evaluation code to evaluate an ACI. */ public interface AciEvalContext { /** * Get client DN. The client DN is the authorization DN. * @return The client DN. */ DN getClientDN(); /** * Get the client entry. The client entry is the entry that corresponds * to the client DN. * @return The client entry corresponding to the client DN. */ Entry getClientEntry(); /** * Get the resource DN. The resource DN is the DN of the entry being * evaluated. * @return The resource DN. */ DN getResourceDN(); /** * Get the list of deny ACIs. * @return The deny ACI list. */ List getDenyList(); /** * Get the list allow ACIs. * @return The allow ACI list. */ List getAllowList(); /** * Returns true if the deny list is being evaluated. * @return True if the deny list is being evaluated. */ boolean isDenyEval(); /** * Check if the remote client is bound anonymously. * @return {@code true} if client is bound anonymously. */ boolean isAnonymousUser(); /** * Return the rights set for this container's LDAP operation. * @return The rights set for the container's LDAP operation. */ int getRights(); /** * Return the entry being evaluated * . * @return The evaluation entry. */ Entry getResourceEntry(); /** * Get the hostname of the bound connection. * @return The hostname of the connection. */ String getHostName(); /** * Determine whether the client connection has been authenticated using * a specified authentication method. This method is used for the * authmethod bind rule keyword. * * @param authMethod The required authentication method. * @param saslMech The required SASL mechanism if the authentication method * is SASL. * * @return An evaluation result indicating whether the client connection * has been authenticated using the required authentication method. */ EnumEvalResult hasAuthenticationMethod(EnumAuthMethod authMethod, String saslMech); /** * Get the address of the bound connection. * @return The address of the bound connection. */ InetAddress getRemoteAddress(); /** * Return true if this is an add operation needed by the userattr * USERDN parent inheritance level 0 processing. * * @return {@code true} if this is an add operation. */ boolean isAddOperation(); /** * Return true if the operation associated with this evaluation * context is a member of the specified group. Calls the * ClientConnection.isMemberOf() method, which checks authorization * DN membership in the specified group. * @param group The group to check membership in. * @return {@code true} if the authorization DN of the operation is a * member of the specified group. */ boolean isMemberOf(Group group); /** * Returns true if the hashtable of ACIs that matched the targattrfilters * keyword evaluation is empty. Used in a geteffectiverights control * evaluation to determine the access value to put in the "write" rights * evaluation field. * * @return {@code true} if there were not any ACIs that matched * targattrfilters keyword evaluation. */ boolean isTargAttrFilterMatchAciEmpty(); /** * The context maintains a hashtable of ACIs that matched the targattrfilters * keyword evaluation. The hasTargAttrFiltersMatchAci method returns true if * the specified ACI is contained in that hashtable. Used in a * geteffectiverights control evaluation to determine the access value to put * in the "write" rights evaluation field. * * @param aci The ACI that to evaluate if it contains a match during * targattrfilters keyword evaluation. * * @return {@code true} if a specified ACI matched targattrfilters evaluation. */ boolean hasTargAttrFiltersMatchAci(Aci aci); /** * Return true if an ACI that evaluated to deny or allow has an * targattrfilters keyword. Used by geteffectiverights control * evaluation to determine the access value to put in the "write" rights * evaluation field. * * @param flag The integer value specifying either a deny or allow, but not * both. * * @return {@code true} if the ACI has an targattrfilters keyword. */ boolean hasTargAttrFiltersMatchOp(int flag); /** * Returns {@code true} if the evaluation context is being used in a * geteffectiverights control evaluation. * * @return {@code true} if the evaluation context is being used in a * geteffectiverights control evaluation. */ boolean isGetEffectiveRightsEval(); /** * Set the name of the ACI that last matched a targattrfilters rule. Used * in geteffectiverights control targattrfilters "write" evaluation. * * @param name The ACI name string matching the targattrfilters rule. */ void setTargAttrFiltersAciName(String name); /** * Set a flag that specifies that a ACI that evaluated to either deny or * allow contains a targattrfilters keyword. Used by geteffectiverights * control evaluation to determine the access value to put in the "write" * rights evaluation field. * * @param flag Either the integer value representing an allow or a deny, * but not both. */ void setTargAttrFiltersMatchOp(int flag); /** * Set the reason and the ACI that decided why the last access evaluation was * evaluated the way it was. Used by geteffectiverights control evaluation to * eventually build the summary string. * * @param reason * The enumeration representing the reason of the last access * evaluation. * @param decidingAci * The ACI that decided the last access evaluation. */ void setEvaluationResult(EnumEvalReason reason, Aci decidingAci); /** * Return the reason the last access evaluation was evaluated the way it * was. Used by geteffectiverights control evaluation to build the summary * string. * * @return The enumeration representing the reason of the last access * evaluation. */ EnumEvalReason getEvalReason(); /** * Check if an evaluation context contains a set of access rights. * * @param rights The rights mask to check. * * @return {@code true} if the evaluation context contains a access right set. */ boolean hasRights(int rights); /** * Return the name of the ACI that decided the last access evaluation. Used * by geteffectiverights control evaluation to build the summary string. * * @return The name of the ACI that decided the last access evaluation. */ String getDecidingAciName(); /** * Return true if a evaluation context is being used in proxied authorization * control evaluation. * * @return {@code true} if evaluation context is being used in proxied * authorization control evaluation. */ boolean isProxiedAuthorization(); /** * Get the current attribute type being evaluated. * * @return The attribute type currently being evaluated. */ AttributeType getCurrentAttributeType(); /** * Set the value of the summary string to the specified string. * Used in get effective rights evaluation to build summary string. * * @param summary The string to set the summary string to */ void setEvalSummary(String summary); /** * Return the access evaluation summary string. Used in a geteffectiverights * control evaluation when an aclRightsInfo attribute was specified in a * search request. * * @return The string describing the access evaluation. */ String getEvalSummary(); /** * Return a string representation of the current right being evaluated. * Used in geteffectiverights control evaluation to build summary string. * * @return String representation of the current right being evaluated. */ String rightToString(); /** * Return the name of the ACI that last matched a targattrfilters rule. Used * in geteffectiverights control evaluation. * * @return The name of the ACI that last matched a targattrfilters rule. */ String getTargAttrFiltersAciName(); /** * Return the current SSF (Security Strength Factor) of the underlying * connection. * * @return The current SSF of the connection. */ int getCurrentSSF(); }