gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnurl] 136/411: ftp: a 550 response to SIZE returns CURLE_REMOTE_FILE_N


From: gnunet
Subject: [gnurl] 136/411: ftp: a 550 response to SIZE returns CURLE_REMOTE_FILE_NOT_FOUND
Date: Wed, 13 Jan 2021 01:19:11 +0100

This is an automated email from the git hooks/post-receive script.

nikita pushed a commit to branch master
in repository gnurl.

commit 7ea2e1d0c5a7fc7e2797a2d3c2a2429d6e09e581
Author: Daniel Stenberg <daniel@haxx.se>
AuthorDate: Sat Sep 12 18:27:08 2020 +0200

    ftp: a 550 response to SIZE returns CURLE_REMOTE_FILE_NOT_FOUND
    
    This is primarily interesting for cases where CURLOPT_NOBODY is set as
    previously curl would not return an error for this case.
    
    MDTM getting 550 now also returns this error (it returned
    CURLE_FTP_COULDNT_RETR_FILE before) in order to unify return codes for
    missing files across protocols and specific FTP commands.
    
    libcurl already returns error on a 550 as a MDTM response (when
    CURLOPT_FILETIME is set). If CURLOPT_NOBODY is not set, an error would
    happen subsequently anyway since the RETR command would fail.
    
    Add test 1913 and 1914 to verify. Updated several tests accordingly due
    to the updated SIZE behavior.
    
    Reported-by: Tomas Berger
    Fixes #5953
    Closes #5957
---
 lib/ftp.c                        |  6 ++++-
 tests/data/Makefile.inc          |  2 +-
 tests/data/test1096              |  1 +
 tests/data/test118               |  1 +
 tests/data/test119               |  1 +
 tests/data/test138               |  1 +
 tests/data/{test118 => test1913} | 37 +++++++++++++------------------
 tests/data/{test118 => test1914} | 38 ++++++++++++++-----------------
 tests/data/test235               |  3 +++
 tests/data/test236               |  1 +
 tests/data/test511               |  4 ++--
 tests/data/test533               |  2 +-
 tests/data/test534               |  2 +-
 tests/data/test546               |  2 +-
 tests/libtest/Makefile.inc       |  6 ++++-
 tests/libtest/lib1913.c          | 48 ++++++++++++++++++++++++++++++++++++++++
 16 files changed, 103 insertions(+), 52 deletions(-)

diff --git a/lib/ftp.c b/lib/ftp.c
index 9fadac513..d4ecf9a96 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -2092,7 +2092,7 @@ static CURLcode ftp_state_mdtm_resp(struct connectdata 
*conn,
     break;
   case 550: /* "No such file or directory" */
     failf(data, "Given file does not exist");
-    result = CURLE_FTP_COULDNT_RETR_FILE;
+    result = CURLE_REMOTE_FILE_NOT_FOUND;
     break;
   }
 
@@ -2272,6 +2272,10 @@ static CURLcode ftp_state_size_resp(struct connectdata 
*conn,
     (void)curlx_strtoofft(fdigit, NULL, 0, &filesize);
 
   }
