| | |
| | | import org.opends.server.api.plugin.PostOperationPluginResult; |
| | | import org.opends.server.api.plugin.PreOperationPluginResult; |
| | | import org.opends.server.controls.AuthorizationIdentityResponseControl; |
| | | import org.opends.server.controls.GetEffectiveRights; |
| | | import org.opends.server.controls.LDAPAssertionRequestControl; |
| | | import org.opends.server.controls.LDAPPostReadRequestControl; |
| | | import org.opends.server.controls.LDAPPostReadResponseControl; |
| | |
| | | /** |
| | | * Perform a local modify operation against the local backend. |
| | | * |
| | | * @param operation - The operation to perform |
| | | * @param localOp - The operation to perform |
| | | */ |
| | | private void processLocalModify(LocalBackendModifyOperation localOp) |
| | | { |
| | |
| | | Control c = requestControls.get(i); |
| | | String oid = c.getOID(); |
| | | |
| | | if (!AccessControlConfigManager.getInstance(). |
| | | getAccessControlHandler(). |
| | | isAllowed(entryDN, localOp, c)) |
| | | { |
| | | localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS); |
| | | int msgID = MSGID_CONTROL_INSUFFICIENT_ACCESS_RIGHTS; |
| | | localOp.appendErrorMessage(getMessage(msgID, oid)); |
| | | skipPostOperation = true; |
| | | break modifyProcessing; |
| | | } |
| | | |
| | | if (oid.equals(OID_LDAP_ASSERTION)) |
| | | { |
| | | LDAPAssertionRequestControl assertControl; |
| | |
| | | } |
| | | else if (oid.equals(OID_LDAP_READENTRY_PREREAD)) |
| | | { |
| | | if (c instanceof LDAPAssertionRequestControl) |
| | | if (c instanceof LDAPPreReadRequestControl) |
| | | { |
| | | preReadRequest = (LDAPPreReadRequestControl) c; |
| | | } |
| | |
| | | } |
| | | else if (oid.equals(OID_LDAP_READENTRY_POSTREAD)) |
| | | { |
| | | if (c instanceof LDAPAssertionRequestControl) |
| | | if (c instanceof LDAPPostReadRequestControl) |
| | | { |
| | | postReadRequest = (LDAPPostReadRequestControl) c; |
| | | } |
| | |
| | | break modifyProcessing; |
| | | } |
| | | |
| | | |
| | | if (AccessControlConfigManager.getInstance(). |
| | | getAccessControlHandler().isProxiedAuthAllowed(localOp, |
| | | authorizationEntry) == false) { |
| | | localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS); |
| | | |
| | | int msgID = MSGID_MODIFY_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS; |
| | | localOp.appendErrorMessage(getMessage(msgID, |
| | | String.valueOf(entryDN))); |
| | | |
| | | skipPostOperation = true; |
| | | break modifyProcessing; |
| | | } |
| | | localOp.setAuthorizationEntry(authorizationEntry); |
| | | if (authorizationEntry == null) |
| | | { |
| | |
| | | break modifyProcessing; |
| | | } |
| | | |
| | | if (AccessControlConfigManager.getInstance(). |
| | | getAccessControlHandler().isProxiedAuthAllowed(localOp, |
| | | authorizationEntry) == false) { |
| | | localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS); |
| | | |
| | | int msgID = MSGID_MODIFY_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS; |
| | | localOp.appendErrorMessage(getMessage(msgID, |
| | | String.valueOf(entryDN))); |
| | | |
| | | skipPostOperation = true; |
| | | break modifyProcessing; |
| | | } |
| | | localOp.setAuthorizationEntry(authorizationEntry); |
| | | if (authorizationEntry == null) |
| | | { |
| | |
| | | Control c = requestControls.get(i); |
| | | String oid = c.getOID(); |
| | | |
| | | if (!AccessControlConfigManager.getInstance(). |
| | | getAccessControlHandler(). |
| | | isAllowed(baseDN, localOp, c)) |
| | | { |
| | | localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS); |
| | | int msgID = MSGID_CONTROL_INSUFFICIENT_ACCESS_RIGHTS; |
| | | localOp.appendErrorMessage(getMessage(msgID, oid)); |
| | | skipPostOperation = true; |
| | | break searchProcessing; |
| | | } |
| | | |
| | | if (oid.equals(OID_LDAP_ASSERTION)) |
| | | { |
| | | LDAPAssertionRequestControl assertControl; |
| | |
| | | break searchProcessing; |
| | | } |
| | | |
| | | if (AccessControlConfigManager.getInstance(). |
| | | getAccessControlHandler().isProxiedAuthAllowed(localOp, |
| | | authorizationEntry) == false) { |
| | | localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS); |
| | | |
| | | int msgID = MSGID_SEARCH_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS; |
| | | localOp.appendErrorMessage(getMessage(msgID, |
| | | String.valueOf(baseDN))); |
| | | |
| | | skipPostOperation = true; |
| | | break searchProcessing; |
| | | } |
| | | localOp.setAuthorizationEntry(authorizationEntry); |
| | | if (authorizationEntry == null) |
| | | { |
| | |
| | | break searchProcessing; |
| | | } |
| | | |
| | | if (AccessControlConfigManager.getInstance(). |
| | | getAccessControlHandler().isProxiedAuthAllowed(localOp, |
| | | authorizationEntry) == false) { |
| | | localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS); |
| | | |
| | | int msgID = MSGID_SEARCH_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS; |
| | | localOp.appendErrorMessage(getMessage(msgID, |
| | | String.valueOf(baseDN))); |
| | | |
| | | skipPostOperation = true; |
| | | break searchProcessing; |
| | | } |
| | | localOp.setAuthorizationEntry(authorizationEntry); |
| | | if (authorizationEntry == null) |
| | | { |
| | |
| | | { |
| | | localOp.setVirtualAttributesOnly(true); |
| | | } |
| | | else if(oid.equals(OID_GET_EFFECTIVE_RIGHTS)) |
| | | { |
| | | GetEffectiveRights effectiveRightsControl; |
| | | if (c instanceof GetEffectiveRights) |
| | | { |
| | | effectiveRightsControl = (GetEffectiveRights) c; |
| | | } |
| | | else |
| | | { |
| | | try |
| | | { |
| | | effectiveRightsControl = GetEffectiveRights.decodeControl(c); |
| | | } |
| | | catch (LDAPException le) |
| | | { |
| | | if (debugEnabled()) |
| | | { |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, le); |
| | | } |
| | | |
| | | localOp.setResultCode(ResultCode.valueOf(le.getResultCode())); |
| | | localOp.appendErrorMessage(le.getMessage()); |
| | | |
| | | break searchProcessing; |
| | | } |
| | | } |
| | | |
| | | if (!AccessControlConfigManager.getInstance() |
| | | .getAccessControlHandler(). |
| | | isGetEffectiveRightsAllowed(localOp, |
| | | effectiveRightsControl)) { |
| | | localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS); |
| | | int msgID = |
| | | MSGID_SEARCH_EFFECTIVERIGHTS_INSUFFICIENT_ACCESS_RIGHTS; |
| | | localOp.appendErrorMessage(getMessage(msgID, |
| | | String.valueOf(baseDN))); |
| | | |
| | | skipPostOperation = true; |
| | | break searchProcessing; |
| | | } |
| | | } |
| | | |
| | | // NYI -- Add support for additional controls. |
| | | else if (c.isCritical()) |
| | | { |
| | |
| | | /** |
| | | * Perform a local bind operation against a local backend. |
| | | * |
| | | * @param operation - The operation to perform |
| | | * @param localOp - The operation to perform |
| | | */ |
| | | private void processLocalBind(LocalBackendBindOperation localOp) |
| | | { |
| | |
| | | Control c = requestControls.get(i); |
| | | String oid = c.getOID(); |
| | | |
| | | if (!AccessControlConfigManager.getInstance(). |
| | | getAccessControlHandler(). isAllowed(bindDN, localOp, c)) |
| | | { |
| | | localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS); |
| | | int msgID = MSGID_CONTROL_INSUFFICIENT_ACCESS_RIGHTS; |
| | | localOp.appendErrorMessage(getMessage(msgID, oid)); |
| | | skipPostOperation = true; |
| | | break bindProcessing; |
| | | } |
| | | |
| | | if (oid.equals(OID_AUTHZID_REQUEST)) |
| | | { |
| | | returnAuthzID = true; |
| | |
| | | /** |
| | | * Perform a local add operation against a local backend. |
| | | * |
| | | * @param operation - The operation to perform |
| | | * @param localOp - The operation to perform |
| | | */ |
| | | private void processLocalAdd(LocalBackendAddOperation localOp) |
| | | { |
| | |
| | | Control c = requestControls.get(i); |
| | | String oid = c.getOID(); |
| | | |
| | | if (!AccessControlConfigManager.getInstance(). |
| | | getAccessControlHandler().isAllowed(parentDN, localOp, c)) |
| | | { |
| | | localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS); |
| | | int msgID = MSGID_CONTROL_INSUFFICIENT_ACCESS_RIGHTS; |
| | | localOp.appendErrorMessage(getMessage(msgID, oid)); |
| | | skipPostOperation = true; |
| | | break addProcessing; |
| | | } |
| | | |
| | | if (oid.equals(OID_LDAP_ASSERTION)) |
| | | { |
| | | LDAPAssertionRequestControl assertControl; |
| | |
| | | } |
| | | else if (oid.equals(OID_LDAP_READENTRY_POSTREAD)) |
| | | { |
| | | if (c instanceof LDAPAssertionRequestControl) |
| | | if (c instanceof LDAPPostReadRequestControl) |
| | | { |
| | | postReadRequest = (LDAPPostReadRequestControl) c; |
| | | } |
| | |
| | | break addProcessing; |
| | | } |
| | | |
| | | if (AccessControlConfigManager.getInstance() |
| | | .getAccessControlHandler().isProxiedAuthAllowed(localOp, |
| | | authorizationEntry) == false) { |
| | | localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS); |
| | | |
| | | int msgID = MSGID_ADD_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS; |
| | | localOp.appendErrorMessage(getMessage(msgID, |
| | | String.valueOf(entryDN))); |
| | | |
| | | skipPostOperation = true; |
| | | break addProcessing; |
| | | } |
| | | localOp.setAuthorizationEntry(authorizationEntry); |
| | | if (authorizationEntry == null) |
| | | { |
| | |
| | | break addProcessing; |
| | | } |
| | | |
| | | if (AccessControlConfigManager.getInstance() |
| | | .getAccessControlHandler().isProxiedAuthAllowed(localOp, |
| | | authorizationEntry) == false) { |
| | | localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS); |
| | | |
| | | int msgID = MSGID_ADD_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS; |
| | | localOp.appendErrorMessage(getMessage(msgID, |
| | | String.valueOf(entryDN))); |
| | | |
| | | skipPostOperation = true; |
| | | break addProcessing; |
| | | } |
| | | localOp.setAuthorizationEntry(authorizationEntry); |
| | | if (authorizationEntry == null) |
| | | { |
| | |
| | | /** |
| | | * Performs a local delete operation against a local backend. |
| | | * |
| | | * @param operation the operation to perform |
| | | * @param localOp the operation to perform |
| | | */ |
| | | private void processLocalDelete(LocalBackendDeleteOperation localOp) |
| | | { |
| | |
| | | Control c = requestControls.get(i); |
| | | String oid = c.getOID(); |
| | | |
| | | if (!AccessControlConfigManager.getInstance(). |
| | | getAccessControlHandler().isAllowed(entryDN, localOp, c)) |
| | | { |
| | | localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS); |
| | | int msgID = MSGID_CONTROL_INSUFFICIENT_ACCESS_RIGHTS; |
| | | localOp.appendErrorMessage(getMessage(msgID, oid)); |
| | | skipPostOperation = true; |
| | | break deleteProcessing; |
| | | } |
| | | |
| | | if (oid.equals(OID_LDAP_ASSERTION)) |
| | | { |
| | | LDAPAssertionRequestControl assertControl; |
| | |
| | | } |
| | | else if (oid.equals(OID_LDAP_READENTRY_PREREAD)) |
| | | { |
| | | if (c instanceof LDAPAssertionRequestControl) |
| | | if (c instanceof LDAPPreReadRequestControl) |
| | | { |
| | | preReadRequest = (LDAPPreReadRequestControl) c; |
| | | } |
| | |
| | | break deleteProcessing; |
| | | } |
| | | |
| | | if (AccessControlConfigManager.getInstance() |
| | | .getAccessControlHandler().isProxiedAuthAllowed(localOp, |
| | | authorizationEntry) == false) { |
| | | localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS); |
| | | |
| | | int msgID = MSGID_DELETE_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS; |
| | | localOp.appendErrorMessage( |
| | | getMessage(msgID, String.valueOf(entryDN))); |
| | | |
| | | skipPostOperation = true; |
| | | break deleteProcessing; |
| | | } |
| | | localOp.setAuthorizationEntry(authorizationEntry); |
| | | if (authorizationEntry == null) |
| | | { |
| | |
| | | break deleteProcessing; |
| | | } |
| | | |
| | | if (AccessControlConfigManager.getInstance() |
| | | .getAccessControlHandler().isProxiedAuthAllowed(localOp, |
| | | authorizationEntry) == false) { |
| | | localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS); |
| | | |
| | | int msgID = MSGID_DELETE_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS; |
| | | localOp.appendErrorMessage( |
| | | getMessage(msgID, String.valueOf(entryDN))); |
| | | |
| | | skipPostOperation = true; |
| | | break deleteProcessing; |
| | | } |
| | | localOp.setAuthorizationEntry(authorizationEntry); |
| | | if (authorizationEntry == null) |
| | | { |
| | |
| | | /** |
| | | * Perform a local compare operation against a local backend. |
| | | * |
| | | * @param operation - The operation to perform |
| | | * @param localOp - The operation to perform |
| | | */ |
| | | private void processLocalCompare(LocalBackendCompareOperation localOp) |
| | | { |
| | |
| | | Control c = requestControls.get(i); |
| | | String oid = c.getOID(); |
| | | |
| | | if (!AccessControlConfigManager.getInstance(). |
| | | getAccessControlHandler(). |
| | | isAllowed(entryDN, localOp, c)) |
| | | { |
| | | localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS); |
| | | int msgID = MSGID_CONTROL_INSUFFICIENT_ACCESS_RIGHTS; |
| | | localOp.appendErrorMessage(getMessage(msgID, oid)); |
| | | skipPostOperation = true; |
| | | break compareProcessing; |
| | | } |
| | | |
| | | if (oid.equals(OID_LDAP_ASSERTION)) |
| | | { |
| | | LDAPAssertionRequestControl assertControl; |
| | |
| | | break compareProcessing; |
| | | } |
| | | |
| | | if (AccessControlConfigManager.getInstance() |
| | | .getAccessControlHandler().isProxiedAuthAllowed(localOp, |
| | | authorizationEntry) == false) { |
| | | localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS); |
| | | |
| | | int msgID = MSGID_COMPARE_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS; |
| | | localOp.appendErrorMessage( |
| | | getMessage(msgID, String.valueOf(entryDN))); |
| | | |
| | | skipPostOperation = true; |
| | | break compareProcessing; |
| | | } |
| | | localOp.setAuthorizationEntry(authorizationEntry); |
| | | if (authorizationEntry == null) |
| | | { |
| | |
| | | break compareProcessing; |
| | | } |
| | | |
| | | if (AccessControlConfigManager.getInstance() |
| | | .getAccessControlHandler().isProxiedAuthAllowed(localOp, |
| | | authorizationEntry) == false) { |
| | | localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS); |
| | | |
| | | int msgID = MSGID_COMPARE_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS; |
| | | localOp.appendErrorMessage( |
| | | getMessage(msgID, String.valueOf(entryDN))); |
| | | |
| | | skipPostOperation = true; |
| | | break compareProcessing; |
| | | } |
| | | localOp.setAuthorizationEntry(authorizationEntry); |
| | | if (authorizationEntry == null) |
| | | { |
| | |
| | | /** |
| | | * Perform a local moddn operation against the local backend. |
| | | * |
| | | * @param operation - The operation to perform |
| | | * @param op - The operation to perform |
| | | */ |
| | | private void processLocalModifyDN(LocalBackendModifyDNOperation op) |
| | | { |
| | |
| | | Control c = requestControls.get(i); |
| | | String oid = c.getOID(); |
| | | |
| | | if (!AccessControlConfigManager.getInstance(). |
| | | getAccessControlHandler().isAllowed(entryDN, op, c)) |
| | | { |
| | | op.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS); |
| | | int msgID = MSGID_CONTROL_INSUFFICIENT_ACCESS_RIGHTS; |
| | | op.appendErrorMessage(getMessage(msgID, oid)); |
| | | skipPostOperation = true; |
| | | break modifyDNProcessing; |
| | | } |
| | | |
| | | if (oid.equals(OID_LDAP_ASSERTION)) |
| | | { |
| | | LDAPAssertionRequestControl assertControl; |
| | |
| | | } |
| | | else if (oid.equals(OID_LDAP_READENTRY_PREREAD)) |
| | | { |
| | | if (c instanceof LDAPAssertionRequestControl) |
| | | if (c instanceof LDAPPreReadRequestControl) |
| | | { |
| | | preReadRequest = (LDAPPreReadRequestControl) c; |
| | | } |
| | |
| | | } |
| | | else if (oid.equals(OID_LDAP_READENTRY_POSTREAD)) |
| | | { |
| | | if (c instanceof LDAPAssertionRequestControl) |
| | | if (c instanceof LDAPPostReadRequestControl) |
| | | { |
| | | postReadRequest = (LDAPPostReadRequestControl) c; |
| | | } |
| | |
| | | break modifyDNProcessing; |
| | | } |
| | | |
| | | if (AccessControlConfigManager.getInstance() |
| | | .getAccessControlHandler().isProxiedAuthAllowed(op, |
| | | authorizationEntry) == false) { |
| | | op.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS); |
| | | |
| | | int msgID = MSGID_MODDN_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS; |
| | | op.appendErrorMessage(getMessage(msgID, |
| | | String.valueOf(entryDN))); |
| | | |
| | | skipPostOperation = true; |
| | | break modifyDNProcessing; |
| | | } |
| | | op.setAuthorizationEntry(authorizationEntry); |
| | | if (authorizationEntry == null) |
| | | { |
| | |
| | | |
| | | break modifyDNProcessing; |
| | | } |
| | | if (AccessControlConfigManager.getInstance() |
| | | .getAccessControlHandler().isProxiedAuthAllowed(op, |
| | | authorizationEntry) == false) { |
| | | op.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS); |
| | | |
| | | int msgID = MSGID_MODDN_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS; |
| | | op.appendErrorMessage(getMessage(msgID, |
| | | String.valueOf(entryDN))); |
| | | |
| | | skipPostOperation = true; |
| | | break modifyDNProcessing; |
| | | } |
| | | |
| | | |
| | | op.setAuthorizationEntry(authorizationEntry); |
| | | if (authorizationEntry == null) |