diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/BaseCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/BaseCommand.java index e38c0802f5..59972e2119 100644 --- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/BaseCommand.java +++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/BaseCommand.java @@ -16,6 +16,7 @@ package com.google.gerrit.sshd; import static java.nio.charset.StandardCharsets.UTF_8; +import com.google.common.base.Joiner; import com.google.common.util.concurrent.Atomics; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.TimeUtil; @@ -98,6 +99,9 @@ public abstract class BaseCommand implements Command { /** Unparsed command line options. */ private String[] argv; + /** trimmed command line arguments. */ + private String[] trimmedArgv; + public BaseCommand() { task = Atomics.newReference(); } @@ -143,6 +147,26 @@ public abstract class BaseCommand implements Command { this.argv = argv; } + /** + * Trim the argument if it is spanning multiple lines. + * + * @return the arguments where all the multiple-line fields are trimmed. + */ + protected String[] getTrimmedArguments() { + if (trimmedArgv == null && argv != null) { + trimmedArgv = new String[argv.length]; + for (int i = 0; i < argv.length; i++) { + String arg = argv[i]; + int indexOfMultiLine = arg.indexOf("\n"); + if (indexOfMultiLine > -1) { + arg = arg.substring(0, indexOfMultiLine).concat(" [trimmed]"); + } + trimmedArgv[i] = arg; + } + } + return trimmedArgv; + } + @Override public void destroy() { Future future = task.getAndSet(null); @@ -370,8 +394,11 @@ public abstract class BaseCommand implements Command { } protected String getTaskDescription() { - StringBuilder m = new StringBuilder(); - m.append(context.getCommandLine()); + StringBuilder m = new StringBuilder(commandName); + String[] ta = getTrimmedArguments(); + if (ta != null) { + m.append(Joiner.on(" ").join(ta)); + } return m.toString(); } diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/SshLog.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/SshLog.java index dfd56f1f88..5d840f9217 100644 --- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/SshLog.java +++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/SshLog.java @@ -14,6 +14,7 @@ package com.google.gerrit.sshd; +import com.google.common.base.Joiner; import com.google.common.collect.ListMultimap; import com.google.common.collect.MultimapBuilder; import com.google.gerrit.audit.AuditService; @@ -282,9 +283,9 @@ class SshLog implements LifecycleListener { return "Command was already destroyed"; } StringBuilder commandName = new StringBuilder(dcmd.getCommandName()); - String[] args = dcmd.getArguments(); - for (int i = 1; i < args.length; i++) { - commandName.append(".").append(args[i]); + String[] trimmedArgs = dcmd.getTrimmedArguments(); + if (trimmedArgs != null) { + commandName.append(Joiner.on(".").join(trimmedArgs)); } return commandName.toString(); }