Repository: mina-sshd Updated Branches: refs/heads/master 6de239d9b -> 9dbe5fe08
Activated some more PMD rules Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/9dbe5fe0 Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/9dbe5fe0 Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/9dbe5fe0 Branch: refs/heads/master Commit: 9dbe5fe084b4e7cbfef62371f881f6c65f26f17b Parents: 6de239d Author: Lyor Goldstein <lyor.goldst...@gmail.com> Authored: Mon May 29 20:01:20 2017 +0300 Committer: Lyor Goldstein <lyor.goldst...@gmail.com> Committed: Mon May 29 20:46:45 2017 +0300 ---------------------------------------------------------------------- .../org/apache/sshd/agent/unix/AprLibrary.java | 4 +- .../sshd/client/subsystem/sftp/SftpCommand.java | 68 ++++++++++++++++++++ .../sshd/common/channel/AbstractChannel.java | 1 + .../common/channel/ChannelAsyncInputStream.java | 8 ++- .../apache/sshd/common/channel/SttySupport.java | 6 +- .../common/compression/CompressionZlib.java | 9 ++- .../sshd/common/file/util/BaseFileSystem.java | 13 ++-- .../apache/sshd/common/forward/SocksProxy.java | 4 +- .../org/apache/sshd/common/scp/ScpHelper.java | 2 +- .../common/session/helpers/AbstractSession.java | 11 ++-- .../common/subsystem/sftp/SftpConstants.java | 2 +- .../apache/sshd/common/util/SelectorUtils.java | 21 +++--- .../sshd/common/util/buffer/BufferUtils.java | 2 + .../sshd/common/util/io/DirectoryScanner.java | 5 +- .../org/apache/sshd/common/util/io/IoUtils.java | 4 +- .../sshd/server/auth/gss/GSSAuthenticator.java | 15 ++--- .../java/org/apache/sshd/server/kex/Moduli.java | 5 +- .../server/session/ServerUserAuthService.java | 3 +- .../server/shell/TtyFilterOutputStream.java | 2 +- .../java/org/apache/sshd/client/ClientTest.java | 2 + .../sshd/client/subsystem/sftp/SftpTest.java | 4 +- .../sshd/common/util/SttySupportTest.java | 3 + .../AbstractGeneratorHostKeyProviderTest.java | 20 +++--- .../sshd/util/test/AsyncEchoShellFactory.java | 13 ++-- .../apache/sshd/util/test/BogusEnvironment.java | 3 + sshd-pmd-ruleset.xml | 20 +++++- 26 files changed, 174 insertions(+), 76 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/main/java/org/apache/sshd/agent/unix/AprLibrary.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/unix/AprLibrary.java b/sshd-core/src/main/java/org/apache/sshd/agent/unix/AprLibrary.java index 34940ab..2c0bfb8 100644 --- a/sshd-core/src/main/java/org/apache/sshd/agent/unix/AprLibrary.java +++ b/sshd-core/src/main/java/org/apache/sshd/agent/unix/AprLibrary.java @@ -148,11 +148,9 @@ public final class AprLibrary { } static void secureLocalSocket(String authSocket, long handle) throws IOException { + // should be ok on windows if (OsUtils.isUNIX()) { chmodOwner(authSocket, false); - - } else { - // should be ok on windows } } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpCommand.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpCommand.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpCommand.java index 8abb8d9..cc720c7 100644 --- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpCommand.java +++ b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpCommand.java @@ -280,6 +280,10 @@ public class SftpCommand implements Channel { } private static class ExitCommandExecutor implements CommandExecutor { + ExitCommandExecutor() { + super(); + } + @Override public String getName() { return "exit"; @@ -313,6 +317,10 @@ public class SftpCommand implements Channel { } private class SessionCommandExecutor implements CommandExecutor { + SessionCommandExecutor() { + super(); + } + @Override public String getName() { return "session"; @@ -339,6 +347,10 @@ public class SftpCommand implements Channel { } private class InfoCommandExecutor implements CommandExecutor { + InfoCommandExecutor() { + super(); + } + @Override public String getName() { return "info"; @@ -373,6 +385,10 @@ public class SftpCommand implements Channel { } private class VersionCommandExecutor implements CommandExecutor { + VersionCommandExecutor() { + super(); + } + @Override public String getName() { return "version"; @@ -388,6 +404,10 @@ public class SftpCommand implements Channel { } private class CdCommandExecutor extends PwdCommandExecutor { + CdCommandExecutor() { + super(); + } + @Override public String getName() { return "cd"; @@ -405,6 +425,10 @@ public class SftpCommand implements Channel { } private class LcdCommandExecutor extends PwdCommandExecutor { + LcdCommandExecutor() { + super(); + } + @Override public String getName() { return "lcd"; @@ -426,6 +450,10 @@ public class SftpCommand implements Channel { } private class MkdirCommandExecutor implements CommandExecutor { + MkdirCommandExecutor() { + super(); + } + @Override public String getName() { return "mkdir"; @@ -443,6 +471,10 @@ public class SftpCommand implements Channel { } private class LsCommandExecutor implements CommandExecutor { + LsCommandExecutor() { + super(); + } + @Override public String getName() { return "ls"; @@ -478,6 +510,10 @@ public class SftpCommand implements Channel { } private class RmCommandExecutor implements CommandExecutor { + RmCommandExecutor() { + super(); + } + @Override public String getName() { return "rm"; @@ -557,6 +593,10 @@ public class SftpCommand implements Channel { } private class RmdirCommandExecutor implements CommandExecutor { + RmdirCommandExecutor() { + super(); + } + @Override public String getName() { return "rmdir"; @@ -574,6 +614,10 @@ public class SftpCommand implements Channel { } private class RenameCommandExecutor implements CommandExecutor { + RenameCommandExecutor() { + super(); + } + @Override public String getName() { return "rename"; @@ -593,6 +637,10 @@ public class SftpCommand implements Channel { } private class StatVfsCommandExecutor implements CommandExecutor { + StatVfsCommandExecutor() { + super(); + } + @Override public String getName() { return StatVfsExtensionParser.NAME; @@ -627,6 +675,10 @@ public class SftpCommand implements Channel { } private class LStatCommandExecutor implements CommandExecutor { + LStatCommandExecutor() { + super(); + } + @Override public String getName() { return "lstat"; @@ -646,6 +698,10 @@ public class SftpCommand implements Channel { } private class ReadLinkCommandExecutor implements CommandExecutor { + ReadLinkCommandExecutor() { + super(); + } + @Override public String getName() { return "readlink"; @@ -665,6 +721,10 @@ public class SftpCommand implements Channel { } private class HelpCommandExecutor implements CommandExecutor { + HelpCommandExecutor() { + super(); + } + @Override public String getName() { return "help"; @@ -825,6 +885,10 @@ public class SftpCommand implements Channel { } private class GetCommandExecutor extends TransferCommandExecutor { + GetCommandExecutor() { + super(); + } + @Override public String getName() { return "get"; @@ -838,6 +902,10 @@ public class SftpCommand implements Channel { } private class PutCommandExecutor extends TransferCommandExecutor { + PutCommandExecutor() { + super(); + } + @Override public String getName() { return "put"; http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java b/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java index de183bc..8f32a2b 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java @@ -644,6 +644,7 @@ public abstract class AbstractChannel if (gracefulState.compareAndSet(GracefulState.Opened, GracefulState.CloseSent)) { // Waiting for CLOSE message to come back from the remote side + return; } else if (gracefulState.compareAndSet(GracefulState.CloseReceived, GracefulState.Closed)) { gracefulFuture.setClosed(); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncInputStream.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncInputStream.java b/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncInputStream.java index 3bd0044..0be24fe 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncInputStream.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncInputStream.java @@ -101,7 +101,9 @@ public class ChannelAsyncInputStream extends AbstractCloseable implements IoInpu synchronized (buffer) { if (buffer.available() > 0) { if (resume) { -// LOGGER.debug("Resuming read due to incoming data"); + if (log.isDebugEnabled()) { + log.debug("Resuming read due to incoming data on {}", this); + } } future = pending; pending = null; @@ -111,7 +113,9 @@ public class ChannelAsyncInputStream extends AbstractCloseable implements IoInpu } } else { if (!resume) { -// LOGGER.debug("Delaying read until data is available"); + if (log.isDebugEnabled()) { + log.debug("Delaying read until data is available on {}", this); + } } } } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/main/java/org/apache/sshd/common/channel/SttySupport.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/channel/SttySupport.java b/sshd-core/src/main/java/org/apache/sshd/common/channel/SttySupport.java index b2f712b..05cbfbf 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/channel/SttySupport.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/channel/SttySupport.java @@ -23,9 +23,9 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.Charset; +import java.util.EnumMap; import java.util.Map; import java.util.StringTokenizer; -import java.util.TreeMap; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; @@ -55,10 +55,11 @@ public final class SttySupport { } public static Map<PtyMode, Integer> parsePtyModes(String stty) { - Map<PtyMode, Integer> modes = new TreeMap<>(); + Map<PtyMode, Integer> modes = new EnumMap<>(PtyMode.class); for (PtyMode mode : PtyMode.values()) { if (mode == PtyMode.TTY_OP_ISPEED || mode == PtyMode.TTY_OP_OSPEED) { // TODO ... + continue; } else { String str = mode.name().toLowerCase(); // Are we looking for a character? @@ -79,6 +80,7 @@ public final class SttySupport { } } } + return modes; } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/main/java/org/apache/sshd/common/compression/CompressionZlib.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/compression/CompressionZlib.java b/sshd-core/src/main/java/org/apache/sshd/common/compression/CompressionZlib.java index 5b76754..e365b91 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/compression/CompressionZlib.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/compression/CompressionZlib.java @@ -64,8 +64,9 @@ public class CompressionZlib extends BaseCompression { public void compress(Buffer buffer) throws IOException { compresser.setInput(buffer.array(), buffer.rpos(), buffer.available()); buffer.wpos(buffer.rpos()); - int len; - while ((len = compresser.deflate(tmpbuf, 0, tmpbuf.length, Deflater.SYNC_FLUSH)) > 0) { + for (int len = compresser.deflate(tmpbuf, 0, tmpbuf.length, Deflater.SYNC_FLUSH); + len > 0; + len = compresser.deflate(tmpbuf, 0, tmpbuf.length, Deflater.SYNC_FLUSH)) { buffer.putRawBytes(tmpbuf, 0, len); } } @@ -73,14 +74,12 @@ public class CompressionZlib extends BaseCompression { @Override public void uncompress(Buffer from, Buffer to) throws IOException { decompresser.setInput(from.array(), from.rpos(), from.available()); - int len; try { - while ((len = decompresser.inflate(tmpbuf)) > 0) { + for (int len = decompresser.inflate(tmpbuf); len > 0; len = decompresser.inflate(tmpbuf)) { to.putRawBytes(tmpbuf, 0, len); } } catch (DataFormatException e) { throw new IOException("Error decompressing data", e); } } - } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/main/java/org/apache/sshd/common/file/util/BaseFileSystem.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/file/util/BaseFileSystem.java b/sshd-core/src/main/java/org/apache/sshd/common/file/util/BaseFileSystem.java index c8c394b..4c5d92d 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/file/util/BaseFileSystem.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/file/util/BaseFileSystem.java @@ -162,7 +162,8 @@ public abstract class BaseFileSystem<T extends Path> extends FileSystem { char ch = arr[i]; switch (ch) { case '\\': - if (++i >= arr.length) { + i++; + if (i >= arr.length) { sb.append('\\'); } else { char next = arr[i]; @@ -183,10 +184,10 @@ public abstract class BaseFileSystem<T extends Path> extends FileSystem { } break; case '*': - sb.append(inClass == 0 ? ".*" : "*"); + sb.append((inClass == 0) ? ".*" : "*"); break; case '?': - sb.append(inClass == 0 ? '.' : '?'); + sb.append((inClass == 0) ? '.' : '?'); break; case '[': inClass++; @@ -206,13 +207,13 @@ public abstract class BaseFileSystem<T extends Path> extends FileSystem { case '$': case '@': case '%': - if (inClass == 0 || (firstIndexInClass == i && ch == '^')) { + if ((inClass == 0) || ((firstIndexInClass == i) && (ch == '^'))) { sb.append('\\'); } sb.append(ch); break; case '!': - sb.append(firstIndexInClass == i ? '^' : '!'); + sb.append((firstIndexInClass == i) ? '^' : '!'); break; case '{': inGroup++; @@ -223,7 +224,7 @@ public abstract class BaseFileSystem<T extends Path> extends FileSystem { sb.append(')'); break; case ',': - sb.append(inGroup > 0 ? '|' : ','); + sb.append((inGroup > 0) ? '|' : ','); break; default: sb.append(ch); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/main/java/org/apache/sshd/common/forward/SocksProxy.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/forward/SocksProxy.java b/sshd-core/src/main/java/org/apache/sshd/common/forward/SocksProxy.java index e12b0bb..893d145 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/forward/SocksProxy.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/forward/SocksProxy.java @@ -182,13 +182,11 @@ public class SocksProxy extends AbstractCloseable implements IoHandler { private String getNTString(Buffer buffer) { StringBuilder sb = new StringBuilder(); - char c; - while ((c = (char) getUByte(buffer)) != 0) { + for (char c = (char) getUByte(buffer); c != '\0'; c = (char) getUByte(buffer)) { sb.append(c); } return sb.toString(); } - } /** http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/main/java/org/apache/sshd/common/scp/ScpHelper.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/scp/ScpHelper.java b/sshd-core/src/main/java/org/apache/sshd/common/scp/ScpHelper.java index 3b20642..a7e46f9 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/scp/ScpHelper.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/scp/ScpHelper.java @@ -62,7 +62,7 @@ import org.apache.sshd.common.util.logging.AbstractLoggingBean; /** * @author <a href="mailto:d...@mina.apache.org">Apache MINA SSHD Project</a> */ -@SuppressWarnings("OctalInteger") +@SuppressWarnings("PMD.AvoidUsingOctalValues") public class ScpHelper extends AbstractLoggingBean implements SessionHolder<Session> { /** * Command prefix used to identify SCP commands http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractSession.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractSession.java b/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractSession.java index eccb87f..ac2b272 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractSession.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractSession.java @@ -796,8 +796,9 @@ public abstract class AbstractSession extends AbstractKexFactoryManager implemen log.debug("handleNewKeys({}) Dequeing {} pending packets", this, pendingPackets.size()); } synchronized (encodeLock) { - PendingWriteFuture future; - while ((future = pendingPackets.poll()) != null) { + for (PendingWriteFuture future = pendingPackets.poll(); + future != null; + future = pendingPackets.poll()) { doWritePacket(future.getBuffer()).addListener(future); } } @@ -923,7 +924,7 @@ public abstract class AbstractSession extends AbstractKexFactoryManager implemen // if anyone waiting for global response notify them about the closing session synchronized (requestResult) { requestResult.set(GenericUtils.NULL); - requestResult.notify(); + requestResult.notifyAll(); } // Fire 'close' event @@ -2073,7 +2074,7 @@ public abstract class AbstractSession extends AbstractKexFactoryManager implemen synchronized (requestResult) { requestResult.set(resultBuf); resetIdleTimeout(); - requestResult.notify(); + requestResult.notifyAll(); } } @@ -2087,7 +2088,7 @@ public abstract class AbstractSession extends AbstractKexFactoryManager implemen synchronized (requestResult) { requestResult.set(GenericUtils.NULL); resetIdleTimeout(); - requestResult.notify(); + requestResult.notifyAll(); } } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/SftpConstants.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/SftpConstants.java b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/SftpConstants.java index 39ca03d..ad6234c 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/SftpConstants.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/SftpConstants.java @@ -27,7 +27,7 @@ import org.apache.sshd.common.util.logging.LoggingUtils; /** * @author <a href="mailto:d...@mina.apache.org">Apache MINA SSHD Project</a> */ -@SuppressWarnings("OctalInteger") +@SuppressWarnings("PMD.AvoidUsingOctalValues") public final class SftpConstants { public static final String SFTP_SUBSYSTEM_NAME = "sftp"; http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/main/java/org/apache/sshd/common/util/SelectorUtils.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/util/SelectorUtils.java b/sshd-core/src/main/java/org/apache/sshd/common/util/SelectorUtils.java index 839eb7e..7fa1927 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/util/SelectorUtils.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/util/SelectorUtils.java @@ -362,8 +362,8 @@ public final class SelectorUtils { * @return <code>true</code> if the string matches against the pattern, * or <code>false</code> otherwise. */ - public static boolean match(String pattern, String str, - boolean isCaseSensitive) { + @SuppressWarnings("PMD.AssignmentInOperand") + public static boolean match(String pattern, String str, boolean isCaseSensitive) { char[] patArr = pattern.toCharArray(); char[] strArr = str.toCharArray(); int patIdxStart = 0; @@ -387,7 +387,7 @@ public final class SelectorUtils { } for (int i = 0; i <= patIdxEnd; i++) { ch = patArr[i]; - if (ch != '?' && !equals(ch, strArr[i], isCaseSensitive)) { + if ((ch != '?') && (!equals(ch, strArr[i], isCaseSensitive))) { return false; // Character mismatch } } @@ -400,14 +400,15 @@ public final class SelectorUtils { // Process characters before first star // CHECKSTYLE:OFF - while ((ch = patArr[patIdxStart]) != '*' && strIdxStart <= strIdxEnd) { - if (ch != '?' && !equals(ch, strArr[strIdxStart], isCaseSensitive)) { + while (((ch = patArr[patIdxStart]) != '*') && (strIdxStart <= strIdxEnd)) { + if ((ch != '?') && (!equals(ch, strArr[strIdxStart], isCaseSensitive))) { return false; // Character mismatch } patIdxStart++; strIdxStart++; } // CHECKSTYLE:ON + if (strIdxStart > strIdxEnd) { // All characters in the string are used. Check if only '*'s are // left in the pattern. If so, we succeeded. Otherwise failure. @@ -421,14 +422,15 @@ public final class SelectorUtils { // Process characters after last star // CHECKSTYLE:OFF - while ((ch = patArr[patIdxEnd]) != '*' && strIdxStart <= strIdxEnd) { - if (ch != '?' && !equals(ch, strArr[strIdxEnd], isCaseSensitive)) { + while (((ch = patArr[patIdxEnd]) != '*') && (strIdxStart <= strIdxEnd)) { + if ((ch != '?') && (!equals(ch, strArr[strIdxEnd], isCaseSensitive))) { return false; // Character mismatch } patIdxEnd--; strIdxEnd--; } // CHECKSTYLE:ON + if (strIdxStart > strIdxEnd) { // All characters in the string are used. Check if only '*'s are // left in the pattern. If so, we succeeded. Otherwise failure. @@ -440,9 +442,8 @@ public final class SelectorUtils { return true; } - // process pattern between stars. padIdxStart and patIdxEnd point - // always to a '*'. - while (patIdxStart != patIdxEnd && strIdxStart <= strIdxEnd) { + // process pattern between stars. padIdxStart and patIdxEnd point always to a '*'. + while ((patIdxStart != patIdxEnd) && (strIdxStart <= strIdxEnd)) { int patIdxTmp = -1; for (int i = patIdxStart + 1; i <= patIdxEnd; i++) { if (patArr[i] == '*') { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/main/java/org/apache/sshd/common/util/buffer/BufferUtils.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/util/buffer/BufferUtils.java b/sshd-core/src/main/java/org/apache/sshd/common/util/buffer/BufferUtils.java index 8b111ca..c13cd9e 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/util/buffer/BufferUtils.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/util/buffer/BufferUtils.java @@ -483,6 +483,7 @@ public final class BufferUtils { } } + @SuppressWarnings("PMD.AssignmentInOperand") public static boolean equals(byte[] a1, int a1Offset, byte[] a2, int a2Offset, int length) { int len1 = NumberUtils.length(a1); int len2 = NumberUtils.length(a2); @@ -495,6 +496,7 @@ public final class BufferUtils { return false; } } + return true; } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/main/java/org/apache/sshd/common/util/io/DirectoryScanner.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/util/io/DirectoryScanner.java b/sshd-core/src/main/java/org/apache/sshd/common/util/io/DirectoryScanner.java index 0748aa6..6cd8ad9 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/util/io/DirectoryScanner.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/util/io/DirectoryScanner.java @@ -358,6 +358,7 @@ public class DirectoryScanner { * @param max maximum number of values to replace, or <code>-1</code> if no maximum * @return the text with any replacements processed */ + @SuppressWarnings("PMD.AssignmentInOperand") public static String replace(String text, String repl, String with, int max) { if ((text == null) || (repl == null) || (with == null) || (repl.length() == 0)) { return text; @@ -365,8 +366,7 @@ public class DirectoryScanner { StringBuilder buf = new StringBuilder(text.length()); int start = 0; - int end; - while ((end = text.indexOf(repl, start)) != -1) { + for (int end = text.indexOf(repl, start); end != -1; end = text.indexOf(repl, start)) { buf.append(text.substring(start, end)).append(with); start = end + repl.length(); @@ -377,5 +377,4 @@ public class DirectoryScanner { buf.append(text.substring(start)); return buf.toString(); } - } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/main/java/org/apache/sshd/common/util/io/IoUtils.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/util/io/IoUtils.java b/sshd-core/src/main/java/org/apache/sshd/common/util/io/IoUtils.java index 3f9bfcd..10aa59a 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/util/io/IoUtils.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/util/io/IoUtils.java @@ -124,11 +124,11 @@ public final class IoUtils { public static long copy(InputStream source, OutputStream sink, int bufferSize) throws IOException { long nread = 0L; byte[] buf = new byte[bufferSize]; - int n; - while ((n = source.read(buf)) > 0) { + for (int n = source.read(buf); n > 0; n = source.read(buf)) { sink.write(buf, 0, n); nread += n; } + return nread; } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/main/java/org/apache/sshd/server/auth/gss/GSSAuthenticator.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/auth/gss/GSSAuthenticator.java b/sshd-core/src/main/java/org/apache/sshd/server/auth/gss/GSSAuthenticator.java index 7a97ab6..f9540f8 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/auth/gss/GSSAuthenticator.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/gss/GSSAuthenticator.java @@ -36,23 +36,23 @@ import org.ietf.jgss.GSSManager; */ public class GSSAuthenticator { - // Options: // // Service principal name: if unset, use host/hostname - private String servicePrincipalName; // Location of Kerberos key table; if unset use default - private String keytabFile; + public GSSAuthenticator() { + super(); + } + /** * Overridable method to get GSS manager suitable for current environment. * * @return A new manager */ - public GSSManager getGSSManager() { return GSSManager.getInstance(); } @@ -67,11 +67,8 @@ public class GSSAuthenticator { * @throws LoginException If the subject could not be found * @throws GSSException If the credential could not be obtained */ - public GSSCredential getGSSCredential(GSSManager mgr) throws UnknownHostException, LoginException, GSSException { - String name = servicePrincipalName; - if (name == null) { name = "host/" + InetAddress.getLocalHost().getCanonicalHostName(); } @@ -87,7 +84,6 @@ public class GSSAuthenticator { * @param user The user name from the initial request * @return <code>true</code> if the user is valid, <code>false</code> if invalid */ - public boolean validateInitialUser(ServerSession session, String user) { return true; } @@ -100,7 +96,6 @@ public class GSSAuthenticator { * @param identity The identity from the GSS context * @return <code>true</code> if the identity is valid, <code>false</code> if invalid */ - public boolean validateIdentity(ServerSession session, String identity) { return true; } @@ -110,7 +105,6 @@ public class GSSAuthenticator { * * @param servicePrincipalName The principal name */ - public void setServicePrincipalName(String servicePrincipalName) { this.servicePrincipalName = servicePrincipalName; } @@ -120,7 +114,6 @@ public class GSSAuthenticator { * * @param keytabFile The location of the keytab */ - public void setKeytabFile(String keytabFile) { this.keytabFile = keytabFile; } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/main/java/org/apache/sshd/server/kex/Moduli.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/kex/Moduli.java b/sshd-core/src/main/java/org/apache/sshd/server/kex/Moduli.java index edc08d7..79bf988 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/kex/Moduli.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/kex/Moduli.java @@ -45,13 +45,13 @@ public final class Moduli { // Private constructor private Moduli() { + throw new UnsupportedOperationException("No instance allowed"); } public static List<DhGroup> parseModuli(URL url) throws IOException { List<DhGroup> groups = new ArrayList<>(); try (BufferedReader r = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8))) { - String line; - while ((line = r.readLine()) != null) { + for (String line = r.readLine(); line != null; line = r.readLine()) { line = line.trim(); if (line.startsWith("#")) { continue; @@ -87,6 +87,7 @@ public final class Moduli { group.p = new BigInteger(parts[6], 16); groups.add(group); } + return groups; } } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/main/java/org/apache/sshd/server/session/ServerUserAuthService.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/session/ServerUserAuthService.java b/sshd-core/src/main/java/org/apache/sshd/server/session/ServerUserAuthService.java index c33261e..0c58a52 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/session/ServerUserAuthService.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/session/ServerUserAuthService.java @@ -171,7 +171,8 @@ public class ServerUserAuthService extends AbstractCloseable implements Service, this.authUserName = username; this.authService = service; } else if (this.authUserName.equals(username) && this.authService.equals(service)) { - if (nbAuthRequests++ > maxAuthRequests) { + nbAuthRequests++; + if (nbAuthRequests > maxAuthRequests) { session.disconnect(SshConstants.SSH2_DISCONNECT_PROTOCOL_ERROR, "Too many authentication failures: " + nbAuthRequests); return; } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/main/java/org/apache/sshd/server/shell/TtyFilterOutputStream.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/shell/TtyFilterOutputStream.java b/sshd-core/src/main/java/org/apache/sshd/server/shell/TtyFilterOutputStream.java index 85e4707..2dd380a 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/shell/TtyFilterOutputStream.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/shell/TtyFilterOutputStream.java @@ -66,12 +66,12 @@ public class TtyFilterOutputStream extends FilterOutputStream { } } - @SuppressWarnings("StatementWithEmptyBody") protected void handleCR() throws IOException { if (ttyOptions.contains(PtyMode.ICRNL)) { writeRawOutput('\n'); // Map CR to NL on input } else if (ttyOptions.contains(PtyMode.IGNCR)) { // Ignore CR on input + return; } else { writeRawOutput('\r'); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/test/java/org/apache/sshd/client/ClientTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/client/ClientTest.java b/sshd-core/src/test/java/org/apache/sshd/client/ClientTest.java index 7b30c7f..4968282 100644 --- a/sshd-core/src/test/java/org/apache/sshd/client/ClientTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/client/ClientTest.java @@ -980,6 +980,7 @@ public class ClientTest extends BaseTestSupport { try (ClientSession session = createTestClientSession()) { // nothing extra + assertNotNull(session); } finally { client.stop(); } @@ -1009,6 +1010,7 @@ public class ClientTest extends BaseTestSupport { try (ClientSession session = createTestClientSession()) { // nothing extra + assertNotNull(session); } finally { client.stop(); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpTest.java b/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpTest.java index f833b82..f2b9df9 100644 --- a/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpTest.java @@ -1438,10 +1438,8 @@ public class SftpTest extends AbstractSftpClientTestSupport { try (ByteArrayOutputStream bos = new ByteArrayOutputStream(); InputStream is = c.get(path)) { - byte[] buffer = new byte[256]; - int count; - while (-1 != (count = is.read(buffer))) { + for (int count = is.read(buffer); count != -1; count = is.read(buffer)) { bos.write(buffer, 0, count); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/test/java/org/apache/sshd/common/util/SttySupportTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/common/util/SttySupportTest.java b/sshd-core/src/test/java/org/apache/sshd/common/util/SttySupportTest.java index 47da098..50c8d63 100644 --- a/sshd-core/src/test/java/org/apache/sshd/common/util/SttySupportTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/common/util/SttySupportTest.java @@ -37,6 +37,9 @@ import org.junit.runners.MethodSorters; */ @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class SttySupportTest extends BaseTestSupport { + public SttySupportTest() { + super(); + } @Test public void parseOutput1() throws Exception { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/test/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProviderTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProviderTest.java b/sshd-core/src/test/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProviderTest.java index 96ddfc6..28879ed 100644 --- a/sshd-core/src/test/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProviderTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProviderTest.java @@ -18,31 +18,32 @@ */ package org.apache.sshd.server.keyprovider; -import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; import java.security.GeneralSecurityException; import java.security.KeyPair; import java.util.concurrent.atomic.AtomicInteger; import org.apache.sshd.util.test.BaseTestSupport; import org.junit.FixMethodOrder; -import org.junit.Rule; import org.junit.Test; -import org.junit.rules.TemporaryFolder; import org.junit.runners.MethodSorters; @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class AbstractGeneratorHostKeyProviderTest extends BaseTestSupport { - - @Rule - public TemporaryFolder temporaryFolder = new TemporaryFolder(); + public AbstractGeneratorHostKeyProviderTest() { + super(); + } @SuppressWarnings("synthetic-access") @Test public void testOverwriteKey() throws Exception { - File keyPairFile = temporaryFolder.newFile(); + Path tempDir = assertHierarchyTargetFolderExists(getTempTargetFolder()); + Path keyPairFile = tempDir.resolve(getCurrentTestName() + ".key"); + Files.deleteIfExists(keyPairFile); TestProvider provider = new TestProvider(keyPairFile); provider.loadKeys(); @@ -57,9 +58,9 @@ public class AbstractGeneratorHostKeyProviderTest extends BaseTestSupport { private static final class TestProvider extends AbstractGeneratorHostKeyProvider { private final AtomicInteger writes = new AtomicInteger(0); - private TestProvider(File file) { + private TestProvider(Path file) { setKeySize(512); - setPath(file.toPath()); + setPath(file); } @Override @@ -76,5 +77,4 @@ public class AbstractGeneratorHostKeyProviderTest extends BaseTestSupport { return writes.get(); } } - } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/test/java/org/apache/sshd/util/test/AsyncEchoShellFactory.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/util/test/AsyncEchoShellFactory.java b/sshd-core/src/test/java/org/apache/sshd/util/test/AsyncEchoShellFactory.java index 3c8fc83..cef9579 100644 --- a/sshd-core/src/test/java/org/apache/sshd/util/test/AsyncEchoShellFactory.java +++ b/sshd-core/src/test/java/org/apache/sshd/util/test/AsyncEchoShellFactory.java @@ -44,6 +44,9 @@ import org.apache.sshd.server.channel.ChannelSession; * @author <a href="mailto:d...@mina.apache.org">Apache MINA SSHD Project</a> */ public class AsyncEchoShellFactory implements Factory<Command> { + public AsyncEchoShellFactory() { + super(); + } @Override public Command create() { @@ -51,7 +54,6 @@ public class AsyncEchoShellFactory implements Factory<Command> { } public static class EchoShell implements AsyncCommand, ChannelDataReceiver, ChannelSessionAware { - private IoOutputStream out; private IoOutputStream err; private ExitCallback callback; @@ -59,6 +61,10 @@ public class AsyncEchoShellFactory implements Factory<Command> { private ChannelSession session; private StringBuilder buffer = new StringBuilder(); + public EchoShell() { + super(); + } + public IoOutputStream getOut() { return out; } @@ -132,8 +138,8 @@ public class AsyncEchoShellFactory implements Factory<Command> { buffer.append(new String(buf, start, len, StandardCharsets.UTF_8)); for (int i = 0; i < buffer.length(); i++) { if (buffer.charAt(i) == '\n') { - final String s = buffer.substring(0, i + 1); - final byte[] bytes = s.getBytes(StandardCharsets.UTF_8); + String s = buffer.substring(0, i + 1); + byte[] bytes = s.getBytes(StandardCharsets.UTF_8); out.write(new ByteArrayBuffer(bytes)).addListener(future -> { Session session1 = channel.getSession(); if (future.isWritten()) { @@ -155,5 +161,4 @@ public class AsyncEchoShellFactory implements Factory<Command> { return 0; } } - } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-core/src/test/java/org/apache/sshd/util/test/BogusEnvironment.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/util/test/BogusEnvironment.java b/sshd-core/src/test/java/org/apache/sshd/util/test/BogusEnvironment.java index 7181429..86d5261 100644 --- a/sshd-core/src/test/java/org/apache/sshd/util/test/BogusEnvironment.java +++ b/sshd-core/src/test/java/org/apache/sshd/util/test/BogusEnvironment.java @@ -28,6 +28,9 @@ import org.apache.sshd.server.Signal; import org.apache.sshd.server.SignalListener; public class BogusEnvironment implements Environment { + public BogusEnvironment() { + super(); + } @Override public Map<String, String> getEnv() { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9dbe5fe0/sshd-pmd-ruleset.xml ---------------------------------------------------------------------- diff --git a/sshd-pmd-ruleset.xml b/sshd-pmd-ruleset.xml index 39f6bfd..884aace 100644 --- a/sshd-pmd-ruleset.xml +++ b/sshd-pmd-ruleset.xml @@ -9,15 +9,33 @@ </description> <!-- See https://pmd.github.io/pmd-5.6.1/pmd-java/rules/index.html --> + <rule ref="rulesets/java/basic.xml/AvoidMultipleUnaryOperators" /> + <rule ref="rulesets/java/basic.xml/AvoidUsingOctalValues" /> <rule ref="rulesets/java/basic.xml/BooleanInstantiation" /> + <rule ref="rulesets/java/basic.xml/BrokenNullCheck" /> <rule ref="rulesets/java/basic.xml/ExtendsObject" /> + <rule ref="rulesets/java/basic.xml/MisplacedNullCheck" /> + <rule ref="rulesets/java/basic.xml/OverrideBothEqualsAndHashcode" /> + <rule ref="rulesets/java/basic.xml/ReturnFromFinallyBlock" /> + <rule ref="rulesets/java/basic.xml/UnconditionalIfStatement" /> <rule ref="rulesets/java/braces.xml" /> <rule ref="rulesets/java/clone.xml/ProperCloneImplementation" /> <rule ref="rulesets/java/clone.xml/CloneMethodMustImplementCloneable" /> + <rule ref="rulesets/java/controversial.xml/AssignmentInOperand" /> + <rule ref="rulesets/java/controversial.xml/AtLeastOneConstructor" /> + + <rule ref="rulesets/java/design.xml/UseNotifyAllInsteadOfNotify" /> + + <rule ref="rulesets/java/empty.xml"> + <exclude name="EmptyCatchBlock" /> <!-- Enforced by checkstyle --> + </rule> + + <rule ref="rulesets/java/finalizers.xml" /> + <rule ref="rulesets/java/javabeans.xml/MissingSerialVersionUID" /> - <rule ref="rulesets/java/logging-java.xml/AvoidPrintStackTrace" /> + <rule ref="rulesets/java/logging-java.xml/AvoidPrintStackTrace" /> </ruleset> \ No newline at end of file