You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ftpserver-commits@incubator.apache.org by ng...@apache.org on 2006/11/28 21:52:04 UTC
svn commit: r480226 - in /incubator/ftpserver/trunk/core: ./
src/java/org/apache/ftpserver/ src/java/org/apache/ftpserver/interfaces/
src/test/org/apache/ftpserver/clienttests/
src/test/org/apache/ftpserver/test/
Author: ngn
Date: Tue Nov 28 13:52:02 2006
New Revision: 480226
URL: http://svn.apache.org/viewvc?view=rev&rev=480226
Log:
Applying patch for bug where the incorrect IP is returned when a server has multiple NICs and the client issues a PASV command. Thanks to Joseph Ferner for finding the bug and providing the patch. (FTPSERVER-51)
Also adding a test case to reproduce the bug. The patch fixes makes the test case succeed.
Modified:
incubator/ftpserver/trunk/core/ (props changed)
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/DefaultDataConnectionConfig.java
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpDataConnection.java
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpWriter.java
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/RequestHandler.java
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/interfaces/DataConnectionConfig.java
incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/clienttests/ClientTestTemplate.java
incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/clienttests/LoginTest.java
incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/test/TestUtil.java
Propchange: incubator/ftpserver/trunk/core/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Tue Nov 28 13:52:02 2006
@@ -6,3 +6,4 @@
.wtpmodules
cobertura.ser
.lint4jprefs
+res
Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/DefaultDataConnectionConfig.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/DefaultDataConnectionConfig.java?view=diff&rev=480226&r1=480225&r2=480226
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/DefaultDataConnectionConfig.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/DefaultDataConnectionConfig.java Tue Nov 28 13:52:02 2006
@@ -92,7 +92,7 @@
String pasvAddress = passiveConf.getString("address", null);
if(pasvAddress == null) {
- passiveAddress = InetAddress.getLocalHost();
+ passiveAddress = null;
}
else {
passiveAddress = InetAddress.getByName(pasvAddress);
Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpDataConnection.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpDataConnection.java?view=diff&rev=480226&r1=480225&r2=480226
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpDataConnection.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpDataConnection.java Tue Nov 28 13:52:02 2006
@@ -55,6 +55,8 @@
private boolean secure = false;
private boolean isZip = false;
+
+ private InetAddress serverControlAddress;
/**
@@ -134,6 +136,9 @@
try {
DataConnectionConfig dataCfg = fconfig.getDataConnectionConfig();
address = dataCfg.getPassiveAddress();
+ if(address == null) {
+ address = serverControlAddress;
+ }
if(secure) {
Ssl ssl = dataCfg.getSSL();
if(ssl == null) {
@@ -283,6 +288,13 @@
*/
public void dispose() {
closeDataSocket();
+ }
+
+ /**
+ * Sets the server's control address.
+ */
+ public void setServerControlAddress(InetAddress serverControlAddress) {
+ this.serverControlAddress = serverControlAddress;
}
}
Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpWriter.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpWriter.java?view=diff&rev=480226&r1=480225&r2=480226
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpWriter.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpWriter.java Tue Nov 28 13:52:02 2006
@@ -96,12 +96,14 @@
private ConnectionObserver observer;
private ServerFtpConfig fconfig;
private FtpRequest request;
+ private InetAddress serverAddress;
/**
* Set the control socket.
*/
public void setControlSocket(Socket soc) throws IOException {
+ serverAddress = soc.getLocalAddress();
writer = new OutputStreamWriter(soc.getOutputStream(), "UTF-8");
}
@@ -312,6 +314,9 @@
// server address
if(varName.equals(SERVER_IP)) {
InetAddress addr = fconfig.getDataConnectionConfig().getPassiveAddress();
+ if(addr == null) {
+ addr = serverAddress;
+ }
varVal = addr.getHostAddress();
}
Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/RequestHandler.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/RequestHandler.java?view=diff&rev=480226&r1=480225&r2=480226
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/RequestHandler.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/RequestHandler.java Tue Nov 28 13:52:02 2006
@@ -78,6 +78,7 @@
// data connection object
FtpDataConnection dataCon = new FtpDataConnection();
dataCon.setFtpConfig(this.fconfig);
+ dataCon.setServerControlAddress(controlSocket.getLocalAddress());
// reader object
request = new FtpRequestImpl();
Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/interfaces/DataConnectionConfig.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/interfaces/DataConnectionConfig.java?view=diff&rev=480226&r1=480225&r2=480226
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/interfaces/DataConnectionConfig.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/interfaces/DataConnectionConfig.java Tue Nov 28 13:52:02 2006
@@ -57,7 +57,7 @@
int getActiveLocalPort();
/**
- * Get passive server address.
+ * Get passive server address. null, if not set in the configuration.
*/
InetAddress getPassiveAddress();
Modified: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/clienttests/ClientTestTemplate.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/clienttests/ClientTestTemplate.java?view=diff&rev=480226&r1=480225&r2=480226
==============================================================================
--- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/clienttests/ClientTestTemplate.java (original)
+++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/clienttests/ClientTestTemplate.java Tue Nov 28 13:52:02 2006
@@ -140,15 +140,21 @@
log.debug("< " + event.getMessage().trim());
}});
- try{
- client.connect("localhost", port);
- } catch(FTPConnectionClosedException e) {
- // try again
- Thread.sleep(200);
- client.connect("localhost", port);
+ if(isConnectClient()) {
+ try{
+ client.connect("localhost", port);
+ } catch(FTPConnectionClosedException e) {
+ // try again
+ Thread.sleep(200);
+ client.connect("localhost", port);
+ }
}
}
+ protected boolean isConnectClient() {
+ return true;
+ }
+
/**
* Attempts to find a free port or fallback to a default
* @throws IOException
Modified: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/clienttests/LoginTest.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/clienttests/LoginTest.java?view=diff&rev=480226&r1=480225&r2=480226
==============================================================================
--- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/clienttests/LoginTest.java (original)
+++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/clienttests/LoginTest.java Tue Nov 28 13:52:02 2006
@@ -106,22 +106,6 @@
assertFalse(client.login(UNKNOWN_USERNAME, UNKNOWN_PASSWORD));
}
- private String[] getHostAddresses() throws Exception {
- Enumeration nifs = NetworkInterface.getNetworkInterfaces();
-
- List hostIps = new ArrayList();
- while (nifs.hasMoreElements()) {
- NetworkInterface nif = (NetworkInterface) nifs.nextElement();
- Enumeration ips = nif.getInetAddresses();
-
- while (ips.hasMoreElements()) {
- InetAddress ip = (InetAddress) ips.nextElement();
- hostIps.add(ip.getHostAddress());
- }
- }
-
- return (String[]) hostIps.toArray(new String[0]);
- }
/*
public void testLoginWithMaxConnectionsPerIp() throws Exception {
String[] ips = getHostAddresses();
Modified: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/test/TestUtil.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/test/TestUtil.java?view=diff&rev=480226&r1=480225&r2=480226
==============================================================================
--- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/test/TestUtil.java (original)
+++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/test/TestUtil.java Tue Nov 28 13:52:02 2006
@@ -23,7 +23,12 @@
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
import java.net.ServerSocket;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
import junit.framework.TestCase;
@@ -89,6 +94,23 @@
return port;
}
+ public static String[] getHostAddresses() throws Exception {
+ Enumeration nifs = NetworkInterface.getNetworkInterfaces();
+
+ List hostIps = new ArrayList();
+ while (nifs.hasMoreElements()) {
+ NetworkInterface nif = (NetworkInterface) nifs.nextElement();
+ Enumeration ips = nif.getInetAddresses();
+
+ while (ips.hasMoreElements()) {
+ InetAddress ip = (InetAddress) ips.nextElement();
+ hostIps.add(ip.getHostAddress());
+ }
+ }
+
+ return (String[]) hostIps.toArray(new String[0]);
+ }
+
public static void assertFileEqual(byte[] expected, File file)
throws Exception {
ByteArrayOutputStream baos = null;