/* * JBoss, Home of Professional Open Source. * Copyright 2011, Red Hat, Inc., and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.as.controller.audit; import java.net.InetAddress; import java.util.List; import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.PathAddress; import org.jboss.as.controller.audit.SyslogAuditLogHandler.Facility; import org.jboss.as.controller.registry.Resource; import org.jboss.as.core.security.AccessMechanism; import org.jboss.dmr.ModelNode; /** * @author John Bailey * @author Kabir Khan */ public interface AuditLogger { enum Status { /** The logger is queueing log messages in memory until it is switched to status {@link #LOGGING} or status {@link #DISABLED} */ QUEUEING, /** The logger is actively logging messages to an external store */ LOGGING, /** * The logger will log one more record, after which it will switch to status {@link #DISABLED}. * This status is set by an operation that is disabling logging, as a means of ensuring that operation * is itself logged. */ DISABLE_NEXT, /** The logger is discarding any log requests, and any {@link #QUEUEING queued} requests have been discarded */ DISABLED } void log(boolean readOnly, OperationContext.ResultAction resultAction, String userId, String domainUUID, AccessMechanism accessMechanism, InetAddress remoteAddress, final Resource resultantModel, List<ModelNode> operations); void logJmxMethodAccess(final boolean readOnly, final String userId, final String domainUUID, final AccessMechanism accessMechanism, InetAddress remoteAddress, final String methodName, final String[] methodSignature, final Object[] methodParams, final Throwable error); /** * An audit logger that doesn't log. */ ManagedAuditLogger NO_OP_LOGGER = new ManagedAuditLogger() { @Override public boolean isLogReadOnly() { return false; } @Override public void setLogReadOnly(boolean logReadOnly) { } @Override public boolean isLogBoot() { return false; } @Override public void setLogBoot(boolean logBoot) { } public Status getLoggerStatus() { return Status.DISABLED; } @Override public void log(boolean readOnly, OperationContext.ResultAction resultAction, String userId, String domainUUID, AccessMechanism accessMechanism, InetAddress remoteAddress, Resource resultantModel, List<ModelNode> operations) { } @Override public void logJmxMethodAccess(boolean readOnly, String userId, String domainUUID, AccessMechanism accessMechanism, InetAddress remoteAddress, String methodName, String[] methodSignature, Object[] methodParams, Throwable error) { } @Override public void setLoggerStatus(Status newStatus) { } @Override public void removeFormatter(String name) { } @Override public void addFormatter(AuditLogItemFormatter formatter) { } @Override public JsonAuditLogItemFormatter getJsonFormatter(String name) { return null; } @Override public AuditLogHandlerUpdater getUpdater() { return new ManagedAuditLogger.AuditLogHandlerUpdater(){ @Override public void addHandler(AuditLogHandler handler) { } @Override public void updateHandler(AuditLogHandler handler) { } @Override public void removeHandler(String name) { } @Override public void addHandlerReference(PathAddress referenceAddress) { } @Override public void removeHandlerReference(PathAddress referenceAddress) { } @Override public void rollbackChanges() { } @Override public void applyChanges() { } }; } @Override public ManagedAuditLogger createNewConfiguration(boolean manualCommit) { return this; } @Override public void updateHandlerFormatter(String name, String formatterName) { } @Override public void recycleHandler(String name) { } @Override public int getHandlerFailureCount(String name) { return 0; } @Override public boolean getHandlerDisabledDueToFailure(String name) { return false; } @Override public void updateHandlerMaxFailureCount(String name, int count) { } @Override public void bootDone() { } @Override public void startBoot() { } @Override public void updateSyslogHandlerFacility(String name, Facility facility) { } @Override public void updateSyslogHandlerAppName(String name, String appName) { } @Override public void updateSyslogHandlerReconnectTimeout(String name, int reconnectTimeout) { } @Override public void updateInMemoryHandlerMaxHistory(String name, int maxHistory) { } }; }