http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/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 new file mode 100644 index 0000000..36bed35 --- /dev/null +++ b/sshd-core/src/main/java/org/apache/sshd/common/util/buffer/BufferUtils.java @@ -0,0 +1,81 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sshd.common.util.buffer; + +/** + * TODO Add javadoc + * + * @author <a href="mailto:[email protected]">Apache MINA SSHD Project</a> + */ +public class BufferUtils { + + public static String printHex(byte[] array) { + return printHex(array, 0, array.length); + } + + public static String printHex(byte[] array, int offset, int len) { + return printHex(array, offset, len, ' '); + } + + public static String printHex(byte[] array, int offset, int len, char sep) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < len; i++) { + byte b = array[offset + i]; + if (sb.length() > 0) { + sb.append(sep); + } + sb.append(digits[(b >> 4) & 0x0F]); + sb.append(digits[b & 0x0F]); + } + return sb.toString(); + } + + public static boolean equals(byte[] a1, byte[] a2) { + if (a1.length != a2.length) { + return false; + } + return equals(a1, 0, a2, 0, a1.length); + } + + public static boolean equals(byte[] a1, int a1Offset, byte[] a2, int a2Offset, int length) { + if (a1.length < a1Offset + length || a2.length < a2Offset + length) { + return false; + } + while (length-- > 0) { + if (a1[a1Offset++] != a2[a2Offset++]) { + return false; + } + } + return true; + } + + final static char[] digits = { + '0' , '1' , '2' , '3' , '4' , '5' , + '6' , '7' , '8' , '9' , 'a' , 'b' , + 'c' , 'd' , 'e' , 'f' + }; + + public static final int getNextPowerOf2(int i) { + int j = 1; + while (j < i) { + j <<= 1; + } + return j; + } +}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/common/util/buffer/ByteArrayBuffer.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/util/buffer/ByteArrayBuffer.java b/sshd-core/src/main/java/org/apache/sshd/common/util/buffer/ByteArrayBuffer.java new file mode 100644 index 0000000..da05aef --- /dev/null +++ b/sshd-core/src/main/java/org/apache/sshd/common/util/buffer/ByteArrayBuffer.java @@ -0,0 +1,178 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.sshd.common.util.buffer; + +import java.nio.charset.Charset; + +import org.apache.sshd.common.util.Readable; + +/** + * Provides an implementation of {@link Buffer} using a backing byte array + * @author <a href="mailto:[email protected]">Apache MINA SSHD Project</a> + */ +public final class ByteArrayBuffer extends Buffer { + public static final int DEFAULT_SIZE = 256; + public static final int MAX_LEN = 65536; + + private byte[] data; + private int rpos; + private int wpos; + + public ByteArrayBuffer() { + this(DEFAULT_SIZE); + } + + public ByteArrayBuffer(int size) { + this(new byte[BufferUtils.getNextPowerOf2(size)], false); + } + + public ByteArrayBuffer(byte[] data) { + this(data, 0, data.length, true); + } + + public ByteArrayBuffer(byte[] data, boolean read) { + this(data, 0, data.length, read); + } + + public ByteArrayBuffer(byte[] data, int off, int len) { + this(data, off, len, true); + } + + public ByteArrayBuffer(byte[] data, int off, int len, boolean read) { + this.data = data; + this.rpos = off; + this.wpos = (read ? len : 0) + off; + } + + @Override + public int rpos() { + return rpos; + } + + @Override + public void rpos(int rpos) { + this.rpos = rpos; + } + + @Override + public int wpos() { + return wpos; + } + + @Override + public void wpos(int wpos) { + ensureCapacity(wpos - this.wpos); + this.wpos = wpos; + } + + @Override + public int available() { + return wpos - rpos; + } + + @Override + public int capacity() { + return data.length - wpos; + } + + @Override + public byte[] array() { + return data; + } + + @Override + public void compact() { + if (available() > 0) { + System.arraycopy(data, rpos, data, 0, wpos - rpos); + } + wpos -= rpos; + rpos = 0; + } + + @Override + public void clear() { + rpos = 0; + wpos = 0; + } + + @Override + public byte getByte() { + // TODO use Byte.BYTES for JDK-8 + ensureAvailable(Byte.SIZE / Byte.SIZE); + return data[rpos++]; + } + + @Override + public void putByte(byte b) { + // TODO use Byte.BYTES in JDK-8 + ensureCapacity(Byte.SIZE / Byte.SIZE); + data[wpos++] = b; + } + + @Override + public int putBuffer(Readable buffer, boolean expand) { + int r = expand ? buffer.available() : Math.min(buffer.available(), capacity()); + ensureCapacity(r); + buffer.getRawBytes(data, wpos, r); + wpos += r; + return r; + } + + @Override + public void putRawBytes(byte[] d, int off, int len) { + ensureCapacity(len); + System.arraycopy(d, off, data, wpos, len); + wpos += len; + } + + @Override + public String getString(Charset charset) { + int len = getInt(); + if (len < 0) { + throw new BufferException("Bad item length: " + len); + } + ensureAvailable(len); + String s = new String(data, rpos, len, charset); + rpos += len; + return s; + } + + @Override + public void getRawBytes(byte[] buf, int off, int len) { + ensureAvailable(len); + System.arraycopy(data, rpos, buf, off, len); + rpos += len; + } + + @Override + protected void ensureCapacity(int capacity) { + if (data.length - wpos < capacity) { + int cw = wpos + capacity; + byte[] tmp = new byte[BufferUtils.getNextPowerOf2(cw)]; + System.arraycopy(data, 0, tmp, 0, data.length); + data = tmp; + } + } + + @Override + protected int size() { + return data.length; + } +} http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/common/util/io/LoggingFilterOutputStream.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/util/io/LoggingFilterOutputStream.java b/sshd-core/src/main/java/org/apache/sshd/common/util/io/LoggingFilterOutputStream.java index ab1676e..abcd43b 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/util/io/LoggingFilterOutputStream.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/util/io/LoggingFilterOutputStream.java @@ -22,7 +22,7 @@ import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; -import org.apache.sshd.common.util.BufferUtils; +import org.apache.sshd.common.util.buffer.BufferUtils; import org.slf4j.Logger; /** http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/UserAuth.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/UserAuth.java b/sshd-core/src/main/java/org/apache/sshd/server/UserAuth.java index c581cbd..bb80288 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/UserAuth.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/UserAuth.java @@ -18,7 +18,7 @@ */ package org.apache.sshd.server; -import org.apache.sshd.common.util.Buffer; +import org.apache.sshd.common.util.buffer.Buffer; import org.apache.sshd.server.session.ServerSession; /** http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/auth/AbstractUserAuth.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/auth/AbstractUserAuth.java b/sshd-core/src/main/java/org/apache/sshd/server/auth/AbstractUserAuth.java index 947beb1..7d70939 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/auth/AbstractUserAuth.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/AbstractUserAuth.java @@ -18,7 +18,7 @@ */ package org.apache.sshd.server.auth; -import org.apache.sshd.common.util.Buffer; +import org.apache.sshd.common.util.buffer.Buffer; import org.apache.sshd.server.UserAuth; import org.apache.sshd.server.session.ServerSession; import org.slf4j.Logger; http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthKeyboardInteractive.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthKeyboardInteractive.java b/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthKeyboardInteractive.java index db439ff..e061b5c 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthKeyboardInteractive.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthKeyboardInteractive.java @@ -21,7 +21,7 @@ package org.apache.sshd.server.auth; import org.apache.sshd.common.NamedFactory; import org.apache.sshd.common.SshConstants; import org.apache.sshd.common.SshException; -import org.apache.sshd.common.util.Buffer; +import org.apache.sshd.common.util.buffer.Buffer; import org.apache.sshd.server.PasswordAuthenticator; import org.apache.sshd.server.UserAuth; import org.apache.sshd.server.session.ServerSession; http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthNone.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthNone.java b/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthNone.java index 8b9f5a7..980b119 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthNone.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthNone.java @@ -19,7 +19,7 @@ package org.apache.sshd.server.auth; import org.apache.sshd.common.NamedFactory; -import org.apache.sshd.common.util.Buffer; +import org.apache.sshd.common.util.buffer.Buffer; import org.apache.sshd.server.UserAuth; import org.apache.sshd.server.session.ServerSession; http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPassword.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPassword.java b/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPassword.java index 6219c3a..f4b2372 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPassword.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPassword.java @@ -21,7 +21,7 @@ package org.apache.sshd.server.auth; import org.apache.sshd.common.NamedFactory; import org.apache.sshd.common.SshConstants; import org.apache.sshd.common.SshException; -import org.apache.sshd.common.util.Buffer; +import org.apache.sshd.common.util.buffer.Buffer; import org.apache.sshd.server.PasswordAuthenticator; import org.apache.sshd.server.UserAuth; import org.apache.sshd.server.session.ServerSession; http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPublicKey.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPublicKey.java b/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPublicKey.java index 58fa336..e6e8874 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPublicKey.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPublicKey.java @@ -23,7 +23,8 @@ import java.security.PublicKey; import org.apache.sshd.common.NamedFactory; import org.apache.sshd.common.Signature; import org.apache.sshd.common.SshConstants; -import org.apache.sshd.common.util.Buffer; +import org.apache.sshd.common.util.buffer.Buffer; +import org.apache.sshd.common.util.buffer.ByteArrayBuffer; import org.apache.sshd.server.PublickeyAuthenticator; import org.apache.sshd.server.UserAuth; @@ -35,14 +36,17 @@ import org.apache.sshd.server.UserAuth; public class UserAuthPublicKey extends AbstractUserAuth { public static class Factory implements NamedFactory<UserAuth> { + @Override public String getName() { return "publickey"; } + @Override public UserAuth create() { return new UserAuthPublicKey(); } } + @Override public Boolean doAuth(Buffer buffer, boolean init) throws Exception { if (!init) { throw new IllegalStateException(); @@ -70,7 +74,7 @@ public class UserAuthPublicKey extends AbstractUserAuth { } if (!authenticator.authenticate(username, key, session)) { - return false; + return Boolean.FALSE; } if (!hasSig) { Buffer buf = session.createBuffer(SshConstants.SSH_MSG_USERAUTH_PK_OK); @@ -79,8 +83,8 @@ public class UserAuthPublicKey extends AbstractUserAuth { session.writePacket(buf); return null; } else { - Buffer buf = new Buffer(); - buf.putString(session.getKex().getH()); + Buffer buf = new ByteArrayBuffer(); + buf.putBytes(session.getKex().getH()); buf.putByte(SshConstants.SSH_MSG_USERAUTH_REQUEST); buf.putString(username); buf.putString(service); @@ -94,7 +98,7 @@ public class UserAuthPublicKey extends AbstractUserAuth { if (!verif.verify(sig)) { throw new Exception("Key verification failed"); } - return true; + return Boolean.TRUE; } } } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/auth/gss/UserAuthGSS.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/auth/gss/UserAuthGSS.java b/sshd-core/src/main/java/org/apache/sshd/server/auth/gss/UserAuthGSS.java index 4b5db95..8893f94 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/auth/gss/UserAuthGSS.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/gss/UserAuthGSS.java @@ -21,7 +21,8 @@ package org.apache.sshd.server.auth.gss; import org.apache.sshd.common.NamedFactory; import org.apache.sshd.common.SshConstants; import org.apache.sshd.common.SshException; -import org.apache.sshd.common.util.Buffer; +import org.apache.sshd.common.util.buffer.Buffer; +import org.apache.sshd.common.util.buffer.ByteArrayBuffer; import org.apache.sshd.server.UserAuth; import org.apache.sshd.server.auth.AbstractUserAuth; import org.apache.sshd.server.session.ServerSession; @@ -54,6 +55,7 @@ public class UserAuthGSS extends AbstractUserAuth { /** * Handle the first authentication step. */ + @Override protected Boolean doAuth(Buffer buffer, boolean initial) throws Exception { GSSAuthenticator auth = getAuthenticator(session); @@ -120,11 +122,11 @@ public class UserAuthGSS extends AbstractUserAuth { // Make the MIC message so the token can be verified - Buffer msgbuf = new Buffer(); + Buffer msgbuf = new ByteArrayBuffer(); - msgbuf.putString(session.getSessionId()); + msgbuf.putBytes(session.getSessionId()); msgbuf.putByte(SshConstants.SSH_MSG_USERAUTH_REQUEST); - msgbuf.putString(username.getBytes("UTF-8")); + msgbuf.putString(username); msgbuf.putString(service); msgbuf.putString("gssapi-with-mic"); @@ -180,6 +182,7 @@ public class UserAuthGSS extends AbstractUserAuth { * * @return The user name */ + @Override public String getUserName() { return identity != null ? identity : username; } @@ -187,6 +190,7 @@ public class UserAuthGSS extends AbstractUserAuth { /** * Free any system resources used by the module. */ + @Override public void destroy() { if (context != null) { try { @@ -241,6 +245,7 @@ public class UserAuthGSS extends AbstractUserAuth { * * @return Tge name, always 'gssapi-with-mic' here. */ + @Override public String getName() { return "gssapi-with-mic"; } @@ -250,6 +255,7 @@ public class UserAuthGSS extends AbstractUserAuth { * * @return The instance */ + @Override public UserAuth create() { return new UserAuthGSS(); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java b/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java index e55b687..8f6bb24 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java @@ -24,7 +24,7 @@ import org.apache.sshd.client.future.DefaultOpenFuture; import org.apache.sshd.client.future.OpenFuture; import org.apache.sshd.common.SshConstants; import org.apache.sshd.common.channel.AbstractChannel; -import org.apache.sshd.common.util.Buffer; +import org.apache.sshd.common.util.buffer.Buffer; /** * TODO Add javadoc http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/channel/AsyncDataReceiver.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/channel/AsyncDataReceiver.java b/sshd-core/src/main/java/org/apache/sshd/server/channel/AsyncDataReceiver.java index 24d19b3..fbc8396 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/channel/AsyncDataReceiver.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/channel/AsyncDataReceiver.java @@ -23,7 +23,7 @@ import java.io.IOException; import org.apache.sshd.common.Channel; import org.apache.sshd.common.channel.ChannelAsyncInputStream; import org.apache.sshd.common.io.IoInputStream; -import org.apache.sshd.common.util.Buffer; +import org.apache.sshd.common.util.buffer.ByteArrayBuffer; public class AsyncDataReceiver implements ChannelDataReceiver { @@ -37,11 +37,13 @@ public class AsyncDataReceiver implements ChannelDataReceiver { return in; } + @Override public int data(ChannelSession channel, byte[] buf, int start, int len) throws IOException { - in.write(new Buffer(buf, start, len)); + in.write(new ByteArrayBuffer(buf, start, len)); return 0; } + @Override public void close() throws IOException { in.close(false); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java b/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java index ea8ef71..c977c20 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java @@ -29,7 +29,6 @@ import java.util.Set; import java.util.TimerTask; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArraySet; -import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import org.apache.sshd.agent.SshAgent; @@ -42,7 +41,6 @@ import org.apache.sshd.common.ForwardingFilter; import org.apache.sshd.common.NamedFactory; import org.apache.sshd.common.PtyMode; import org.apache.sshd.common.RequestHandler; -import org.apache.sshd.common.Session; import org.apache.sshd.common.SshConstants; import org.apache.sshd.common.channel.ChannelAsyncOutputStream; import org.apache.sshd.common.channel.ChannelOutputStream; @@ -51,9 +49,10 @@ import org.apache.sshd.common.file.FileSystemFactory; import org.apache.sshd.common.future.CloseFuture; import org.apache.sshd.common.future.DefaultCloseFuture; import org.apache.sshd.common.future.SshFutureListener; -import org.apache.sshd.common.util.Buffer; import org.apache.sshd.common.util.CloseableUtils; import org.apache.sshd.common.util.IoUtils; +import org.apache.sshd.common.util.buffer.Buffer; +import org.apache.sshd.common.util.buffer.ByteArrayBuffer; import org.apache.sshd.common.util.io.LoggingFilterOutputStream; import org.apache.sshd.server.AsyncCommand; import org.apache.sshd.server.ChannelSessionAware; @@ -78,10 +77,12 @@ public class ChannelSession extends AbstractServerChannel { public static class Factory implements NamedFactory<Channel> { + @Override public String getName() { return "session"; } + @Override public Channel create() { return new ChannelSession(); } @@ -99,6 +100,7 @@ public class ChannelSession extends AbstractServerChannel { ptyModes = new ConcurrentHashMap<PtyMode, Integer>(); } + @Override public void addSignalListener(SignalListener listener, Signal... signals) { if (signals == null) { throw new IllegalArgumentException("signals may not be null"); @@ -107,6 +109,7 @@ public class ChannelSession extends AbstractServerChannel { addSignalListener(listener, Arrays.asList(signals)); } + @Override public void addSignalListener(SignalListener listener) { addSignalListener(listener, Signal.SIGNALS); } @@ -116,6 +119,7 @@ public class ChannelSession extends AbstractServerChannel { * we hold the listeners inside a Set, so even if we add several times * the same listener to the same signal set, it is harmless */ + @Override public void addSignalListener(SignalListener listener, Collection<Signal> signals) { if (listener == null) { throw new IllegalArgumentException("listener may not be null"); @@ -130,14 +134,17 @@ public class ChannelSession extends AbstractServerChannel { } } + @Override public Map<String, String> getEnv() { return env; } + @Override public Map<PtyMode, Integer> getPtyModes() { return ptyModes; } + @Override public void removeSignalListener(SignalListener listener) { if (listener == null) { throw new IllegalArgumentException("listener may not be null"); @@ -219,12 +226,15 @@ public class ChannelSession extends AbstractServerChannel { } public class CommandCloseable extends CloseableUtils.IoBaseCloseable { + @Override public boolean isClosed() { return commandExitFuture.isClosed(); } + @Override public boolean isClosing() { return isClosed(); } + @Override public CloseFuture close(boolean immediately) { if (immediately || command == null) { commandExitFuture.setClosed(); @@ -245,6 +255,7 @@ public class ChannelSession extends AbstractServerChannel { manager.getScheduledExecutorService().schedule(task, timeout, TimeUnit.MILLISECONDS); commandExitFuture.addListener(new SshFutureListener<CloseFuture>() { + @Override public void operationComplete(CloseFuture future) { task.cancel(); } @@ -271,6 +282,7 @@ public class ChannelSession extends AbstractServerChannel { IoUtils.closeQuietly(receiver); } + @Override protected void doWriteData(byte[] data, int off, int len) throws IOException { // If we're already closing, ignore incoming data if (isClosing()) { @@ -283,12 +295,13 @@ public class ChannelSession extends AbstractServerChannel { } } else { if (tempBuffer == null) { - tempBuffer = new Buffer(len); + tempBuffer = new ByteArrayBuffer(len); } tempBuffer.putRawBytes(data, off, len); } } + @Override protected void doWriteExtendedData(byte[] data, int off, int len) throws IOException { throw new UnsupportedOperationException("Server channel does not support extended data"); } @@ -540,6 +553,7 @@ public class ChannelSession extends AbstractServerChannel { doWriteData(buffer.array(), buffer.rpos(), buffer.available()); } command.setExitCallback(new ExitCallback() { + @Override public void onExit(int exitValue) { try { closeShell(exitValue); @@ -547,6 +561,7 @@ public class ChannelSession extends AbstractServerChannel { log.info("Error closing shell", e); } } + @Override public void onExit(int exitValue, String exitMessage) { onExit(exitValue); } @@ -608,6 +623,7 @@ public class ChannelSession extends AbstractServerChannel { } private class ChannelSessionRequestHandler implements RequestHandler<Channel> { + @Override public Result process(Channel channel, String request, boolean wantReply, Buffer buffer) throws Exception { Boolean r = handleRequest(request, buffer); if (r == null) { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/channel/PuttyRequestHandler.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/channel/PuttyRequestHandler.java b/sshd-core/src/main/java/org/apache/sshd/server/channel/PuttyRequestHandler.java index 4f2e980..0c43929 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/channel/PuttyRequestHandler.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/channel/PuttyRequestHandler.java @@ -20,7 +20,7 @@ package org.apache.sshd.server.channel; import org.apache.sshd.common.Channel; import org.apache.sshd.common.RequestHandler; -import org.apache.sshd.common.util.Buffer; +import org.apache.sshd.common.util.buffer.Buffer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/global/CancelTcpipForwardHandler.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/global/CancelTcpipForwardHandler.java b/sshd-core/src/main/java/org/apache/sshd/server/global/CancelTcpipForwardHandler.java index 1f34f24..189f328 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/global/CancelTcpipForwardHandler.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/global/CancelTcpipForwardHandler.java @@ -22,7 +22,7 @@ import org.apache.sshd.common.RequestHandler; import org.apache.sshd.common.SshConstants; import org.apache.sshd.common.SshdSocketAddress; import org.apache.sshd.common.session.ConnectionService; -import org.apache.sshd.common.util.Buffer; +import org.apache.sshd.common.util.buffer.Buffer; /** * Handler for cancel-tcpip-forward global request. http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/global/KeepAliveHandler.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/global/KeepAliveHandler.java b/sshd-core/src/main/java/org/apache/sshd/server/global/KeepAliveHandler.java index 20ab0b9..c6881d0 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/global/KeepAliveHandler.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/global/KeepAliveHandler.java @@ -21,7 +21,7 @@ package org.apache.sshd.server.global; import org.apache.sshd.common.RequestHandler; import org.apache.sshd.common.SshConstants; import org.apache.sshd.common.session.ConnectionService; -import org.apache.sshd.common.util.Buffer; +import org.apache.sshd.common.util.buffer.Buffer; /** * Handler for keepalive@xxx global request. http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/global/NoMoreSessionsHandler.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/global/NoMoreSessionsHandler.java b/sshd-core/src/main/java/org/apache/sshd/server/global/NoMoreSessionsHandler.java index bfd5b26..38bf122 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/global/NoMoreSessionsHandler.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/global/NoMoreSessionsHandler.java @@ -21,7 +21,7 @@ package org.apache.sshd.server.global; import org.apache.sshd.common.RequestHandler; import org.apache.sshd.common.SshConstants; import org.apache.sshd.common.session.ConnectionService; -import org.apache.sshd.common.util.Buffer; +import org.apache.sshd.common.util.buffer.Buffer; /** * Handler for no-more-sessions@xxx global request. http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/global/TcpipForwardHandler.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/global/TcpipForwardHandler.java b/sshd-core/src/main/java/org/apache/sshd/server/global/TcpipForwardHandler.java index 1de692b..7151e4b 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/global/TcpipForwardHandler.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/global/TcpipForwardHandler.java @@ -22,7 +22,7 @@ import org.apache.sshd.common.RequestHandler; import org.apache.sshd.common.SshConstants; import org.apache.sshd.common.SshdSocketAddress; import org.apache.sshd.common.session.ConnectionService; -import org.apache.sshd.common.util.Buffer; +import org.apache.sshd.common.util.buffer.Buffer; /** * Handler for tcpip-forward global request. http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGEXServer.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGEXServer.java b/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGEXServer.java index 5473d65..335cafe 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGEXServer.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGEXServer.java @@ -34,14 +34,15 @@ import org.apache.sshd.common.Random; import org.apache.sshd.common.Signature; import org.apache.sshd.common.SshConstants; import org.apache.sshd.common.SshException; -import org.apache.sshd.common.kex.DHG; import org.apache.sshd.common.kex.DHFactory; +import org.apache.sshd.common.kex.DHG; import org.apache.sshd.common.kex.DHGroupData; import org.apache.sshd.common.session.AbstractSession; -import org.apache.sshd.common.util.Buffer; -import org.apache.sshd.common.util.BufferUtils; import org.apache.sshd.common.util.GenericUtils; import org.apache.sshd.common.util.SecurityUtils; +import org.apache.sshd.common.util.buffer.Buffer; +import org.apache.sshd.common.util.buffer.BufferUtils; +import org.apache.sshd.common.util.buffer.ByteArrayBuffer; import org.apache.sshd.server.ServerFactoryManager; /** @@ -83,11 +84,13 @@ public class DHGEXServer extends AbstractDHServerKeyExchange { this.factory = factory; } + @Override public void init(AbstractSession s, byte[] V_S, byte[] V_C, byte[] I_S, byte[] I_C) throws Exception { super.init(s, V_S, V_C, I_S, I_C); expected = SshConstants.SSH_MSG_KEX_DH_GEX_REQUEST; } + @Override public boolean next(Buffer buffer) throws Exception { byte cmd = buffer.getByte(); @@ -157,16 +160,16 @@ public class DHGEXServer extends AbstractDHServerKeyExchange { Signature sig = NamedFactory.Utils.create(session.getFactoryManager().getSignatureFactories(), algo); sig.init(kp.getPublic(), kp.getPrivate()); - buffer = new Buffer(); + buffer = new ByteArrayBuffer(); buffer.putRawPublicKey(kp.getPublic()); K_S = buffer.getCompactData(); buffer.clear(); - buffer.putString(V_C); - buffer.putString(V_S); - buffer.putString(I_C); - buffer.putString(I_S); - buffer.putString(K_S); + buffer.putBytes(V_C); + buffer.putBytes(V_S); + buffer.putBytes(I_C); + buffer.putBytes(I_S); + buffer.putBytes(K_S); if (oldRequest) { buffer.putInt(prf); } else { @@ -186,7 +189,7 @@ public class DHGEXServer extends AbstractDHServerKeyExchange { buffer.clear(); sig.update(H, 0, H.length); buffer.putString(algo); - buffer.putString(sig.sign()); + buffer.putBytes(sig.sign()); sigH = buffer.getCompactData(); if (log.isDebugEnabled()) { @@ -201,9 +204,9 @@ public class DHGEXServer extends AbstractDHServerKeyExchange { buffer.rpos(5); buffer.wpos(5); buffer.putByte(SshConstants.SSH_MSG_KEX_DH_GEX_REPLY); - buffer.putString(K_S); - buffer.putString(f); - buffer.putString(sigH); + buffer.putBytes(K_S); + buffer.putBytes(f); + buffer.putBytes(sigH); session.writePacket(buffer); return true; } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGServer.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGServer.java b/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGServer.java index 13df5c2..c18d532 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGServer.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGServer.java @@ -28,8 +28,9 @@ import org.apache.sshd.common.SshException; import org.apache.sshd.common.kex.AbstractDH; import org.apache.sshd.common.kex.DHFactory; import org.apache.sshd.common.session.AbstractSession; -import org.apache.sshd.common.util.Buffer; -import org.apache.sshd.common.util.BufferUtils; +import org.apache.sshd.common.util.buffer.Buffer; +import org.apache.sshd.common.util.buffer.BufferUtils; +import org.apache.sshd.common.util.buffer.ByteArrayBuffer; /** * @author <a href="mailto:[email protected]">Apache MINA SSHD Project</a> @@ -74,6 +75,7 @@ public class DHGServer extends AbstractDHServerKeyExchange { f = dh.getE(); } + @Override public boolean next(Buffer buffer) throws Exception { byte cmd = buffer.getByte(); if (cmd != SshConstants.SSH_MSG_KEXDH_INIT) { @@ -91,16 +93,16 @@ public class DHGServer extends AbstractDHServerKeyExchange { Signature sig = NamedFactory.Utils.create(session.getFactoryManager().getSignatureFactories(), algo); sig.init(kp.getPublic(), kp.getPrivate()); - buffer = new Buffer(); + buffer = new ByteArrayBuffer(); buffer.putRawPublicKey(kp.getPublic()); K_S = buffer.getCompactData(); buffer.clear(); - buffer.putString(V_C); - buffer.putString(V_S); - buffer.putString(I_C); - buffer.putString(I_S); - buffer.putString(K_S); + buffer.putBytes(V_C); + buffer.putBytes(V_S); + buffer.putBytes(I_C); + buffer.putBytes(I_S); + buffer.putBytes(K_S); buffer.putMPInt(e); buffer.putMPInt(f); buffer.putMPInt(K); @@ -111,7 +113,7 @@ public class DHGServer extends AbstractDHServerKeyExchange { buffer.clear(); sig.update(H, 0, H.length); buffer.putString(algo); - buffer.putString(sig.sign()); + buffer.putBytes(sig.sign()); sigH = buffer.getCompactData(); if (log.isDebugEnabled()) { @@ -126,9 +128,9 @@ public class DHGServer extends AbstractDHServerKeyExchange { buffer.rpos(5); buffer.wpos(5); buffer.putByte(SshConstants.SSH_MSG_KEXDH_REPLY); - buffer.putString(K_S); - buffer.putString(f); - buffer.putString(sigH); + buffer.putBytes(K_S); + buffer.putBytes(f); + buffer.putBytes(sigH); session.writePacket(buffer); return true; } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSession.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSession.java b/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSession.java index 0a779a7..f195abc 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSession.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSession.java @@ -33,8 +33,9 @@ import org.apache.sshd.common.future.SshFutureListener; import org.apache.sshd.common.io.IoSession; import org.apache.sshd.common.io.IoWriteFuture; import org.apache.sshd.common.session.AbstractSession; -import org.apache.sshd.common.util.Buffer; import org.apache.sshd.common.util.GenericUtils; +import org.apache.sshd.common.util.buffer.Buffer; +import org.apache.sshd.common.util.buffer.ByteArrayBuffer; import org.apache.sshd.server.ServerFactoryManager; /** @@ -63,13 +64,17 @@ public class ServerSession extends AbstractSession { return negotiated[index]; } + @Override public ServerFactoryManager getFactoryManager() { return (ServerFactoryManager) factoryManager; } + @Override protected void checkKeys() { + // nothing } + @Override public void startService(String name) throws Exception { currentService = ServiceFactory.Utils.create(getFactoryManager().getServiceFactories(), name, this); } @@ -80,6 +85,7 @@ public class ServerSession extends AbstractSession { disconnect(SshConstants.SSH2_DISCONNECT_PROTOCOL_ERROR, "Unsupported packet: SSH_MSG_SERVICE_ACCEPT"); } + @Override protected void checkRekey() throws IOException { if (kexState.get() == KEX_STATE_DONE) { if ( inPackets > MAX_PACKETS || outPackets > MAX_PACKETS @@ -102,6 +108,7 @@ public class ServerSession extends AbstractSession { sendIdentification(serverVersion); } + @Override protected void sendKexInit() throws IOException { /* * Make sure that the provided host keys have at least one supported signature factory @@ -154,6 +161,7 @@ public class ServerSession extends AbstractSession { I_S = sendKexInit(serverProposal); } + @Override protected boolean readIdentification(Buffer buffer) throws IOException { clientVersion = doReadIdentification(buffer, true); if (clientVersion == null) { @@ -162,7 +170,7 @@ public class ServerSession extends AbstractSession { log.debug("Client version string: {}", clientVersion); if (!clientVersion.startsWith(DEFAULT_SSH_VERSION_PREFIX)) { String msg = "Unsupported protocol version: " + clientVersion; - ioSession.write(new Buffer((msg + "\n").getBytes())).addListener(new SshFutureListener<IoWriteFuture>() { + ioSession.write(new ByteArrayBuffer((msg + "\n").getBytes())).addListener(new SshFutureListener<IoWriteFuture>() { @Override public void operationComplete(IoWriteFuture future) { close(true); @@ -176,6 +184,7 @@ public class ServerSession extends AbstractSession { return true; } + @Override protected void receiveKexInit(Buffer buffer) throws IOException { clientProposal = new String[SshConstants.PROPOSAL_MAX]; I_C = receiveKexInit(buffer, clientProposal); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/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 49d7712..f31851a 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 @@ -34,9 +34,9 @@ import org.apache.sshd.common.ServiceFactory; import org.apache.sshd.common.Session; import org.apache.sshd.common.SshConstants; import org.apache.sshd.common.SshException; -import org.apache.sshd.common.util.Buffer; import org.apache.sshd.common.util.CloseableUtils; import org.apache.sshd.common.util.GenericUtils; +import org.apache.sshd.common.util.buffer.Buffer; import org.apache.sshd.server.ServerFactoryManager; import org.apache.sshd.server.UserAuth; http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java b/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java index 218b27d..3a8ce58 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java @@ -81,12 +81,13 @@ import java.util.concurrent.TimeUnit; import org.apache.sshd.common.FactoryManagerUtils; import org.apache.sshd.common.file.FileSystemAware; -import org.apache.sshd.common.util.Buffer; import org.apache.sshd.common.util.GenericUtils; import org.apache.sshd.common.util.IoUtils; import org.apache.sshd.common.util.OsUtils; import org.apache.sshd.common.util.SelectorUtils; import org.apache.sshd.common.util.ThreadUtils; +import org.apache.sshd.common.util.buffer.Buffer; +import org.apache.sshd.common.util.buffer.ByteArrayBuffer; import org.apache.sshd.server.Command; import org.apache.sshd.server.Environment; import org.apache.sshd.server.ExitCallback; @@ -161,6 +162,7 @@ public class SftpSubsystem implements Command, Runnable, SessionAware, FileSyste return file; } + @Override public void close() throws IOException { // ignored } @@ -191,14 +193,17 @@ public class SftpSubsystem implements Command, Runnable, SessionAware, FileSyste this.done = done; } + @Override public boolean hasNext() { return fileList.hasNext(); } + @Override public Path next() { return fileList.next(); } + @Override public void remove() { throw new UnsupportedOperationException("Not allowed to remove " + toString()); } @@ -364,10 +369,12 @@ public class SftpSubsystem implements Command, Runnable, SessionAware, FileSyste return unsupportedAttributePolicy; } + @Override public void setSession(ServerSession session) { this.session = session; } + @Override public void setFileSystem(FileSystem fileSystem) { if (fileSystem != this.fileSystem) { this.fileSystem = fileSystem; @@ -375,22 +382,27 @@ public class SftpSubsystem implements Command, Runnable, SessionAware, FileSyste } } + @Override public void setExitCallback(ExitCallback callback) { this.callback = callback; } + @Override public void setInputStream(InputStream in) { this.in = in; } + @Override public void setOutputStream(OutputStream out) { this.out = out; } + @Override public void setErrorStream(OutputStream err) { this.err = err; } + @Override public void start(Environment env) throws IOException { this.env = env; try { @@ -401,6 +413,7 @@ public class SftpSubsystem implements Command, Runnable, SessionAware, FileSyste } } + @Override public void run() { DataInputStream dis = null; try { @@ -410,7 +423,7 @@ public class SftpSubsystem implements Command, Runnable, SessionAware, FileSyste if (length < 5) { throw new IllegalArgumentException(); } - Buffer buffer = new Buffer(length + 4); + Buffer buffer = new ByteArrayBuffer(length + 4); buffer.putInt(length); int nb = length; while (nb > 0) { @@ -1122,7 +1135,7 @@ public class SftpSubsystem implements Command, Runnable, SessionAware, FileSyste sendStatus(id, SSH_FX_INVALID_HANDLE, handle); } else { FileHandle fh = (FileHandle) p; - Buffer buf = new Buffer(len + 9); + Buffer buf = new ByteArrayBuffer(len + 9); buf.putByte((byte) SSH_FXP_DATA); buf.putInt(id); int pos = buf.wpos(); @@ -1308,7 +1321,7 @@ public class SftpSubsystem implements Command, Runnable, SessionAware, FileSyste } protected void sendHandle(int id, String handle) throws IOException { - Buffer buffer = new Buffer(); + Buffer buffer = new ByteArrayBuffer(); buffer.putByte((byte) SSH_FXP_HANDLE); buffer.putInt(id); buffer.putString(handle); @@ -1316,7 +1329,7 @@ public class SftpSubsystem implements Command, Runnable, SessionAware, FileSyste } protected void sendAttrs(int id, Path file, int flags, boolean followLinks) throws IOException { - Buffer buffer = new Buffer(); + Buffer buffer = new ByteArrayBuffer(); buffer.putByte((byte) SSH_FXP_ATTRS); buffer.putInt(id); writeAttrs(buffer, file, flags, followLinks); @@ -1324,7 +1337,7 @@ public class SftpSubsystem implements Command, Runnable, SessionAware, FileSyste } protected void sendPath(int id, Path f, Map<String, Object> attrs) throws IOException { - Buffer buffer = new Buffer(); + Buffer buffer = new ByteArrayBuffer(); buffer.putByte((byte) SSH_FXP_NAME); buffer.putInt(id); buffer.putInt(1); @@ -1352,7 +1365,7 @@ public class SftpSubsystem implements Command, Runnable, SessionAware, FileSyste } protected void sendLink(int id, String link) throws IOException { - Buffer buffer = new Buffer(); + Buffer buffer = new ByteArrayBuffer(); buffer.putByte((byte) SSH_FXP_NAME); buffer.putInt(id); buffer.putInt(1); @@ -1364,7 +1377,7 @@ public class SftpSubsystem implements Command, Runnable, SessionAware, FileSyste } protected void sendName(int id, Iterator<Path> files) throws IOException { - Buffer buffer = new Buffer(); + Buffer buffer = new ByteArrayBuffer(); buffer.putByte((byte) SSH_FXP_NAME); buffer.putInt(id); int wpos = buffer.wpos(); @@ -1732,10 +1745,20 @@ public class SftpSubsystem implements Command, Runnable, SessionAware, FileSyste } continue; } - case "uid": view = "unix"; break; - case "gid": view = "unix"; break; - case "owner": view = "posix"; value = toUser(file, (UserPrincipal) value); break; - case "group": view = "posix"; value = toGroup(file, (GroupPrincipal) value); break; + case "uid": + view = "unix"; + break; + case "gid": + view = "unix"; + break; + case "owner": + view = "posix"; + value = toUser(file, (UserPrincipal) value); + break; + case "group": + view = "posix"; + value = toGroup(file, (GroupPrincipal) value); + break; case "permissions": if (OsUtils.isWin32()) { @SuppressWarnings("unchecked") @@ -1746,9 +1769,15 @@ public class SftpSubsystem implements Command, Runnable, SessionAware, FileSyste view = "posix"; break; - case "creationTime": view = "basic"; break; - case "lastModifiedTime": view = "basic"; break; - case "lastAccessTime": view = "basic"; break; + case "creationTime": + view = "basic"; + break; + case "lastModifiedTime": + view = "basic"; + break; + case "lastAccessTime": + view = "basic"; + break; default: // ignored } if (view != null && value != null) { @@ -2096,7 +2125,7 @@ public class SftpSubsystem implements Command, Runnable, SessionAware, FileSyste log.debug("Send SSH_FXP_STATUS (substatus={}, lang={}, msg={})", new Object[] { substatus, lang, msg }); } - Buffer buffer = new Buffer(); + Buffer buffer = new ByteArrayBuffer(); buffer.putByte((byte) SSH_FXP_STATUS); buffer.putInt(id); buffer.putInt(substatus); @@ -2112,6 +2141,7 @@ public class SftpSubsystem implements Command, Runnable, SessionAware, FileSyste dos.flush(); } + @Override public void destroy() { if (!closed) { if (log.isDebugEnabled()) { @@ -2225,6 +2255,7 @@ public class SftpSubsystem implements Command, Runnable, SessionAware, FileSyste this.name = name; } + @Override public final String getName() { return name; } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/shell/ProcessShellFactory.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/shell/ProcessShellFactory.java b/sshd-core/src/main/java/org/apache/sshd/server/shell/ProcessShellFactory.java index 608c953..44f2137 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/shell/ProcessShellFactory.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/shell/ProcessShellFactory.java @@ -27,7 +27,8 @@ import java.util.EnumSet; import java.util.Map; import org.apache.sshd.common.Factory; -import org.apache.sshd.common.util.Buffer; +import org.apache.sshd.common.util.buffer.Buffer; +import org.apache.sshd.common.util.buffer.ByteArrayBuffer; import org.apache.sshd.server.Command; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -73,6 +74,7 @@ public class ProcessShellFactory implements Factory<Command> { this.command = command; } + @Override public Command create() { return new InvertedShellWrapper(new ProcessShell()); } @@ -84,6 +86,7 @@ public class ProcessShellFactory implements Factory<Command> { private TtyFilterInputStream out; private TtyFilterInputStream err; + @Override public void start(Map<String,String> env) throws IOException { String[] cmds = new String[command.length]; for (int i = 0; i < cmds.length; i++) { @@ -108,18 +111,22 @@ public class ProcessShellFactory implements Factory<Command> { in = new TtyFilterOutputStream(process.getOutputStream(), err); } + @Override public OutputStream getInputStream() { return in; } + @Override public InputStream getOutputStream() { return out; } + @Override public InputStream getErrorStream() { return err; } + @Override public boolean isAlive() { try { process.exitValue(); @@ -129,6 +136,7 @@ public class ProcessShellFactory implements Factory<Command> { } } + @Override public int exitValue() { try { return process.waitFor(); @@ -137,6 +145,7 @@ public class ProcessShellFactory implements Factory<Command> { } } + @Override public void destroy() { if (process != null) { process.destroy(); @@ -148,7 +157,7 @@ public class ProcessShellFactory implements Factory<Command> { private int lastChar; public TtyFilterInputStream(InputStream in) { super(in); - buffer = new Buffer(32); + buffer = new ByteArrayBuffer(32); } synchronized void write(int c) { buffer.putByte((byte) c); @@ -171,7 +180,7 @@ public class ProcessShellFactory implements Factory<Command> { } if (c == '\n' && ttyOptions.contains(TtyOptions.ONlCr) && lastChar != '\r') { c = '\r'; - Buffer buf = new Buffer(); + Buffer buf = new ByteArrayBuffer(); buf.putByte((byte) '\n'); buf.putBuffer(buffer); buffer = buf; http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/x11/X11ForwardSupport.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/x11/X11ForwardSupport.java b/sshd-core/src/main/java/org/apache/sshd/server/x11/X11ForwardSupport.java index 992d5b4..a04ff11 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/x11/X11ForwardSupport.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/x11/X11ForwardSupport.java @@ -33,9 +33,10 @@ import org.apache.sshd.common.io.IoAcceptor; import org.apache.sshd.common.io.IoHandler; import org.apache.sshd.common.io.IoSession; import org.apache.sshd.common.session.ConnectionService; -import org.apache.sshd.common.util.Buffer; import org.apache.sshd.common.util.CloseableUtils; import org.apache.sshd.common.util.Readable; +import org.apache.sshd.common.util.buffer.Buffer; +import org.apache.sshd.common.util.buffer.ByteArrayBuffer; /** * @author <a href="mailto:[email protected]">Apache MINA SSHD Project</a> @@ -128,6 +129,7 @@ public class X11ForwardSupport extends CloseableUtils.AbstractInnerCloseable imp } } + @Override public void sessionCreated(IoSession session) throws Exception { ChannelForwardedX11 channel = new ChannelForwardedX11(session); session.setAttribute(ChannelForwardedX11.class, channel); @@ -141,6 +143,7 @@ public class X11ForwardSupport extends CloseableUtils.AbstractInnerCloseable imp } } + @Override public void sessionClosed(IoSession session) throws Exception { ChannelForwardedX11 channel = (ChannelForwardedX11) session.getAttribute(ChannelForwardedX11.class); if ( channel != null ){ @@ -148,14 +151,16 @@ public class X11ForwardSupport extends CloseableUtils.AbstractInnerCloseable imp } } + @Override public void messageReceived(IoSession session, Readable message) throws Exception { ChannelForwardedX11 channel = (ChannelForwardedX11) session.getAttribute(ChannelForwardedX11.class); - Buffer buffer = new Buffer(); + Buffer buffer = new ByteArrayBuffer(); buffer.putBuffer(message); channel.getInvertedIn().write(buffer.array(), buffer.rpos(), buffer.available()); channel.getInvertedIn().flush(); } + @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { cause.printStackTrace(); session.close(false); @@ -169,6 +174,7 @@ public class X11ForwardSupport extends CloseableUtils.AbstractInnerCloseable imp this.serverSession = serverSession; } + @Override public synchronized OpenFuture open() throws IOException { InetSocketAddress remote = (InetSocketAddress) serverSession.getRemoteAddress(); if (closeFuture.isClosed()) { @@ -200,9 +206,10 @@ public class X11ForwardSupport extends CloseableUtils.AbstractInnerCloseable imp return builder().sequential(serverSession, super.getInnerCloseable()).build(); } + @Override protected synchronized void doWriteData(byte[] data, int off, int len) throws IOException { localWindow.consumeAndCheck(len); - serverSession.write(new Buffer(data, off, len)); + serverSession.write(new ByteArrayBuffer(data, off, len)); } @Override http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/test/java/org/apache/sshd/AbstractSessionTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/AbstractSessionTest.java b/sshd-core/src/test/java/org/apache/sshd/AbstractSessionTest.java index 38a4018..5f9428d 100644 --- a/sshd-core/src/test/java/org/apache/sshd/AbstractSessionTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/AbstractSessionTest.java @@ -18,17 +18,18 @@ */ package org.apache.sshd; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + import java.io.IOException; import org.apache.sshd.common.session.AbstractSession; -import org.apache.sshd.common.util.Buffer; +import org.apache.sshd.common.util.buffer.Buffer; +import org.apache.sshd.common.util.buffer.ByteArrayBuffer; import org.apache.sshd.util.BaseTest; import org.junit.Before; import org.junit.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - /** * Test basic stuff on AbstractSession. * @@ -45,28 +46,28 @@ public class AbstractSessionTest extends BaseTest { @Test public void testReadIdentSimple() { - Buffer buf = new Buffer("SSH-2.0-software\r\n".getBytes()); + Buffer buf = new ByteArrayBuffer("SSH-2.0-software\r\n".getBytes()); String ident = session.doReadIdentification(buf); assertEquals("SSH-2.0-software", ident); } @Test public void testReadIdentWithoutCR() { - Buffer buf = new Buffer("SSH-2.0-software\n".getBytes()); + Buffer buf = new ByteArrayBuffer("SSH-2.0-software\n".getBytes()); String ident = session.doReadIdentification(buf); assertEquals("SSH-2.0-software", ident); } @Test public void testReadIdentWithHeaders() { - Buffer buf = new Buffer(("a header line\r\nSSH-2.0-software\r\n").getBytes()); + Buffer buf = new ByteArrayBuffer(("a header line\r\nSSH-2.0-software\r\n").getBytes()); String ident = session.doReadIdentification(buf); assertEquals("SSH-2.0-software", ident); } @Test public void testReadIdentWithSplitPackets() { - Buffer buf = new Buffer("header line\r\nSSH".getBytes()); + Buffer buf = new ByteArrayBuffer("header line\r\nSSH".getBytes()); String ident = session.doReadIdentification(buf); assertNull(ident); buf.putRawBytes("-2.0-software\r\n".getBytes()); @@ -76,13 +77,13 @@ public class AbstractSessionTest extends BaseTest { @Test(expected = IllegalStateException.class) public void testReadIdentBadLineEnding() { - Buffer buf = new Buffer(("SSH-2.0-software\ra").getBytes()); + Buffer buf = new ByteArrayBuffer(("SSH-2.0-software\ra").getBytes()); String ident = session.doReadIdentification(buf); } @Test(expected = IllegalStateException.class) public void testReadIdentLongLine() { - Buffer buf = new Buffer(("SSH-2.0-software" + + Buffer buf = new ByteArrayBuffer(("SSH-2.0-software" + "01234567890123456789012345678901234567890123456789" + "01234567890123456789012345678901234567890123456789" + "01234567890123456789012345678901234567890123456789" + @@ -99,7 +100,7 @@ public class AbstractSessionTest extends BaseTest { sb.append("01234567890123456789012345678901234567890123456789\r\n"); } sb.append("SSH-2.0-software\r\n"); - Buffer buf = new Buffer(sb.toString().getBytes()); + Buffer buf = new ByteArrayBuffer(sb.toString().getBytes()); String ident = session.doReadIdentification(buf); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/test/java/org/apache/sshd/AuthenticationTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/AuthenticationTest.java b/sshd-core/src/test/java/org/apache/sshd/AuthenticationTest.java index 95b23c6..4a86365 100644 --- a/sshd-core/src/test/java/org/apache/sshd/AuthenticationTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/AuthenticationTest.java @@ -28,7 +28,7 @@ import org.apache.sshd.client.session.ClientSessionImpl; import org.apache.sshd.common.KeyPairProvider; import org.apache.sshd.common.io.IoSession; import org.apache.sshd.common.session.AbstractSession; -import org.apache.sshd.common.util.Buffer; +import org.apache.sshd.common.util.buffer.Buffer; import org.apache.sshd.deprecated.ClientUserAuthServiceOld; import org.apache.sshd.deprecated.UserAuthKeyboardInteractive; import org.apache.sshd.deprecated.UserAuthPassword; http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/test/java/org/apache/sshd/ClientTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/ClientTest.java b/sshd-core/src/test/java/org/apache/sshd/ClientTest.java index 56ed4ed..fb7e389 100644 --- a/sshd-core/src/test/java/org/apache/sshd/ClientTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/ClientTest.java @@ -18,6 +18,12 @@ */ package org.apache.sshd; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -44,6 +50,7 @@ import org.apache.sshd.client.channel.ChannelShell; import org.apache.sshd.client.future.AuthFuture; import org.apache.sshd.client.future.OpenFuture; import org.apache.sshd.common.Channel; +import org.apache.sshd.common.FactoryManager; import org.apache.sshd.common.KeyPairProvider; import org.apache.sshd.common.NamedFactory; import org.apache.sshd.common.RuntimeSshException; @@ -52,7 +59,6 @@ import org.apache.sshd.common.Session; import org.apache.sshd.common.SshConstants; import org.apache.sshd.common.SshException; import org.apache.sshd.common.cipher.BuiltinCiphers; -import org.apache.sshd.common.cipher.CipherNone; import org.apache.sshd.common.forward.TcpipServerChannel; import org.apache.sshd.common.future.CloseFuture; import org.apache.sshd.common.future.SshFutureListener; @@ -63,8 +69,9 @@ import org.apache.sshd.common.io.mina.MinaSession; import org.apache.sshd.common.io.nio2.Nio2Session; import org.apache.sshd.common.session.AbstractSession; import org.apache.sshd.common.session.ConnectionService; -import org.apache.sshd.common.util.Buffer; -import org.apache.sshd.common.util.BufferUtils; +import org.apache.sshd.common.util.buffer.Buffer; +import org.apache.sshd.common.util.buffer.BufferUtils; +import org.apache.sshd.common.util.buffer.ByteArrayBuffer; import org.apache.sshd.common.util.io.NoCloseOutputStream; import org.apache.sshd.server.Command; import org.apache.sshd.server.CommandFactory; @@ -86,12 +93,6 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - /** * TODO Add javadoc * @@ -114,6 +115,7 @@ public class ClientTest extends BaseTest { sshd.setKeyPairProvider(Utils.createTestHostKeyProvider()); sshd.setShellFactory(new TestEchoShellFactory()); sshd.setCommandFactory(new CommandFactory() { + @Override public Command createCommand(String command) { return new UnknownCommand(command); } @@ -176,10 +178,10 @@ public class ClientTest extends BaseTest { @Test public void testAsyncClient() throws Exception { - sshd.getProperties().put(SshServer.WINDOW_SIZE, "1024"); + sshd.getProperties().put(FactoryManager.WINDOW_SIZE, "1024"); sshd.setShellFactory(new AsyncEchoShellFactory()); - client.getProperties().put(SshClient.WINDOW_SIZE, "1024"); + client.getProperties().put(FactoryManager.WINDOW_SIZE, "1024"); client.start(); ClientSession session = client.connect("smx", "localhost", port).await().getSession(); session.addPasswordIdentity("smx"); @@ -196,13 +198,14 @@ public class ClientTest extends BaseTest { final ByteArrayOutputStream baosErr = new ByteArrayOutputStream(); final AtomicInteger writes = new AtomicInteger(nbMessages); - channel.getAsyncIn().write(new Buffer(message)) + channel.getAsyncIn().write(new ByteArrayBuffer(message)) .addListener(new SshFutureListener<IoWriteFuture>() { + @Override public void operationComplete(IoWriteFuture future) { try { if (future.isWritten()) { if (writes.decrementAndGet() > 0) { - channel.getAsyncIn().write(new Buffer(message)).addListener(this); + channel.getAsyncIn().write(new ByteArrayBuffer(message)).addListener(this); } else { channel.getAsyncIn().close(false); } @@ -217,8 +220,9 @@ public class ClientTest extends BaseTest { } } }); - channel.getAsyncOut().read(new Buffer()) + channel.getAsyncOut().read(new ByteArrayBuffer()) .addListener(new SshFutureListener<IoReadFuture>() { + @Override public void operationComplete(IoReadFuture future) { try { future.verify(); @@ -235,8 +239,9 @@ public class ClientTest extends BaseTest { } } }); - channel.getAsyncErr().read(new Buffer()) + channel.getAsyncErr().read(new ByteArrayBuffer()) .addListener(new SshFutureListener<IoReadFuture>() { + @Override public void operationComplete(IoReadFuture future) { try { future.verify(); @@ -280,7 +285,7 @@ public class ClientTest extends BaseTest { } catch (SshException e) { // That's ok, the channel is being closed by the other side } - assertEquals(ChannelExec.CLOSED, channel.waitFor(ChannelExec.CLOSED, 0) & ChannelExec.CLOSED); + assertEquals(ClientChannel.CLOSED, channel.waitFor(ClientChannel.CLOSED, 0) & ClientChannel.CLOSED); session.close(false).await(); client.stop(); } @@ -568,6 +573,7 @@ public class ClientTest extends BaseTest { public void testPublicKeyAuthNewWithFailureOnFirstIdentity() throws Exception { final KeyPair pair = Utils.createTestHostKeyProvider().loadKey(KeyPairProvider.SSH_RSA); sshd.setPublickeyAuthenticator(new PublickeyAuthenticator() { + @Override public boolean authenticate(String username, PublicKey key, ServerSession session) { return key.equals(pair.getPublic()); } @@ -624,8 +630,10 @@ public class ClientTest extends BaseTest { client.getProperties().put(ClientFactoryManager.PASSWORD_PROMPTS, "3"); client.setUserAuthFactories(Arrays.<NamedFactory<UserAuth>>asList(new UserAuthKeyboardInteractive.Factory())); client.setUserInteraction(new UserInteraction() { + @Override public void welcome(String banner) { } + @Override public String[] interactive(String destination, String name, String instruction, String[] prompt, boolean[] echo) { count.incrementAndGet(); return new String[] { "bad" }; @@ -649,9 +657,11 @@ public class ClientTest extends BaseTest { client.start(); ClientSession session = client.connect("smx", "localhost", port).await().getSession(); session.setUserInteraction(new UserInteraction() { + @Override public void welcome(String banner) { } + @Override public String[] interactive(String destination, String name, String instruction, String[] prompt, boolean[] echo) { count.incrementAndGet(); @@ -674,9 +684,11 @@ public class ClientTest extends BaseTest { client.start(); ClientSession session = client.connect("smx", "localhost", port).await().getSession(); session.setUserInteraction(new UserInteraction() { + @Override public void welcome(String banner) { } + @Override public String[] interactive(String destination, String name, String instruction, String[] prompt, boolean[] echo) { count.incrementAndGet(); @@ -728,6 +740,7 @@ public class ClientTest extends BaseTest { final AtomicBoolean ok = new AtomicBoolean(); client.setServerKeyVerifier( new ServerKeyVerifier() { + @Override public boolean verifyServerKey( ClientSession sshClientSession, SocketAddress remoteAddress, http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/test/java/org/apache/sshd/SftpFileSystemTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/SftpFileSystemTest.java b/sshd-core/src/test/java/org/apache/sshd/SftpFileSystemTest.java index 2eb9309..1e0dd98 100644 --- a/sshd-core/src/test/java/org/apache/sshd/SftpFileSystemTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/SftpFileSystemTest.java @@ -56,6 +56,7 @@ import org.apache.sshd.util.BogusPasswordAuthenticator; import org.apache.sshd.util.EchoShellFactory; import org.apache.sshd.util.Utils; import org.junit.After; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -186,8 +187,9 @@ public class SftpFileSystemTest extends BaseTest { Files.write(file, "Hello world\n".getBytes()); Map<String, Object> attrs = Files.readAttributes(file, "posix:*"); + Assert.assertNotNull("NO attributes read for " + file, attrs); - Files.setAttribute(file, "basic:size", 2l); + Files.setAttribute(file, "basic:size", Long.valueOf(2l)); Files.setAttribute(file, "posix:permissions", PosixFilePermissions.fromString("rwxr-----")); Files.setAttribute(file, "basic:lastModifiedTime", FileTime.fromMillis(100000l)); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/test/java/org/apache/sshd/SftpTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/SftpTest.java b/sshd-core/src/test/java/org/apache/sshd/SftpTest.java index c2b4832..cec1d11 100644 --- a/sshd-core/src/test/java/org/apache/sshd/SftpTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/SftpTest.java @@ -18,6 +18,17 @@ */ package org.apache.sshd; +import static org.apache.sshd.common.sftp.SftpConstants.SSH_FX_FILE_ALREADY_EXISTS; +import static org.apache.sshd.common.sftp.SftpConstants.SSH_FX_NO_SUCH_FILE; +import static org.apache.sshd.common.sftp.SftpConstants.S_IRUSR; +import static org.apache.sshd.common.sftp.SftpConstants.S_IWUSR; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; @@ -29,13 +40,10 @@ import java.util.Arrays; import java.util.EnumSet; import java.util.Vector; -import com.jcraft.jsch.ChannelSftp; -import com.jcraft.jsch.JSch; -import com.jcraft.jsch.SftpException; import org.apache.sshd.client.SftpClient; import org.apache.sshd.common.NamedFactory; -import org.apache.sshd.common.util.Buffer; import org.apache.sshd.common.util.OsUtils; +import org.apache.sshd.common.util.buffer.ByteArrayBuffer; import org.apache.sshd.server.Command; import org.apache.sshd.server.command.ScpCommandFactory; import org.apache.sshd.server.sftp.SftpSubsystemFactory; @@ -46,21 +54,13 @@ import org.apache.sshd.util.JSchLogger; import org.apache.sshd.util.SimpleUserInfo; import org.apache.sshd.util.Utils; import org.junit.After; -import org.junit.Assert; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; -import static org.apache.sshd.common.sftp.SftpConstants.SSH_FX_FILE_ALREADY_EXISTS; -import static org.apache.sshd.common.sftp.SftpConstants.SSH_FX_NO_SUCH_FILE; -import static org.apache.sshd.common.sftp.SftpConstants.S_IRUSR; -import static org.apache.sshd.common.sftp.SftpConstants.S_IWUSR; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.SftpException; public class SftpTest extends BaseTest { @@ -291,14 +291,14 @@ public class SftpTest extends BaseTest { uploadAndVerifyFile(sftp, 0, "emptyFile.txt"); uploadAndVerifyFile(sftp, 1000, "smallFile.txt"); - uploadAndVerifyFile(sftp, Buffer.MAX_LEN - 1, "bufferMaxLenMinusOneFile.txt"); - uploadAndVerifyFile(sftp, Buffer.MAX_LEN, "bufferMaxLenFile.txt"); + uploadAndVerifyFile(sftp, ByteArrayBuffer.MAX_LEN - 1, "bufferMaxLenMinusOneFile.txt"); + uploadAndVerifyFile(sftp, ByteArrayBuffer.MAX_LEN, "bufferMaxLenFile.txt"); // were chunking not implemented, these would fail. these sizes should invoke our internal chunking mechanism - uploadAndVerifyFile(sftp, Buffer.MAX_LEN + 1, "bufferMaxLenPlusOneFile.txt"); - uploadAndVerifyFile(sftp, (int)(1.5 * Buffer.MAX_LEN), "1point5BufferMaxLenFile.txt"); - uploadAndVerifyFile(sftp, (2 * Buffer.MAX_LEN) - 1, "2TimesBufferMaxLenMinusOneFile.txt"); - uploadAndVerifyFile(sftp, 2 * Buffer.MAX_LEN, "2TimesBufferMaxLenFile.txt"); - uploadAndVerifyFile(sftp, (2 * Buffer.MAX_LEN) + 1, "2TimesBufferMaxLenPlusOneFile.txt"); + uploadAndVerifyFile(sftp, ByteArrayBuffer.MAX_LEN + 1, "bufferMaxLenPlusOneFile.txt"); + uploadAndVerifyFile(sftp, (int)(1.5 * ByteArrayBuffer.MAX_LEN), "1point5BufferMaxLenFile.txt"); + uploadAndVerifyFile(sftp, (2 * ByteArrayBuffer.MAX_LEN) - 1, "2TimesBufferMaxLenMinusOneFile.txt"); + uploadAndVerifyFile(sftp, 2 * ByteArrayBuffer.MAX_LEN, "2TimesBufferMaxLenFile.txt"); + uploadAndVerifyFile(sftp, (2 * ByteArrayBuffer.MAX_LEN) + 1, "2TimesBufferMaxLenPlusOneFile.txt"); uploadAndVerifyFile(sftp, 200000, "largerFile.txt"); // test erroneous calls that check for negative values http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/test/java/org/apache/sshd/WindowAdjustTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/WindowAdjustTest.java b/sshd-core/src/test/java/org/apache/sshd/WindowAdjustTest.java index 4a866ef..cf56589 100644 --- a/sshd-core/src/test/java/org/apache/sshd/WindowAdjustTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/WindowAdjustTest.java @@ -32,7 +32,8 @@ import org.apache.sshd.common.io.IoInputStream; import org.apache.sshd.common.io.IoOutputStream; import org.apache.sshd.common.io.IoWriteFuture; import org.apache.sshd.common.io.WritePendingException; -import org.apache.sshd.common.util.Buffer; +import org.apache.sshd.common.util.buffer.Buffer; +import org.apache.sshd.common.util.buffer.ByteArrayBuffer; import org.apache.sshd.common.util.io.NoCloseOutputStream; import org.apache.sshd.server.AsyncCommand; import org.apache.sshd.server.Command; @@ -141,9 +142,9 @@ public class WindowAdjustTest { new Thread(new Runnable() { public void run() { for (int i = 0; i < sendCount; i++) { - a.write(new Buffer(msg)); + a.write(new ByteArrayBuffer(msg)); } - a.write(new Buffer((lastMsg.getBytes()))); + a.write(new ByteArrayBuffer((lastMsg.getBytes()))); } }).start(); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/test/java/org/apache/sshd/WindowTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/WindowTest.java b/sshd-core/src/test/java/org/apache/sshd/WindowTest.java index 40df419..b57d2f4 100644 --- a/sshd-core/src/test/java/org/apache/sshd/WindowTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/WindowTest.java @@ -18,6 +18,9 @@ */ package org.apache.sshd; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; @@ -31,6 +34,7 @@ import java.util.concurrent.CountDownLatch; import org.apache.sshd.client.channel.ChannelShell; import org.apache.sshd.client.future.OpenFuture; import org.apache.sshd.common.Channel; +import org.apache.sshd.common.FactoryManager; import org.apache.sshd.common.NamedFactory; import org.apache.sshd.common.RuntimeSshException; import org.apache.sshd.common.Service; @@ -38,7 +42,8 @@ import org.apache.sshd.common.Session; import org.apache.sshd.common.channel.Window; import org.apache.sshd.common.forward.TcpipServerChannel; import org.apache.sshd.common.io.IoReadFuture; -import org.apache.sshd.common.util.Buffer; +import org.apache.sshd.common.util.buffer.Buffer; +import org.apache.sshd.common.util.buffer.ByteArrayBuffer; import org.apache.sshd.server.Command; import org.apache.sshd.server.CommandFactory; import org.apache.sshd.server.channel.ChannelSession; @@ -55,9 +60,6 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; - /** * TODO Add javadoc * @@ -80,6 +82,7 @@ public class WindowTest extends BaseTest { sshd.setKeyPairProvider(Utils.createTestHostKeyProvider()); sshd.setShellFactory(new TestEchoShellFactory()); sshd.setCommandFactory(new CommandFactory() { + @Override public Command createCommand(String command) { return new UnknownCommand(command); } @@ -143,8 +146,8 @@ public class WindowTest extends BaseTest { @Test public void testWindowConsumptionWithInvertedStreams() throws Exception { sshd.setShellFactory(new AsyncEchoShellFactory()); - sshd.getProperties().put(SshServer.WINDOW_SIZE, "1024"); - client.getProperties().put(SshClient.WINDOW_SIZE, "1024"); + sshd.getProperties().put(FactoryManager.WINDOW_SIZE, "1024"); + client.getProperties().put(FactoryManager.WINDOW_SIZE, "1024"); client.start(); ClientSession session = client.connect("smx", "localhost", port).await().getSession(); session.addPasswordIdentity("smx"); @@ -183,8 +186,8 @@ public class WindowTest extends BaseTest { @Test public void testWindowConsumptionWithDirectStreams() throws Exception { sshd.setShellFactory(new AsyncEchoShellFactory()); - sshd.getProperties().put(SshServer.WINDOW_SIZE, "1024"); - client.getProperties().put(SshClient.WINDOW_SIZE, "1024"); + sshd.getProperties().put(FactoryManager.WINDOW_SIZE, "1024"); + client.getProperties().put(FactoryManager.WINDOW_SIZE, "1024"); client.start(); ClientSession session = client.connect("smx", "localhost", port).await().getSession(); session.addPasswordIdentity("smx"); @@ -210,28 +213,29 @@ public class WindowTest extends BaseTest { final String message = "0123456789"; final int nbMessages = 500; - BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(inPos)); - BufferedReader reader = new BufferedReader(new InputStreamReader(outPis)); - for (int i = 0; i < nbMessages; i++) { - writer.write(message); - writer.write("\n"); - writer.flush(); - - waitForWindowEquals(clientLocal, serverRemote, "client local", "server remote"); - - String line = reader.readLine(); - assertEquals(message, line); - - waitForWindowEquals(clientLocal, serverRemote, "client local", "server remote"); - waitForWindowEquals(clientRemote, serverLocal, "client remote", "server local"); + try(BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(inPos)); + BufferedReader reader = new BufferedReader(new InputStreamReader(outPis))) { + for (int i = 0; i < nbMessages; i++) { + writer.write(message); + writer.write("\n"); + writer.flush(); + + waitForWindowEquals(clientLocal, serverRemote, "client local", "server remote"); + + String line = reader.readLine(); + assertEquals(message, line); + + waitForWindowEquals(clientLocal, serverRemote, "client local", "server remote"); + waitForWindowEquals(clientRemote, serverLocal, "client remote", "server local"); + } } } @Test public void testWindowConsumptionWithAsyncStreams() throws Exception { sshd.setShellFactory(new AsyncEchoShellFactory()); - sshd.getProperties().put(SshServer.WINDOW_SIZE, "1024"); - client.getProperties().put(SshClient.WINDOW_SIZE, "1024"); + sshd.getProperties().put(FactoryManager.WINDOW_SIZE, "1024"); + client.getProperties().put(FactoryManager.WINDOW_SIZE, "1024"); client.start(); ClientSession session = client.connect("smx", "localhost", port).await().getSession(); session.addPasswordIdentity("smx"); @@ -253,12 +257,12 @@ public class WindowTest extends BaseTest { for (int i = 0; i < nbMessages; i++) { - Buffer buffer = new Buffer((message + "\n").getBytes()); + Buffer buffer = new ByteArrayBuffer((message + "\n").getBytes()); channel.getAsyncIn().write(buffer).verify(); waitForWindowNotEquals(clientLocal, serverRemote, "client local", "server remote"); - Buffer buf = new Buffer(16); + Buffer buf = new ByteArrayBuffer(16); IoReadFuture future = channel.getAsyncOut().read(buf); future.verify(); assertEquals(11, buf.available()); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/test/java/org/apache/sshd/common/util/BufferTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/common/util/BufferTest.java b/sshd-core/src/test/java/org/apache/sshd/common/util/BufferTest.java index d939ed3..481c117 100644 --- a/sshd-core/src/test/java/org/apache/sshd/common/util/BufferTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/common/util/BufferTest.java @@ -18,14 +18,16 @@ */ package org.apache.sshd.common.util; +import static org.junit.Assert.assertEquals; + import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; +import org.apache.sshd.common.util.buffer.Buffer; +import org.apache.sshd.common.util.buffer.ByteArrayBuffer; import org.apache.sshd.util.BaseTest; import org.junit.Test; -import static org.junit.Assert.assertEquals; - public class BufferTest extends BaseTest { @Test @@ -33,7 +35,7 @@ public class BufferTest extends BaseTest { long v = 1234567890123456789L; ByteArrayOutputStream stream = new ByteArrayOutputStream(); new DataOutputStream(stream).writeLong(v); - Buffer buffer = new Buffer(stream.toByteArray()); + Buffer buffer = new ByteArrayBuffer(stream.toByteArray()); assertEquals(v, buffer.getLong()); } }