+  else if(ftpcode == 550) { /* "No such file or directory" */
+    failf(data, "The file does not exist");
+    return CURLE_REMOTE_FILE_NOT_FOUND;
+  }
 
   if(instate == FTP_SIZE) {
 #ifdef CURL_FTP_HTTPSTYLE_HEAD
diff --git a/tests/data/Makefile.inc b/tests/data/Makefile.inc
index 3832e26b4..606a6031a 100644
--- a/tests/data/Makefile.inc
+++ b/tests/data/Makefile.inc
@@ -207,7 +207,7 @@ test1700 test1701 test1702 \
 test1800 test1801 \
 \
                                     test1904 test1905 test1906 test1907 \
-test1908 test1909 test1910 test1911 test1912 \
+test1908 test1909 test1910 test1911 test1912 test1913 test1914 \
 \
 test2000 test2001 test2002 test2003 test2004 test2005 test2006 test2007 \
 test2008 test2009 test2010 test2011 test2012 test2013 test2014 test2015 \
diff --git a/tests/data/test1096 b/tests/data/test1096
index 30748c1b4..a6c32c3a1 100644
--- a/tests/data/test1096
+++ b/tests/data/test1096
@@ -11,6 +11,7 @@ FAILURE
 <reply>
 <servercmd>
 REPLY RETR 550 no such file!
+REPLY SIZE 500 command not understood
 </servercmd>
 </reply>
 
diff --git a/tests/data/test118 b/tests/data/test118
index 6cd086ca2..94985e319 100644
--- a/tests/data/test118
+++ b/tests/data/test118
@@ -12,6 +12,7 @@ FAILURE
 <servercmd>
 REPLY RETR 314 bluah you f00l!
 REPLY EPSV 314 bluah you f00l!
+REPLY SIZE 500 command not understood
 </servercmd>
 </reply>
 
diff --git a/tests/data/test119 b/tests/data/test119
index 00a24287b..95d1021ca 100644
--- a/tests/data/test119
+++ b/tests/data/test119
@@ -11,6 +11,7 @@ FAILURE
 <reply>
 <servercmd>
 REPLY RETR 314 bluah you f00l!
+REPLY SIZE 500 command not understood
 </servercmd>
 </reply>
 
diff --git a/tests/data/test138 b/tests/data/test138
index 4eb73e6cf..873313848 100644
--- a/tests/data/test138
+++ b/tests/data/test138
@@ -15,6 +15,7 @@ this is file contents
 </size>
 <servercmd>
 RETRNOSIZE
+REPLY SIZE 500 command not understood
 </servercmd>
 </reply>
 
diff --git a/tests/data/test118 b/tests/data/test1913
similarity index 50%
copy from tests/data/test118
copy to tests/data/test1913
index 6cd086ca2..daf749025 100644
--- a/tests/data/test118
+++ b/tests/data/test1913
@@ -2,16 +2,14 @@
 <info>
 <keywords>
 FTP
-PASV
-RETR
-FAILURE
+CURLOPT_NOBODY
 </keywords>
 </info>
+
 # Server-side
 <reply>
 <servercmd>
-REPLY RETR 314 bluah you f00l!
-REPLY EPSV 314 bluah you f00l!
+REPLY SIZE 550 no such file
 </servercmd>
 </reply>
 
@@ -20,29 +18,24 @@ REPLY EPSV 314 bluah you f00l!
 <server>
 ftp
 </server>
- <name>
-FTP download, failed RETR
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/118
+
+# require debug so that alt-svc can work over plain old HTTP
+<name>
+FTP with NOBODY set, getting a missing file
+</name>
+<tool>
+lib1913
+</tool>
+
+<command>
+ftp://%HOSTIP:%FTPPORT/not-there/1913
 </command>
 </client>
 
 # Verify data after the test has been "shot"
 <verify>
 <errorcode>
-19
+78
 </errorcode>
-<protocol>
-USER anonymous
-PASS ftp@example.com
-PWD
-EPSV
-PASV
-TYPE I
-SIZE 118
-RETR 118
-QUIT
-</protocol>
 </verify>
 </testcase>
diff --git a/tests/data/test118 b/tests/data/test1914
similarity index 50%
copy from tests/data/test118
copy to tests/data/test1914
index 6cd086ca2..1aa3e48c0 100644
--- a/tests/data/test118
+++ b/tests/data/test1914
@@ -2,16 +2,15 @@
 <info>
 <keywords>
 FTP
-PASV
-RETR
-FAILURE
+CURLOPT_NOBODY
+CURLOPT_FILETIME
 </keywords>
 </info>
+
 # Server-side
 <reply>
 <servercmd>
-REPLY RETR 314 bluah you f00l!
-REPLY EPSV 314 bluah you f00l!
+REPLY MDTM 550 no such file
 </servercmd>
 </reply>
 
@@ -20,29 +19,24 @@ REPLY EPSV 314 bluah you f00l!
 <server>
 ftp
 </server>
- <name>
-FTP download, failed RETR
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/118
+
+# require debug so that alt-svc can work over plain old HTTP
+<name>
+FTP with NOBODY and FILETIME set, getting a missing file
+</name>
+<tool>
+lib1913
+</tool>
+
+<command>
+ftp://%HOSTIP:%FTPPORT/not-there/1913 1
 </command>
 </client>
 
 # Verify data after the test has been "shot"
 <verify>
 <errorcode>
-19
+78
 </errorcode>
-<protocol>
-USER anonymous
-PASS ftp@example.com
-PWD
-EPSV
-PASV
-TYPE I
-SIZE 118
-RETR 118
-QUIT
-</protocol>
 </verify>
 </testcase>
diff --git a/tests/data/test235 b/tests/data/test235
index 625023221..94abb951c 100644
--- a/tests/data/test235
+++ b/tests/data/test235
@@ -7,6 +7,9 @@ FTP
 
 # Server-side
 <reply>
+<servercmd>
+REPLY SIZE 500 command not understood
+</servercmd>
 </reply>
 
 # Client-side
diff --git a/tests/data/test236 b/tests/data/test236
index 9ba706f1d..92e34bc3e 100644
--- a/tests/data/test236
+++ b/tests/data/test236
@@ -11,6 +11,7 @@ FTP
 REPLY SIZE 550 access to this file is very much denied
 REPLY APPE 550 I said: access to this file is very much denied
 REPLY STOR 550 I said: access to this file is very much denied
+REPLY SIZE 500 command not understood
 </servercmd>
 </reply>
 
diff --git a/tests/data/test511 b/tests/data/test511
index 72b79938c..1a251fd89 100644
--- a/tests/data/test511
+++ b/tests/data/test511
@@ -35,9 +35,9 @@ ftp://%HOSTIP:%FTPPORT/511
 #
 # Verify data after the test has been "shot"
 <verify>
-# CURLE_FTP_COULDNT_RETR_FILE
+# CURLE_REMOTE_FILE_NOT_FOUND
 <errorcode>
-19
+78
 </errorcode>
 <protocol>
 USER anonymous
diff --git a/tests/data/test533 b/tests/data/test533
index f4446cbe0..a67c8c824 100644
--- a/tests/data/test533
+++ b/tests/data/test533
@@ -15,7 +15,7 @@ multi
 
 <servercmd>
 REPLY RETR 550 the file doesn't exist
-REPLY SIZE 550 Can't check for file existence
+REPLY SIZE 500 Can't check for file existence
 </servercmd>
 </reply>
 
diff --git a/tests/data/test534 b/tests/data/test534
index 6045dba61..ba3f721e7 100644
--- a/tests/data/test534
+++ b/tests/data/test534
@@ -16,7 +16,7 @@ non-existing host
 
 <servercmd>
 REPLY RETR 550 the file doesn't exist
-REPLY SIZE 550 Can't check for file existence
+REPLY SIZE 500 Can't check for file existence
 </servercmd>
 </reply>
 
diff --git a/tests/data/test546 b/tests/data/test546
index 12e604a0e..00dca99fa 100644
--- a/tests/data/test546
+++ b/tests/data/test546
@@ -21,7 +21,7 @@ works
 <servercmd>
 REPLY RETR 550 the file doesn't exist
 COUNT RETR 1
-REPLY SIZE 550 Can't check for file existence
+REPLY SIZE 500 Can't check for file existence
 COUNT SIZE 1
 </servercmd>
 </reply>
diff --git a/tests/libtest/Makefile.inc b/tests/libtest/Makefile.inc
index 4904515cd..98fd2ee9f 100644
--- a/tests/libtest/Makefile.inc
+++ b/tests/libtest/Makefile.inc
@@ -58,7 +58,7 @@ noinst_PROGRAMS = chkhostname libauthretry libntlmconnect     
           \
  lib1550 lib1551 lib1552 lib1553 lib1554 lib1555 lib1556 lib1557 \
  lib1558 lib1559 lib1560 lib1564 lib1565 lib1567 \
  lib1591 lib1592 lib1593 lib1594 lib1596 \
-         lib1905 lib1906 lib1907 lib1908 lib1910 lib1911 lib1912 \
+         lib1905 lib1906 lib1907 lib1908 lib1910 lib1911 lib1912 lib1913 \
          lib3010
 
 chkdecimalpoint_SOURCES = chkdecimalpoint.c ../../lib/mprintf.c \
@@ -645,6 +645,10 @@ lib1912_SOURCES = lib1912.c $(SUPPORTFILES) $(TESTUTIL) 
$(WARNLESS)
 lib1912_LDADD = $(TESTUTIL_LIBS)
 lib1912_CPPFLAGS = $(AM_CPPFLAGS)
 
+lib1913_SOURCES = lib1913.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1913_LDADD = $(TESTUTIL_LIBS)
+lib1913_CPPFLAGS = $(AM_CPPFLAGS)
+
 lib3010_SOURCES = lib3010.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
 lib3010_LDADD = $(TESTUTIL_LIBS)
 lib3010_CPPFLAGS = $(AM_CPPFLAGS)
diff --git a/tests/libtest/lib1913.c b/tests/libtest/lib1913.c
new file mode 100644
index 000000000..b8ef96e36
--- /dev/null
+++ b/tests/libtest/lib1913.c
@@ -0,0 +1,48 @@
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at https://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+#include "test.h"
+
+#include "testutil.h"
+#include "warnless.h"
+#include "memdebug.h"
+
+int test(char *URL)
+{
+  CURLcode ret = CURLE_OK;
+  CURL *hnd;
+  start_test_timing();
+
+  curl_global_init(CURL_GLOBAL_ALL);
+
+  hnd = curl_easy_init();
+  if(hnd) {
+    curl_easy_setopt(hnd, CURLOPT_URL, URL);
+    curl_easy_setopt(hnd, CURLOPT_NOBODY, 1L);
+    if(libtest_arg2)
+      /* test1914 sets this extra arg */
+      curl_easy_setopt(hnd, CURLOPT_FILETIME, 1L);
+    ret = curl_easy_perform(hnd);
+    curl_easy_cleanup(hnd);
+  }
+  curl_global_cleanup();
+  return (int)ret;
+}

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]