6852108: Remove Preferences dependance from SocksSocketImpl
Removed Preferences API use and fixed a few findbugs gotchas Reviewed-by: alanb
This commit is contained in:
parent
1d5c589340
commit
712e4baa4b
@ -29,7 +29,6 @@ import java.io.OutputStream;
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedExceptionAction;
|
||||
import java.util.prefs.Preferences;
|
||||
import sun.net.www.ParseUtil;
|
||||
/* import org.ietf.jgss.*; */
|
||||
|
||||
@ -41,7 +40,7 @@ import sun.net.www.ParseUtil;
|
||||
|
||||
class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
private String server = null;
|
||||
private int port = DEFAULT_PORT;
|
||||
private int serverPort = DEFAULT_PORT;
|
||||
private InetSocketAddress external_address;
|
||||
private boolean useV4 = false;
|
||||
private Socket cmdsock = null;
|
||||
@ -54,7 +53,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
|
||||
SocksSocketImpl(String server, int port) {
|
||||
this.server = server;
|
||||
this.port = (port == -1 ? DEFAULT_PORT : port);
|
||||
this.serverPort = (port == -1 ? DEFAULT_PORT : port);
|
||||
}
|
||||
|
||||
SocksSocketImpl(Proxy proxy) {
|
||||
@ -63,7 +62,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
InetSocketAddress ad = (InetSocketAddress) a;
|
||||
// Use getHostString() to avoid reverse lookups
|
||||
server = ad.getHostString();
|
||||
port = ad.getPort();
|
||||
serverPort = ad.getPort();
|
||||
}
|
||||
}
|
||||
|
||||
@ -113,16 +112,12 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
*/
|
||||
private boolean authenticate(byte method, InputStream in,
|
||||
BufferedOutputStream out) throws IOException {
|
||||
byte[] data = null;
|
||||
int i;
|
||||
// No Authentication required. We're done then!
|
||||
if (method == NO_AUTH)
|
||||
return true;
|
||||
/**
|
||||
* User/Password authentication. Try, in that order :
|
||||
* - The application provided Authenticator, if any
|
||||
* - The user preferences java.net.socks.username &
|
||||
* java.net.socks.password
|
||||
* - the user.name & no password (backward compatibility behavior).
|
||||
*/
|
||||
if (method == USER_PASSW) {
|
||||
@ -134,40 +129,15 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
new java.security.PrivilegedAction<PasswordAuthentication>() {
|
||||
public PasswordAuthentication run() {
|
||||
return Authenticator.requestPasswordAuthentication(
|
||||
server, addr, port, "SOCKS5", "SOCKS authentication", null);
|
||||
server, addr, serverPort, "SOCKS5", "SOCKS authentication", null);
|
||||
}
|
||||
});
|
||||
if (pw != null) {
|
||||
userName = pw.getUserName();
|
||||
password = new String(pw.getPassword());
|
||||
} else {
|
||||
final Preferences prefs = Preferences.userRoot().node("/java/net/socks");
|
||||
try {
|
||||
userName = AccessController.doPrivileged(
|
||||
new java.security.PrivilegedExceptionAction<String>() {
|
||||
public String run() throws IOException {
|
||||
return prefs.get("username", null);
|
||||
}
|
||||
});
|
||||
} catch (java.security.PrivilegedActionException pae) {
|
||||
throw (IOException) pae.getException();
|
||||
}
|
||||
|
||||
if (userName != null) {
|
||||
try {
|
||||
password = AccessController.doPrivileged(
|
||||
new java.security.PrivilegedExceptionAction<String>() {
|
||||
public String run() throws IOException {
|
||||
return prefs.get("password", null);
|
||||
}
|
||||
});
|
||||
} catch (java.security.PrivilegedActionException pae) {
|
||||
throw (IOException) pae.getException();
|
||||
}
|
||||
} else {
|
||||
userName = java.security.AccessController.doPrivileged(
|
||||
userName = java.security.AccessController.doPrivileged(
|
||||
new sun.security.action.GetPropertyAction("user.name"));
|
||||
}
|
||||
}
|
||||
if (userName == null)
|
||||
return false;
|
||||
@ -188,8 +158,8 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
} else
|
||||
out.write(0);
|
||||
out.flush();
|
||||
data = new byte[2];
|
||||
i = readSocksReply(in, data);
|
||||
byte[] data = new byte[2];
|
||||
int i = readSocksReply(in, data);
|
||||
if (i != 2 || data[1] != 0) {
|
||||
/* RFC 1929 specifies that the connection MUST be closed if
|
||||
authentication fails */
|
||||
@ -322,6 +292,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
* @throws IllegalArgumentException if endpoint is null or a
|
||||
* SocketAddress subclass not supported by this socket
|
||||
*/
|
||||
@Override
|
||||
protected void connect(SocketAddress endpoint, int timeout) throws IOException {
|
||||
SecurityManager security = System.getSecurityManager();
|
||||
if (endpoint == null || !(endpoint instanceof InetSocketAddress))
|
||||
@ -352,7 +323,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
super.connect(epoint, timeout);
|
||||
return;
|
||||
}
|
||||
URI uri = null;
|
||||
URI uri;
|
||||
// Use getHostString() to avoid reverse lookups
|
||||
String host = epoint.getHostString();
|
||||
// IPv6 litteral?
|
||||
@ -365,6 +336,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
} catch (URISyntaxException e) {
|
||||
// This shouldn't happen
|
||||
assert false : e;
|
||||
uri = null;
|
||||
}
|
||||
Proxy p = null;
|
||||
IOException savedExc = null;
|
||||
@ -386,18 +358,18 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
throw new SocketException("Unknow address type for proxy: " + p);
|
||||
// Use getHostString() to avoid reverse lookups
|
||||
server = ((InetSocketAddress) p.address()).getHostString();
|
||||
port = ((InetSocketAddress) p.address()).getPort();
|
||||
serverPort = ((InetSocketAddress) p.address()).getPort();
|
||||
|
||||
// Connects to the SOCKS server
|
||||
try {
|
||||
privilegedConnect(server, port, timeout);
|
||||
privilegedConnect(server, serverPort, timeout);
|
||||
// Worked, let's get outta here
|
||||
break;
|
||||
} catch (IOException e) {
|
||||
// Ooops, let's notify the ProxySelector
|
||||
sel.connectFailed(uri,p.address(),e);
|
||||
server = null;
|
||||
port = -1;
|
||||
serverPort = -1;
|
||||
savedExc = e;
|
||||
// Will continue the while loop and try the next proxy
|
||||
}
|
||||
@ -414,7 +386,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
} else {
|
||||
// Connects to the SOCKS server
|
||||
try {
|
||||
privilegedConnect(server, port, timeout);
|
||||
privilegedConnect(server, serverPort, timeout);
|
||||
} catch (IOException e) {
|
||||
throw new SocketException(e.getMessage());
|
||||
}
|
||||
@ -487,7 +459,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
if (i != 4)
|
||||
throw new SocketException("Reply from SOCKS server has bad length");
|
||||
SocketException ex = null;
|
||||
int nport, len;
|
||||
int len;
|
||||
byte[] addr;
|
||||
switch (data[1]) {
|
||||
case REQUEST_OK:
|
||||
@ -502,8 +474,6 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
i = readSocksReply(in, data);
|
||||
if (i != 2)
|
||||
throw new SocketException("Reply from SOCKS server badly formatted");
|
||||
nport = ((int)data[0] & 0xff) << 8;
|
||||
nport += ((int)data[1] & 0xff);
|
||||
break;
|
||||
case DOMAIN_NAME:
|
||||
len = data[1];
|
||||
@ -515,8 +485,6 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
i = readSocksReply(in, data);
|
||||
if (i != 2)
|
||||
throw new SocketException("Reply from SOCKS server badly formatted");
|
||||
nport = ((int)data[0] & 0xff) << 8;
|
||||
nport += ((int)data[1] & 0xff);
|
||||
break;
|
||||
case IPV6:
|
||||
len = data[1];
|
||||
@ -528,8 +496,6 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
i = readSocksReply(in, data);
|
||||
if (i != 2)
|
||||
throw new SocketException("Reply from SOCKS server badly formatted");
|
||||
nport = ((int)data[0] & 0xff) << 8;
|
||||
nport += ((int)data[1] & 0xff);
|
||||
break;
|
||||
default:
|
||||
ex = new SocketException("Reply from SOCKS server contains wrong code");
|
||||
@ -663,7 +629,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
*/
|
||||
return;
|
||||
}
|
||||
URI uri = null;
|
||||
URI uri;
|
||||
// Use getHostString() to avoid reverse lookups
|
||||
String host = saddr.getHostString();
|
||||
// IPv6 litteral?
|
||||
@ -676,6 +642,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
} catch (URISyntaxException e) {
|
||||
// This shouldn't happen
|
||||
assert false : e;
|
||||
uri = null;
|
||||
}
|
||||
Proxy p = null;
|
||||
Exception savedExc = null;
|
||||
@ -695,7 +662,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
throw new SocketException("Unknow address type for proxy: " + p);
|
||||
// Use getHostString() to avoid reverse lookups
|
||||
server = ((InetSocketAddress) p.address()).getHostString();
|
||||
port = ((InetSocketAddress) p.address()).getPort();
|
||||
serverPort = ((InetSocketAddress) p.address()).getPort();
|
||||
|
||||
// Connects to the SOCKS server
|
||||
try {
|
||||
@ -703,7 +670,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
new PrivilegedExceptionAction<Void>() {
|
||||
public Void run() throws Exception {
|
||||
cmdsock = new Socket(new PlainSocketImpl());
|
||||
cmdsock.connect(new InetSocketAddress(server, port));
|
||||
cmdsock.connect(new InetSocketAddress(server, serverPort));
|
||||
cmdIn = cmdsock.getInputStream();
|
||||
cmdOut = cmdsock.getOutputStream();
|
||||
return null;
|
||||
@ -713,7 +680,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
// Ooops, let's notify the ProxySelector
|
||||
sel.connectFailed(uri,p.address(),new SocketException(e.getMessage()));
|
||||
server = null;
|
||||
port = -1;
|
||||
serverPort = -1;
|
||||
cmdsock = null;
|
||||
savedExc = e;
|
||||
// Will continue the while loop and try the next proxy
|
||||
@ -734,7 +701,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
new PrivilegedExceptionAction<Void>() {
|
||||
public Void run() throws Exception {
|
||||
cmdsock = new Socket(new PlainSocketImpl());
|
||||
cmdsock.connect(new InetSocketAddress(server, port));
|
||||
cmdsock.connect(new InetSocketAddress(server, serverPort));
|
||||
cmdIn = cmdsock.getInputStream();
|
||||
cmdOut = cmdsock.getOutputStream();
|
||||
return null;
|
||||
@ -809,7 +776,6 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
switch (data[1]) {
|
||||
case REQUEST_OK:
|
||||
// success!
|
||||
InetSocketAddress real_end = null;
|
||||
switch(data[3]) {
|
||||
case IPV4:
|
||||
addr = new byte[4];
|
||||
@ -1016,6 +982,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
* @return the value of this socket's <code>address</code> field.
|
||||
* @see java.net.SocketImpl#address
|
||||
*/
|
||||
@Override
|
||||
protected InetAddress getInetAddress() {
|
||||
if (external_address != null)
|
||||
return external_address.getAddress();
|
||||
@ -1029,6 +996,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
* @return the value of this socket's <code>port</code> field.
|
||||
* @see java.net.SocketImpl#port
|
||||
*/
|
||||
@Override
|
||||
protected int getPort() {
|
||||
if (external_address != null)
|
||||
return external_address.getPort();
|
||||
@ -1036,6 +1004,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
return super.getPort();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLocalPort() {
|
||||
if (socket != null)
|
||||
return super.getLocalPort();
|
||||
@ -1045,6 +1014,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
|
||||
return super.getLocalPort();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void close() throws IOException {
|
||||
if (cmdsock != null)
|
||||
cmdsock.close();
|
||||
|
Loading…
x
Reference in New Issue
Block a user