diff options
-rw-r--r-- | lib/ftp.c | 8 | ||||
-rw-r--r-- | tests/data/Makefile.inc | 2 | ||||
-rw-r--r-- | tests/data/test3027 | 55 | ||||
-rw-r--r-- | tests/data/test511 | 2 | ||||
-rw-r--r-- | tests/libtest/Makefile.inc | 6 | ||||
-rw-r--r-- | tests/libtest/lib3027.c | 56 |
6 files changed, 124 insertions, 5 deletions
@@ -2131,9 +2131,11 @@ static CURLcode ftp_state_mdtm_resp(struct Curl_easy *data, default: infof(data, "unsupported MDTM reply format"); break; - case 550: /* "No such file or directory" */ - failf(data, "Given file does not exist"); - result = CURLE_REMOTE_FILE_NOT_FOUND; + case 550: /* 550 is used for several different problems, e.g. + "No such file or directory" or "Permission denied". + It does not mean that the file does not exist at all. */ + infof(data, "MDTM failed: file does not exist or permission problem," + " continuing"); break; } diff --git a/tests/data/Makefile.inc b/tests/data/Makefile.inc index 818ee0852..f6788ce0a 100644 --- a/tests/data/Makefile.inc +++ b/tests/data/Makefile.inc @@ -245,4 +245,4 @@ test2200 test2201 test2202 test2203 test2204 test2205 \ test3000 test3001 test3002 test3003 test3004 test3005 test3006 test3007 \ test3008 test3009 test3010 test3011 test3012 test3013 test3014 test3015 \ test3016 test3017 test3018 test3019 test3020 test3021 test3022 test3023 \ -test3024 test3025 test3026 +test3024 test3025 test3026 test3027 diff --git a/tests/data/test3027 b/tests/data/test3027 new file mode 100644 index 000000000..6d7aeb620 --- /dev/null +++ b/tests/data/test3027 @@ -0,0 +1,55 @@ +<testcase> +<info> +<keywords> +FTP +CURLOPT_FILETIME +MDTM fail +</keywords> +</info> + +# Server-side +<reply> +<servercmd> +REPLY MDTM 550 Permission denied +</servercmd> +<data> +data blobb +</data> + +# data is sent to stdout +</reply> + +# Client-side +<client> +<server> +ftp +</server> + <name> +Get a file via FTP but 550 after MDTM command + </name> +<tool> +lib3027 +</tool> +<command option="no-include"> +ftp://%HOSTIP:%FTPPORT/%TESTNUMBER +</command> +<stdout> +data blobb +</stdout> +</client> + +# Verify data after the test has been "shot" +<verify> +<protocol> +USER anonymous
+PASS ftp@example.com
+PWD
+MDTM %TESTNUMBER
+EPSV
+TYPE I
+SIZE %TESTNUMBER
+RETR %TESTNUMBER
+QUIT
+</protocol> +</verify> +</testcase> diff --git a/tests/data/test511 b/tests/data/test511 index 994907a9b..6bcf25de5 100644 --- a/tests/data/test511 +++ b/tests/data/test511 @@ -44,6 +44,8 @@ USER anonymous PASS ftp@example.com
PWD
MDTM %TESTNUMBER
+TYPE I
+SIZE %TESTNUMBER
QUIT
</protocol> </verify> diff --git a/tests/libtest/Makefile.inc b/tests/libtest/Makefile.inc index ed7001134..b7ce8b6e3 100644 --- a/tests/libtest/Makefile.inc +++ b/tests/libtest/Makefile.inc @@ -65,7 +65,7 @@ noinst_PROGRAMS = chkhostname libauthretry libntlmconnect \ lib1915 lib1916 lib1917 lib1918 lib1919 \ lib1933 lib1934 lib1935 lib1936 lib1937 lib1938 lib1939 lib1940 \ lib1945 lib1946 \ - lib3010 lib3025 lib3026 + lib3010 lib3025 lib3026 lib3027 chkdecimalpoint_SOURCES = chkdecimalpoint.c ../../lib/mprintf.c \ ../../lib/dynbuf.c ../../lib/strdup.c @@ -759,3 +759,7 @@ lib3025_CPPFLAGS = $(AM_CPPFLAGS) lib3026_SOURCES = lib3026.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib3026_LDADD = $(TESTUTIL_LIBS) lib3026_CPPFLAGS = $(AM_CPPFLAGS) + +lib3027_SOURCES = lib3027.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) +lib3027_LDADD = $(TESTUTIL_LIBS) +lib3027_CPPFLAGS = $(AM_CPPFLAGS) diff --git a/tests/libtest/lib3027.c b/tests/libtest/lib3027.c new file mode 100644 index 000000000..2b1d8dc44 --- /dev/null +++ b/tests/libtest/lib3027.c @@ -0,0 +1,56 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 2020 - 2022, 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.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. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ +#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_FILETIME, 1L); + ret = curl_easy_perform(hnd); + if(CURLE_OK == ret) { + long filetime; + ret = curl_easy_getinfo(hnd, CURLINFO_FILETIME, &filetime); + /* MTDM fails with 550, so filetime should be -1 */ + if((CURLE_OK == ret) && (filetime != -1)) { + /* we just need to return something which is not CURLE_OK */ + ret = CURLE_UNSUPPORTED_PROTOCOL; + } + } + curl_easy_cleanup(hnd); + } + curl_global_cleanup(); + return (int)ret; +} |