Details
-
Bug
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
1.4
-
None
-
None
Description
Was getting an error when connecting to one of our vendor file servers that was returning "215 UNKNOWN Type: L8" for a SYST command.
The DefaultFTPFileEntryParserFactory does a toUpperCase on the key, which was then being compared to the constant SYST_L8.
That constant was "Type: L8", so it could never match.
Also some systems respond as "AS/400" instead of "OS/400", so added the check for that string.
Patch below and attached for 1.5, see issue NET-320 for patch for 2.0
- This patch file was generated by NetBeans IDE
- Following Index: paths are relative to: C:\Documents and Settings\robw\My Documents\NetBeansProjects\trunk
- This patch can be applied using context Tools: Patch action on respective folder.
- It uses platform neutral UTF-8 encoding and \n newlines.
- Above lines and this line are ignored by the patching process.
Index: src/java/org/apache/commons/net/ftp/FTPClientConfig.java-
- src/java/org/apache/commons/net/ftp/FTPClientConfig.java Base (BASE)
+++ src/java/org/apache/commons/net/ftp/FTPClientConfig.java Locally Modified (Based On LOCAL)
@@ -171,7 +171,13 @@
*/
public static final String SYST_OS400 = "OS/400";
- src/java/org/apache/commons/net/ftp/FTPClientConfig.java Base (BASE)
-
+
/**
+ * Alternate SYST value for an AS/400 system.
+ */
+ public static final String SYST_AS400 = "AS/400";
+
+ /**
- Identifier by which an MVS-based ftp server is known throughout
- the commons-net ftp system.
*/
@@ -185,7 +191,7 @@
* - @since 1.5
*/
- public static final String SYST_L8 = "Type: L8";
+ public static final String SYST_L8 = "TYPE: L8";
/**
- Identifier by which an Netware-based ftp server is known throughout
Index: src/java/org/apache/commons/net/ftp/parser/DefaultFTPFileEntryParserFactory.java-
- src/java/org/apache/commons/net/ftp/parser/DefaultFTPFileEntryParserFactory.java Base (BASE)
+++ src/java/org/apache/commons/net/ftp/parser/DefaultFTPFileEntryParserFactory.java Locally Modified (Based On LOCAL)
@@ -109,7 +109,8 @@ { parser = createOS2FTPEntryParser(); }
- src/java/org/apache/commons/net/ftp/parser/DefaultFTPFileEntryParserFactory.java Base (BASE)
-
- else if (ukey.indexOf(FTPClientConfig.SYST_OS400) >= 0)
+ else if ((ukey.indexOf(FTPClientConfig.SYST_OS400) >= 0)
+ || (ukey.indexOf(FTPClientConfig.SYST_AS400) >= 0)) { parser = createOS400FTPEntryParser(); }Index: src/test/org/apache/commons/net/ftp/parser/DefaultFTPFileEntryParserFactoryTest.java
-
- src/test/org/apache/commons/net/ftp/parser/DefaultFTPFileEntryParserFactoryTest.java Base (BASE)
+++ src/test/org/apache/commons/net/ftp/parser/DefaultFTPFileEntryParserFactoryTest.java Locally Modified (Based On LOCAL)
@@ -62,6 +62,15 @@
parser = factory.createFileEntryParser("OS/400");
assertTrue(parser instanceof CompositeFileEntryParser);
- src/test/org/apache/commons/net/ftp/parser/DefaultFTPFileEntryParserFactoryTest.java Base (BASE)
-
+ parser = factory.createFileEntryParser("AS/400");
+ assertTrue(parser instanceof CompositeFileEntryParser);
+
+ // Added test to make sure it handles the Unix systems that were
+ // compiled with OS as "UNKNOWN". This test validates that the
+ // check is case-insensitive.
+ parser = factory.createFileEntryParser("UNKNOWN Type: L8");
+
+
try {
parser = factory.createFileEntryParser("OS2FTPFileEntryParser");
fail("Exception should have been thrown. \"OS2FTPFileEntryParser\" is not a recognized key");