This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-net.git

commit 15cc91c090b6175896949c9f3d104c897eea5408
Author: Gary Gregory <garydgreg...@gmail.com>
AuthorDate: Wed Feb 19 20:01:05 2025 -0500

    FTPClientExample uses the wrong FTP system type to parse file lines
    
    For example, when connecting to Microsoft ISS FTP on Windows
    10.0.19045.5371, the FTPClientExample thought it was connected to a Unix
    system which caused it not be able to parse file lines
---
 src/changes/changes.xml                            |  1 +
 .../commons/net/examples/ftp/FTPClientExample.java | 24 ++++++++++++++--------
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 78a2d2b8..42777ddc 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -85,6 +85,7 @@ The <action> type attribute can be add,update,fix,remove.
       <action type="fix" dev="ggregory" due-to="Gary Gregory">Deprecate 
FTPFileFilters.FTPFileFilters().</action>
       <action type="fix" dev="ggregory" due-to="Gary Gregory">Avoid multiple 
possible NullPointerException in SocketClient.verifyRemote(Socket).</action>
       <action type="fix" dev="ggregory" due-to="Gary 
Gregory">PrintCommandListener.protocolReplyReceived(ProtocolCommandEvent) 
doesn't always use an end-of-line.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">FTPClientExample 
uses the wrong FTP system type to parse file lines.</action>
       <!-- ADD -->
       <action type="add" dev="ggregory" due-to="Gary Gregory">Add 
org.apache.commons.net.nntp.Article#getChild().</action>
       <action type="add" dev="ggregory" due-to="Gary Gregory">Add 
org.apache.commons.net.nntp.Article#getNext().</action>
diff --git 
a/src/main/java/org/apache/commons/net/examples/ftp/FTPClientExample.java 
b/src/main/java/org/apache/commons/net/examples/ftp/FTPClientExample.java
index 17aaf830..3d691061 100644
--- a/src/main/java/org/apache/commons/net/examples/ftp/FTPClientExample.java
+++ b/src/main/java/org/apache/commons/net/examples/ftp/FTPClientExample.java
@@ -88,6 +88,18 @@ public final class FTPClientExample {
             + "\t-# - add hash display during transfers\n";
     // @formatter:on
 
+    private static void configure(final FTPClient ftp, final FTPClientConfig 
config, final String defaultDateFormat, final String recentDateFormat,
+            final boolean saveUnparseable) {
+        config.setUnparseableEntries(saveUnparseable);
+        if (defaultDateFormat != null) {
+            config.setDefaultDateFormatStr(defaultDateFormat);
+        }
+        if (recentDateFormat != null) {
+            config.setRecentDateFormatStr(recentDateFormat);
+        }
+        ftp.configure(config);
+    }
+
     private static CopyStreamListener createListener() {
         return new CopyStreamListener() {
             private long megsTotal;
@@ -315,14 +327,7 @@ public final class FTPClientExample {
         } else {
             config = new FTPClientConfig();
         }
-        config.setUnparseableEntries(saveUnparseable);
-        if (defaultDateFormat != null) {
-            config.setDefaultDateFormatStr(defaultDateFormat);
-        }
-        if (recentDateFormat != null) {
-            config.setRecentDateFormatStr(recentDateFormat);
-        }
-        ftp.configure(config);
+        configure(ftp, config, defaultDateFormat, recentDateFormat, 
saveUnparseable);
 
         try {
             final int reply;
@@ -363,6 +368,9 @@ public final class FTPClientExample {
             }
 
             System.out.println("Remote system is " + ftp.getSystemType());
+            if (!ftp.getSystemType().contains(config.getServerSystemKey())) {
+                configure(ftp, new FTPClientConfig(ftp.getSystemType()), 
defaultDateFormat, recentDateFormat, saveUnparseable);
+            }
             if (opts != null) {
                 ftp.opts(opts);
             }

Reply via email to