diff --git a/.gitignore b/.gitignore index 193e3e43..5b05e0d1 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,9 @@ # Output dirs target/ build/ +docs/ .gradle/ +sshj.jar - +# MacOS X +.DS_Store diff --git a/GNUmakefile b/GNUmakefile new file mode 100755 index 00000000..0da49e0e --- /dev/null +++ b/GNUmakefile @@ -0,0 +1,45 @@ +Default: all + +TOP=$(realpath .) +include $(TOP)/../DeveloperTools/install/common.mk + +RSRC=rsrc +LIBDIR=$(RSRC)/lib +LIB=$(subst $(SPACE),$(CLN),$(filter %.jar %.zip, $(wildcard $(LIBDIR)/*))) +BUILD=build +SRC=src/main/java +DOCS=docs +CLASSPATH="$(CLASSLIB)$(CLN)$(LIB)$(CLN)$(SRC)" +CWD=$(shell pwd) + +include classes.mk + +CLASS_FILES:=$(foreach class, $(CLASSES), $(BUILD)/$(subst .,/,$(class)).class) +PACKAGES=$(sort $(basename $(CLASSES))) +PACKAGEDIRS=$(subst .,/,$(PACKAGES)) + +all: sshj.jar + +sshj.jar: classes + $(JAR) cvf $@ -C $(BUILD)/ . + +javadocs: + mkdir -p $(DOCS) + $(JAVA_HOME)/bin/javadoc -d $(DOCS) -classpath $(CLASSPATH) $(PACKAGES) + +clean: + rm -rf $(BUILD) + +classes: classdirs $(CLASS_FILES) + +install: all + cp sshj.jar $(TOP)/../jOVAL-Commercial/components/provider/remote/rsrc/lib + cp sshj.jar $(TOP)/../jOVAL-Commercial/components/sdk/dist/3rd-party + +classdirs: $(foreach pkg, $(PACKAGEDIRS), $(BUILD)/$(pkg)/) + +$(BUILD)/%.class: $(SRC)/%.java + $(JAVAC) $(JAVACFLAGS) -d $(BUILD) -classpath $(CLASSPATH) $< + +$(BUILD)/%/: + mkdir -p $(subst PKG,,$@) diff --git a/classes.mk b/classes.mk new file mode 100644 index 00000000..999cbe46 --- /dev/null +++ b/classes.mk @@ -0,0 +1,211 @@ +CLASSES=\ + com.hierynomus.sshj.backport.JavaVersion \ + com.hierynomus.sshj.backport.Jdk7HttpProxySocket \ + com.hierynomus.sshj.backport.Sockets \ + com.hierynomus.sshj.secg.SecgUtils \ + com.hierynomus.sshj.signature.Ed25519PublicKey \ + com.hierynomus.sshj.signature.SignatureEdDSA \ + com.hierynomus.sshj.transport.cipher.BlockCiphers \ + com.hierynomus.sshj.transport.cipher.ExtendedBlockCiphers \ + com.hierynomus.sshj.transport.cipher.StreamCipher \ + com.hierynomus.sshj.transport.cipher.StreamCiphers \ + com.hierynomus.sshj.transport.IdentificationStringParser \ + net.schmizz.concurrent.ErrorDeliveryUtil \ + net.schmizz.concurrent.Event \ + net.schmizz.concurrent.ExceptionChainer \ + net.schmizz.concurrent.Promise \ + net.schmizz.keepalive.Heartbeater \ + net.schmizz.keepalive.KeepAlive \ + net.schmizz.keepalive.KeepAliveProvider \ + net.schmizz.keepalive.KeepAliveRunner \ + net.schmizz.sshj.AbstractService \ + net.schmizz.sshj.AndroidConfig \ + net.schmizz.sshj.common.Base64 \ + net.schmizz.sshj.common.Buffer \ + net.schmizz.sshj.common.ByteArrayUtils \ + net.schmizz.sshj.common.DisconnectReason \ + net.schmizz.sshj.common.ErrorNotifiable \ + net.schmizz.sshj.common.Factory \ + net.schmizz.sshj.common.IOUtils \ + net.schmizz.sshj.common.KeyType \ + net.schmizz.sshj.common.Message \ + net.schmizz.sshj.common.SecurityUtils \ + net.schmizz.sshj.common.SSHException \ + net.schmizz.sshj.common.SSHPacket \ + net.schmizz.sshj.common.SSHPacketHandler \ + net.schmizz.sshj.common.SSHRuntimeException \ + net.schmizz.sshj.common.StreamCopier \ + net.schmizz.sshj.Config \ + net.schmizz.sshj.ConfigImpl \ + net.schmizz.sshj.connection.channel.AbstractChannel \ + net.schmizz.sshj.connection.channel.Channel \ + net.schmizz.sshj.connection.channel.ChannelInputStream \ + net.schmizz.sshj.connection.channel.ChannelOutputStream \ + net.schmizz.sshj.connection.channel.direct.AbstractDirectChannel \ + net.schmizz.sshj.connection.channel.direct.LocalPortForwarder \ + net.schmizz.sshj.connection.channel.direct.PTYMode \ + net.schmizz.sshj.connection.channel.direct.Session \ + net.schmizz.sshj.connection.channel.direct.SessionChannel \ + net.schmizz.sshj.connection.channel.direct.SessionFactory \ + net.schmizz.sshj.connection.channel.direct.Signal \ + net.schmizz.sshj.connection.channel.forwarded.AbstractForwardedChannel \ + net.schmizz.sshj.connection.channel.forwarded.AbstractForwardedChannelOpener \ + net.schmizz.sshj.connection.channel.forwarded.ConnectListener \ + net.schmizz.sshj.connection.channel.forwarded.ForwardedChannelOpener \ + net.schmizz.sshj.connection.channel.forwarded.RemotePortForwarder \ + net.schmizz.sshj.connection.channel.forwarded.SocketForwardingConnectListener \ + net.schmizz.sshj.connection.channel.forwarded.X11Forwarder \ + net.schmizz.sshj.connection.channel.OpenFailException \ + net.schmizz.sshj.connection.channel.SocketStreamCopyMonitor \ + net.schmizz.sshj.connection.channel.Window \ + net.schmizz.sshj.connection.Connection \ + net.schmizz.sshj.connection.ConnectionException \ + net.schmizz.sshj.connection.ConnectionImpl \ + net.schmizz.sshj.DefaultConfig \ + net.schmizz.sshj.Service \ + net.schmizz.sshj.sftp.FileAttributes \ + net.schmizz.sshj.sftp.FileMode \ + net.schmizz.sshj.sftp.OpenMode \ + net.schmizz.sshj.sftp.PacketReader \ + net.schmizz.sshj.sftp.PacketType \ + net.schmizz.sshj.sftp.PathComponents \ + net.schmizz.sshj.sftp.PathHelper \ + net.schmizz.sshj.sftp.RandomAccessRemoteFile \ + net.schmizz.sshj.sftp.RemoteDirectory \ + net.schmizz.sshj.sftp.RemoteFile \ + net.schmizz.sshj.sftp.RemoteResource \ + net.schmizz.sshj.sftp.RemoteResourceFilter \ + net.schmizz.sshj.sftp.RemoteResourceInfo \ + net.schmizz.sshj.sftp.Request \ + net.schmizz.sshj.sftp.Requester \ + net.schmizz.sshj.sftp.Response \ + net.schmizz.sshj.sftp.SFTPClient \ + net.schmizz.sshj.sftp.SFTPEngine \ + net.schmizz.sshj.sftp.SFTPException \ + net.schmizz.sshj.sftp.SFTPFileTransfer \ + net.schmizz.sshj.sftp.SFTPPacket \ + net.schmizz.sshj.sftp.StatefulSFTPClient \ + net.schmizz.sshj.signature.AbstractSignature \ + net.schmizz.sshj.signature.Signature \ + net.schmizz.sshj.signature.SignatureDSA \ + net.schmizz.sshj.signature.SignatureECDSA \ + net.schmizz.sshj.signature.SignatureRSA \ + net.schmizz.sshj.SocketClient \ + net.schmizz.sshj.SSHClient \ + net.schmizz.sshj.transport.cipher.AES128CBC \ + net.schmizz.sshj.transport.cipher.AES128CTR \ + net.schmizz.sshj.transport.cipher.AES192CBC \ + net.schmizz.sshj.transport.cipher.AES192CTR \ + net.schmizz.sshj.transport.cipher.AES256CBC \ + net.schmizz.sshj.transport.cipher.AES256CTR \ + net.schmizz.sshj.transport.cipher.BaseCipher \ + net.schmizz.sshj.transport.cipher.BlockCipher \ + net.schmizz.sshj.transport.cipher.BlowfishCBC \ + net.schmizz.sshj.transport.cipher.Cipher \ + net.schmizz.sshj.transport.cipher.NoneCipher \ + net.schmizz.sshj.transport.cipher.TripleDESCBC \ + net.schmizz.sshj.transport.compression.Compression \ + net.schmizz.sshj.transport.compression.DelayedZlibCompression \ + net.schmizz.sshj.transport.compression.NoneCompression \ + net.schmizz.sshj.transport.compression.ZlibCompression \ + net.schmizz.sshj.transport.Converter \ + net.schmizz.sshj.transport.Decoder \ + net.schmizz.sshj.transport.digest.BaseDigest \ + net.schmizz.sshj.transport.digest.Digest \ + net.schmizz.sshj.transport.digest.MD5 \ + net.schmizz.sshj.transport.digest.SHA1 \ + net.schmizz.sshj.transport.digest.SHA256 \ + net.schmizz.sshj.transport.digest.SHA384 \ + net.schmizz.sshj.transport.digest.SHA512 \ + net.schmizz.sshj.transport.DisconnectListener \ + net.schmizz.sshj.transport.Encoder \ + net.schmizz.sshj.transport.kex.AbstractDH \ + net.schmizz.sshj.transport.kex.AbstractDHG \ + net.schmizz.sshj.transport.kex.AbstractDHGex \ + net.schmizz.sshj.transport.kex.Curve25519DH \ + net.schmizz.sshj.transport.kex.Curve25519SHA256 \ + net.schmizz.sshj.transport.kex.DH \ + net.schmizz.sshj.transport.kex.DHBase \ + net.schmizz.sshj.transport.kex.DHG1 \ + net.schmizz.sshj.transport.kex.DHG14 \ + net.schmizz.sshj.transport.kex.DHGexSHA1 \ + net.schmizz.sshj.transport.kex.DHGexSHA256 \ + net.schmizz.sshj.transport.kex.DHGroupData \ + net.schmizz.sshj.transport.kex.ECDH \ + net.schmizz.sshj.transport.kex.ECDHNistP \ + net.schmizz.sshj.transport.kex.KeyExchange \ + net.schmizz.sshj.transport.kex.KeyExchangeBase \ + net.schmizz.sshj.transport.KeyExchanger \ + net.schmizz.sshj.transport.mac.BaseMAC \ + net.schmizz.sshj.transport.mac.HMACMD5 \ + net.schmizz.sshj.transport.mac.HMACMD596 \ + net.schmizz.sshj.transport.mac.HMACSHA1 \ + net.schmizz.sshj.transport.mac.HMACSHA196 \ + net.schmizz.sshj.transport.mac.HMACSHA2256 \ + net.schmizz.sshj.transport.mac.HMACSHA2512 \ + net.schmizz.sshj.transport.mac.MAC \ + net.schmizz.sshj.transport.NegotiatedAlgorithms \ + net.schmizz.sshj.transport.Proposal \ + net.schmizz.sshj.transport.random.BouncyCastleRandom \ + net.schmizz.sshj.transport.random.JCERandom \ + net.schmizz.sshj.transport.random.Random \ + net.schmizz.sshj.transport.random.SingletonRandomFactory \ + net.schmizz.sshj.transport.Reader \ + net.schmizz.sshj.transport.Transport \ + net.schmizz.sshj.transport.TransportException \ + net.schmizz.sshj.transport.TransportImpl \ + net.schmizz.sshj.transport.verification.AlgorithmsVerifier \ + net.schmizz.sshj.transport.verification.ConsoleKnownHostsVerifier \ + net.schmizz.sshj.transport.verification.HostKeyVerifier \ + net.schmizz.sshj.transport.verification.OpenSSHKnownHosts \ + net.schmizz.sshj.transport.verification.PromiscuousVerifier \ + net.schmizz.sshj.userauth.AuthParams \ + net.schmizz.sshj.userauth.keyprovider.FileKeyProvider \ + net.schmizz.sshj.userauth.keyprovider.KeyFormat \ + net.schmizz.sshj.userauth.keyprovider.KeyPairWrapper \ + net.schmizz.sshj.userauth.keyprovider.KeyProvider \ + net.schmizz.sshj.userauth.keyprovider.KeyProviderUtil \ + net.schmizz.sshj.userauth.keyprovider.OpenSSHKeyFile \ + net.schmizz.sshj.userauth.keyprovider.PKCS8KeyFile \ + net.schmizz.sshj.userauth.keyprovider.PuTTYKeyFile \ + net.schmizz.sshj.userauth.method.AbstractAuthMethod \ + net.schmizz.sshj.userauth.method.AuthGssApiWithMic \ + net.schmizz.sshj.userauth.method.AuthHostbased \ + net.schmizz.sshj.userauth.method.AuthKeyboardInteractive \ + net.schmizz.sshj.userauth.method.AuthMethod \ + net.schmizz.sshj.userauth.method.AuthNone \ + net.schmizz.sshj.userauth.method.AuthPassword \ + net.schmizz.sshj.userauth.method.AuthPublickey \ + net.schmizz.sshj.userauth.method.ChallengeResponseProvider \ + net.schmizz.sshj.userauth.method.KeyedAuthMethod \ + net.schmizz.sshj.userauth.method.PasswordResponseProvider \ + net.schmizz.sshj.userauth.password.AccountResource \ + net.schmizz.sshj.userauth.password.PasswordFinder \ + net.schmizz.sshj.userauth.password.PasswordUpdateProvider \ + net.schmizz.sshj.userauth.password.PasswordUtils \ + net.schmizz.sshj.userauth.password.PrivateKeyFileResource \ + net.schmizz.sshj.userauth.password.PrivateKeyReaderResource \ + net.schmizz.sshj.userauth.password.PrivateKeyStringResource \ + net.schmizz.sshj.userauth.password.Resource \ + net.schmizz.sshj.userauth.UserAuth \ + net.schmizz.sshj.userauth.UserAuthException \ + net.schmizz.sshj.userauth.UserAuthImpl \ + net.schmizz.sshj.xfer.AbstractFileTransfer \ + net.schmizz.sshj.xfer.FilePermission \ + net.schmizz.sshj.xfer.FileSystemFile \ + net.schmizz.sshj.xfer.FileTransfer \ + net.schmizz.sshj.xfer.InMemoryDestFile \ + net.schmizz.sshj.xfer.InMemorySourceFile \ + net.schmizz.sshj.xfer.LocalDestFile \ + net.schmizz.sshj.xfer.LocalFileFilter \ + net.schmizz.sshj.xfer.LocalSourceFile \ + net.schmizz.sshj.xfer.LoggingTransferListener \ + net.schmizz.sshj.xfer.scp.AbstractSCPClient \ + net.schmizz.sshj.xfer.scp.ScpCommandLine \ + net.schmizz.sshj.xfer.scp.SCPDownloadClient \ + net.schmizz.sshj.xfer.scp.SCPEngine \ + net.schmizz.sshj.xfer.scp.SCPException \ + net.schmizz.sshj.xfer.scp.SCPFileTransfer \ + net.schmizz.sshj.xfer.scp.SCPRemoteException \ + net.schmizz.sshj.xfer.scp.SCPUploadClient \ + net.schmizz.sshj.xfer.TransferListener diff --git a/rsrc/lib/JZlib.jar b/rsrc/lib/JZlib.jar new file mode 100644 index 00000000..91a3529f Binary files /dev/null and b/rsrc/lib/JZlib.jar differ diff --git a/rsrc/lib/bcpkix-jdk15on-154.jar b/rsrc/lib/bcpkix-jdk15on-154.jar new file mode 100644 index 00000000..86f7f0be Binary files /dev/null and b/rsrc/lib/bcpkix-jdk15on-154.jar differ diff --git a/rsrc/lib/bcprov-ext-jdk15on-154.jar b/rsrc/lib/bcprov-ext-jdk15on-154.jar new file mode 100644 index 00000000..f31c1c1c Binary files /dev/null and b/rsrc/lib/bcprov-ext-jdk15on-154.jar differ diff --git a/rsrc/lib/bcprov-jdk15on-154.jar b/rsrc/lib/bcprov-jdk15on-154.jar new file mode 100644 index 00000000..bd95185a Binary files /dev/null and b/rsrc/lib/bcprov-jdk15on-154.jar differ diff --git a/rsrc/lib/cal10n-api-0.7.4.jar b/rsrc/lib/cal10n-api-0.7.4.jar new file mode 100644 index 00000000..b6bf621f Binary files /dev/null and b/rsrc/lib/cal10n-api-0.7.4.jar differ diff --git a/rsrc/lib/ecc25519.jar b/rsrc/lib/ecc25519.jar new file mode 100644 index 00000000..88f97028 Binary files /dev/null and b/rsrc/lib/ecc25519.jar differ diff --git a/rsrc/lib/ed25519.jar b/rsrc/lib/ed25519.jar new file mode 100644 index 00000000..e0c4a8d8 Binary files /dev/null and b/rsrc/lib/ed25519.jar differ diff --git a/rsrc/lib/slf4j-api-1.6.2.jar b/rsrc/lib/slf4j-api-1.6.2.jar new file mode 100644 index 00000000..773b0b86 Binary files /dev/null and b/rsrc/lib/slf4j-api-1.6.2.jar differ diff --git a/rsrc/lib/slf4j-ext-1.6.2.jar b/rsrc/lib/slf4j-ext-1.6.2.jar new file mode 100644 index 00000000..3e0d6861 Binary files /dev/null and b/rsrc/lib/slf4j-ext-1.6.2.jar differ diff --git a/src/main/java/net/schmizz/sshj/common/StreamCopier.java b/src/main/java/net/schmizz/sshj/common/StreamCopier.java index 957ce796..6247f2b8 100644 --- a/src/main/java/net/schmizz/sshj/common/StreamCopier.java +++ b/src/main/java/net/schmizz/sshj/common/StreamCopier.java @@ -107,7 +107,7 @@ public class StreamCopier { log.debug("Done copying from {}", in); doneEvent.set(); } catch (IOException ioe) { - log.error("In pipe from {} to {}: {}", in, out, ioe); + log.error(String.format("In pipe from %1$s to %2$s", in.toString(), out.toString()), ioe); doneEvent.deliverError(ioe); } } @@ -136,7 +136,7 @@ public class StreamCopier { final double timeSeconds = (System.currentTimeMillis() - startTime) / 1000.0; final double sizeKiB = count / 1024.0; - log.debug("{} KiB transferred in {} seconds ({} KiB/s)", sizeKiB, timeSeconds, (sizeKiB / timeSeconds)); + log.debug(String.format("%1$d KiB transferred in %2$d seconds (%3$d KiB/s)", sizeKiB, timeSeconds, (sizeKiB / timeSeconds))); if (length != -1 && read == -1) throw new IOException("Encountered EOF, could not transfer " + length + " bytes");