Ver código fonte

Apache MINA sshd client: don't leak HostConfigEntry

ProxyDataFactory had a parameter of type HostConfigEntry, but actually
it wasn't used anywhere. Remove it -- it was the last leaked type from
Apache MINA sshd.

Also use the logger provided by upstream SshClient instead of creating
a new Logger.

Bug: 520927
Change-Id: Iaa78bbb998a5e574fa091664b75c48a3b9cfb897
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
tags/v5.2.0.201811281532-m3
Thomas Wolf 5 anos atrás
pai
commit
c567b6ecde

+ 5
- 8
org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitSshClient.java Ver arquivo

import org.eclipse.jgit.transport.sshd.KeyCache; import org.eclipse.jgit.transport.sshd.KeyCache;
import org.eclipse.jgit.transport.sshd.ProxyData; import org.eclipse.jgit.transport.sshd.ProxyData;
import org.eclipse.jgit.transport.sshd.ProxyDataFactory; import org.eclipse.jgit.transport.sshd.ProxyDataFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/** /**
* Customized {@link SshClient} for JGit. It creates specialized * Customized {@link SshClient} for JGit. It creates specialized
* were created for, and it loads all KeyPair identities lazily. * were created for, and it loads all KeyPair identities lazily.
*/ */
public class JGitSshClient extends SshClient { public class JGitSshClient extends SshClient {
private static Logger LOG = LoggerFactory.getLogger(JGitSshClient.class);
/** /**
* We need access to this during the constructor of the ClientSession, * We need access to this during the constructor of the ClientSession,
* before setConnectAddress() can have been called. So we have to remember * before setConnectAddress() can have been called. So we have to remember
setAttribute(HOST_CONFIG_ENTRY, hostConfig); setAttribute(HOST_CONFIG_ENTRY, hostConfig);
setAttribute(ORIGINAL_REMOTE_ADDRESS, address); setAttribute(ORIGINAL_REMOTE_ADDRESS, address);
// Proxy support // Proxy support
ProxyData proxy = getProxyData(hostConfig, address);
ProxyData proxy = getProxyData(address);
if (proxy != null) { if (proxy != null) {
address = configureProxy(proxy, address); address = configureProxy(proxy, address);
proxy.clearPassword(); proxy.clearPassword();
} }
} }


private ProxyData getProxyData(HostConfigEntry hostConfig,
InetSocketAddress remoteAddress) {
private ProxyData getProxyData(InetSocketAddress remoteAddress) {
ProxyDataFactory factory = getProxyDatabase(); ProxyDataFactory factory = getProxyDatabase();
return factory == null ? null : factory.get(hostConfig, remoteAddress);
return factory == null ? null : factory.get(remoteAddress);
} }


private InetSocketAddress configureProxy(ProxyData proxyData, private InetSocketAddress configureProxy(ProxyData proxyData,
proxyData.getUser(), proxyData.getPassword())); proxyData.getUser(), proxyData.getPassword()));
return address; return address;
default: default:
LOG.warn(format(SshdText.get().unknownProxyProtocol,
log.warn(format(SshdText.get().unknownProxyProtocol,
proxy.type().name())); proxy.type().name()));
return remoteAddress; return remoteAddress;
} }

+ 1
- 4
org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/transport/sshd/DefaultProxyDataFactory.java Ver arquivo

import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.util.List; import java.util.List;


import org.apache.sshd.client.config.hosts.HostConfigEntry;

/** /**
* A default implementation of a {@link ProxyDataFactory} based on the standard * A default implementation of a {@link ProxyDataFactory} based on the standard
* {@link java.net.ProxySelector}. * {@link java.net.ProxySelector}.
public class DefaultProxyDataFactory implements ProxyDataFactory { public class DefaultProxyDataFactory implements ProxyDataFactory {


@Override @Override
public ProxyData get(HostConfigEntry hostConfig,
InetSocketAddress remoteAddress) {
public ProxyData get(InetSocketAddress remoteAddress) {
try { try {
List<Proxy> proxies = ProxySelector.getDefault() List<Proxy> proxies = ProxySelector.getDefault()
.select(new URI(Proxy.Type.SOCKS.name(), .select(new URI(Proxy.Type.SOCKS.name(),

+ 1
- 5
org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/transport/sshd/ProxyDataFactory.java Ver arquivo



import java.net.InetSocketAddress; import java.net.InetSocketAddress;


import org.apache.sshd.client.config.hosts.HostConfigEntry;

/** /**
* Interface for obtaining {@link ProxyData} to connect through some proxy. * Interface for obtaining {@link ProxyData} to connect through some proxy.
* *
* {@link ProxyData} contains a password, the {@link SshdSession} will clear * {@link ProxyData} contains a password, the {@link SshdSession} will clear
* it once it is no longer needed. * it once it is no longer needed.
* *
* @param hostConfig
* from the ssh config that we're going to connect for
* @param remoteAddress * @param remoteAddress
* to connect to * to connect to
* @return the {@link ProxyData} or {@code null} if a direct connection is * @return the {@link ProxyData} or {@code null} if a direct connection is
* to be made * to be made
*/ */
ProxyData get(HostConfigEntry hostConfig, InetSocketAddress remoteAddress);
ProxyData get(InetSocketAddress remoteAddress);
} }

Carregando…
Cancelar
Salvar