Support reloading of sshd.requestlog configuration
Change-Id: Ic885392e4fb5479920e7619a244394febeaf30b6
This commit is contained in:
@@ -23,6 +23,9 @@ import com.google.gerrit.server.IdentifiedUser;
|
||||
import com.google.gerrit.server.PeerDaemonUser;
|
||||
import com.google.gerrit.server.audit.AuditService;
|
||||
import com.google.gerrit.server.audit.SshAuditEvent;
|
||||
import com.google.gerrit.server.config.ConfigKey;
|
||||
import com.google.gerrit.server.config.ConfigUpdatedEvent;
|
||||
import com.google.gerrit.server.config.GerritConfigListener;
|
||||
import com.google.gerrit.server.config.GerritServerConfig;
|
||||
import com.google.gerrit.server.util.IdGenerator;
|
||||
import com.google.gerrit.server.util.SystemLog;
|
||||
@@ -30,6 +33,8 @@ import com.google.gerrit.sshd.SshScope.Context;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Provider;
|
||||
import com.google.inject.Singleton;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import org.apache.log4j.AsyncAppender;
|
||||
import org.apache.log4j.Level;
|
||||
import org.apache.log4j.Logger;
|
||||
@@ -37,7 +42,7 @@ import org.apache.log4j.spi.LoggingEvent;
|
||||
import org.eclipse.jgit.lib.Config;
|
||||
|
||||
@Singleton
|
||||
class SshLog implements LifecycleListener {
|
||||
class SshLog implements LifecycleListener, GerritConfigListener {
|
||||
private static final Logger log = Logger.getLogger(SshLog.class);
|
||||
private static final String LOG_NAME = "sshd_log";
|
||||
private static final String P_SESSION = "session";
|
||||
@@ -50,8 +55,11 @@ class SshLog implements LifecycleListener {
|
||||
|
||||
private final Provider<SshSession> session;
|
||||
private final Provider<Context> context;
|
||||
private final AsyncAppender async;
|
||||
private volatile AsyncAppender async;
|
||||
private final AuditService auditService;
|
||||
private final SystemLog systemLog;
|
||||
|
||||
private final Object lock = new Object();
|
||||
|
||||
@Inject
|
||||
SshLog(
|
||||
@@ -63,12 +71,34 @@ class SshLog implements LifecycleListener {
|
||||
this.session = session;
|
||||
this.context = context;
|
||||
this.auditService = auditService;
|
||||
this.systemLog = systemLog;
|
||||
|
||||
if (!config.getBoolean("sshd", "requestLog", true)) {
|
||||
async = null;
|
||||
return;
|
||||
if (config.getBoolean("sshd", "requestLog", true)) {
|
||||
enableLogging();
|
||||
}
|
||||
}
|
||||
|
||||
/** @return true if a change in state has occurred */
|
||||
public boolean enableLogging() {
|
||||
synchronized (lock) {
|
||||
if (async == null) {
|
||||
async = systemLog.createAsyncAppender(LOG_NAME, new SshLogLayout());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/** @return true if a change in state has occurred */
|
||||
public boolean disableLogging() {
|
||||
synchronized (lock) {
|
||||
if (async != null) {
|
||||
async.close();
|
||||
async = null;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
async = systemLog.createAsyncAppender(LOG_NAME, new SshLogLayout());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -76,9 +106,7 @@ class SshLog implements LifecycleListener {
|
||||
|
||||
@Override
|
||||
public void stop() {
|
||||
if (async != null) {
|
||||
async.close();
|
||||
}
|
||||
disableLogging();
|
||||
}
|
||||
|
||||
void onLogin() {
|
||||
@@ -288,4 +316,23 @@ class SshLog implements LifecycleListener {
|
||||
}
|
||||
return commandName.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ConfigUpdatedEvent.Update> configUpdated(ConfigUpdatedEvent event) {
|
||||
ConfigKey sshdRequestLog = ConfigKey.create("sshd", "requestLog");
|
||||
if (!event.isValueUpdated(sshdRequestLog)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
boolean enabled = event.getNewConfig().getBoolean("sshd", "requestLog", true);
|
||||
boolean stateUpdated;
|
||||
if (enabled) {
|
||||
stateUpdated = enableLogging();
|
||||
} else {
|
||||
stateUpdated = disableLogging();
|
||||
}
|
||||
return stateUpdated
|
||||
? Collections.singletonList(event.accept(sshdRequestLog))
|
||||
: Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user