Commit Graph

153 Commits

Author SHA1 Message Date
shoopea
cf05dac581 add searches
Some checks failed
golangci-lint / lint (push) Has been cancelled
Units tests / test (push) Has been cancelled
CodeQL / Analyze (go) (push) Has been cancelled
2024-12-27 23:13:26 +01:00
shoopea
b83b870ac3 debug
Some checks failed
CodeQL / Analyze (go) (push) Waiting to run
golangci-lint / lint (push) Has been cancelled
Units tests / test (push) Has been cancelled
2024-12-27 23:07:11 +01:00
shoopea
0d44b53277 add search
Some checks failed
CodeQL / Analyze (go) (push) Waiting to run
golangci-lint / lint (push) Has been cancelled
Units tests / test (push) Has been cancelled
2024-12-27 22:48:28 +01:00
Tamás Gulácsi
e44fc64e60
Fix PASV address like lftp does (#349)
Some behind-firewall-and-corporate-network FTP servers
responds their private-net address instead of the
publicly reachable.

This fix checks for such address and uses the
command channel's address instead.
2023-11-13 14:56:59 -05:00
Nick Craig-Wood
36e873b513
Fix GetEntry / MLST for some servers - Fixes #321 (#322)
Some servers seem to send a blank line at the end of an MLST response.

    MLST Download
    250-
    Size=53248;Modify=20230327134339.000;Type=dir; Download

    250 Requested file action okay, completed.

Before this change this would cause the GetEntry method to return this
error.

    unsupported LIST line

This patch ignores blank lines in the MLST response.
2023-05-12 22:29:37 -04:00
Nick Craig-Wood
9e39e2c406
Fix hang when using ExplicitTLS to certain servers. (#283)
In #282 it was discovered that doing the tls Handshake immediately on
connection causes some FTP servers (proftpd and pureftpd) to hang.

The exact cause of this is unknown, but this patch works around the
problem by not doing the Handsake initially, and only doing it at the
end if we were attempting to upload a zero length file.

Doing the Handshake at the end was originally added in
a4e9650823 however it got reverted in 212daf295f which
used tls.DialWithDialer to do the handshake. Unfortunately
tls.DialWithDialer seems to trigger the hanging bug.

See: https://forum.rclone.org/t/rclone-ftps-explicit-rclone-touch-empty-files-proftpd-unable-to-build-data-connection-operation-not-permitted/22522
See: https://github.com/rclone/rclone/issues/6426#issuecomment-1243993039
Fixes #282
2023-02-08 11:46:41 -05:00
Øyvind Heddeland Instefjord
99be0634ab
Add forceListHidden dial option to force the use of 'LIST -a' command (#271)
This is useful for servers that do not offer up
hidden folders/files by default when using LIST/MLSD
commands.
Setting forceListHidden to true will force the use of
the 'LIST -a' command even when MLST support has
been detected.
2022-09-04 14:43:06 -04:00
Julien Laffaye
b85cf1edcc
Add default timeout to instantiate connection 2022-08-28 21:58:25 -04:00
Thomas Hallgren
0aeb8660a7
Add MLST command in the form of a Get method (#269)
* Add MLST command in the form of a Get method

The `LIST` and `MLSD` commands are inefficient when the objective
is to retrieve one single `Entry` for a known path, because the only way
to get such an entry is to list the parent directory using a data
connection. The `MLST` fixes this by allowing one single `Entry` to be
returned using the control connection.

The name `Get` was chosen because it is often used in conjunction with
`List` as a mean to get one single entry.

Signed-off-by: Thomas Hallgren <thomas@datawire.io>

* Changes in response to code review:

- Rename `Get` to `GetEntry` (because it returns an `*Entry`)
- Add test-case for multiline response on the control connection
- Fix issues with parsing the multiline response.

Signed-off-by: Thomas Hallgren <thomas@datawire.io>

* Add sample output from MLST to GetEntry comment.

Signed-off-by: Thomas Hallgren <thomas@datawire.io>

* Changes in response to code review:

- Remove unused `time.Time` argument
- Add struct labels to make `govet` happy

Signed-off-by: Thomas Hallgren <thomas@datawire.io>

* Remove time arg when calling parseNextRFC3659ListLine

Signed-off-by: Thomas Hallgren <thomas@datawire.io>

Signed-off-by: Thomas Hallgren <thomas@datawire.io>
2022-08-21 17:25:29 -04:00
Julien Laffaye
4d1d644cf1
Mark Connect() and DialWithTimeout() as deprecated 2022-08-18 12:44:22 -04:00
Julien Laffaye
9cda78131d
Fix transferring spelling. 2022-08-18 10:17:32 -04:00
Julien Laffaye
39592b91e4
Assign type to TransferType constants 2022-08-17 19:43:45 -04:00
Julien Laffaye
fa83b53d0e
Use tls.Dialer to be able to use DialContext 2022-08-17 19:35:55 -04:00
Julien Laffaye
560423fa8a
DialWithNetConn is a special case of DialWithDialFunc 2022-08-17 18:41:24 -04:00
Georg Wechslberger
b29e1f6c62 refactor: rename TransferTypeImage to TransferTypeBinary 2022-05-23 17:21:05 +02:00
Georg Wechslberger
190f39e8b2 feat: support TYPE command 2022-05-23 12:36:17 +02:00
Julien Laffaye
d2c44e311e Restore previous behavior for List
Fixes #251
2022-03-10 15:20:11 -05:00
Julien Laffaye
a81b090061 Use multierror in more places
While I'm here, do not allocate multierror.Error, multierror.Append will
do it when needed.
2022-03-01 13:14:25 -05:00
Julien Laffaye
212daf295f Use tls.DialWithDialer which does the handshake
tls.DialWithDialer also better handle special error cases
2022-02-28 20:43:42 -05:00
Julien Laffaye
fed5bc26b7 Return all errors from Stor functions
To not hide some errors
2022-02-28 20:13:24 -05:00
Julien Laffaye
1182040339
Merge pull request #233 from rclone/pr-modtime
Add SetTime command, related options and state getters
2021-11-17 16:36:18 -05:00
Julien Laffaye
0112733660
Merge pull request #237 from rclone/pr-timeout
Nudge control connection deadline before reading the data closing status (Try 2)
2021-11-17 16:32:13 -05:00
Ivan Andreev
90b220bedb Add time commands, related options, state getters and unit tests 2021-10-30 00:10:15 +03:00
Ivan Andreev
ae8a71d543 Debug directory listings 2021-10-03 18:40:19 +03:00
Ivan Andreev
53b6bfa4cd Nudge control connection deadline before reading the data closing status 2021-09-11 16:36:35 +03:00
Julien Laffaye
64cacdb711 Fix issues reported by shadow 2021-03-06 19:43:28 -05:00
Julien Laffaye
05cd33e2ad Fix issues reported by errcheck 2021-03-06 19:36:26 -05:00
Julien Laffaye
c3c8c7ac65
Merge pull request #219 from ivandeex/master
trim trailing whitespace from the list commands
2021-03-02 14:57:56 -05:00
Nick Craig-Wood
a4e9650823 Fix STOR of zero length files to ProFTPd with TLS
Before this change, uploading a zero length file via TLS meant that
the tls.Handshake function was never called.

ProFTPd quite properly refuses to accept an empty TCP connection with
no TLS handshake as a zero length upload and gives the error

    425 Unable to build data connection: Operation not

See: https://forum.rclone.org/t/rclone-ftps-explicit-rclone-touch-empty-files-proftpd-unable-to-build-data-connection-operation-not-permitted/22522
2021-03-01 16:01:20 +00:00
Ivan Andreev
24897db640 Trim trailing whitespace from list commands
Listing a current directory (when the path argument is empty)
would send the command "LIST " with trailing whitespace to FTP
resulting in 500 errors with Solaris FTP server.
This patch fixes that.
2021-02-14 19:48:19 +03:00
Nick Craig-Wood
624bcac8b4 Add a DialWithDisabledMLSD option to ignore MLSD if advertised
This is useful for servers which advertise MLSD (eg some versions of
Serv-U) but don't support it properly.
2020-11-05 11:42:34 +00:00
Mathias Fredriksson
744ff9c18a
Remove naked returns 2020-10-20 20:51:56 +03:00
Nick Craig-Wood
fcad893ae7 Implement PRET command for distributed ftp servers, eg drftpd
See: https://tools.ietf.org/html/draft-dd-pret-00

Fixes #197
2020-10-19 17:59:40 +01:00
Julien Laffaye
43afc84ae3
Merge pull request #199 from ncw/fix-198
Fix Stor() no longer reporting errors from the io.Reader passed in
2020-10-19 10:04:29 -04:00
Nick Craig-Wood
9f5200151c Delay FEAT command until after Login - fixes #200
Some servers require the user to be logged in to run FEAT

    ftp://serverftp:2121: Connecting to FTP server
    FTP Rx: "220 DrFTPD+ 2.0 (+STABLE+) $Revision: 1949 $ http://drftpd.org"
    FTP Tx: "AUTH TLS"
    FTP Rx: "234 AUTH TLS successful"
    FTP Tx: "FEAT"
    FTP Rx: "530 Not logged in."
2020-09-12 11:30:42 +01:00
Nick Craig-Wood
c0343a706b Fix Stor() no longer reporting errors from the io.Reader passed in
This commit

4a68979b89 always return the ReadResponse error after an upload

Broke the error return from Stor().  If you attempt to upload a file
with Stor() and the io.Reader that you passed in returns an error,
this was not returned by the Stor() command leading the user to think
the file was uploaded correctly.

This was detected by rclone's unit tests and the exact commit was
pinpointed with git commit.

This commit fixes it by returning the error from io.Copy or the error
from ReadResponse - the latter if they are both set.

Fixes #198
2020-09-11 17:14:05 +01:00
Julien Laffaye
39e3779af0
Merge pull request #192 from drakkan/resp_error
try to read the server response after a failed upload
2020-08-12 10:35:50 -04:00
Nicola Murino
4a68979b89 always return the ReadResponse error after an upload 2020-08-06 16:44:05 +02:00
Julien Laffaye
c2ee4fa250
Merge pull request #178 from crazy-max/optional-utf8
Make "OPTS UTF8 ON" optional
2020-07-30 09:57:23 -04:00
Nicola Murino
08a1e2e380 try to read the server response after a failed upload
if the upload failed we still need to try to read the server
response otherwise if the failure is not due to a connection problem,
for example the server denied the upload for quota limits, we miss
the response and we cannot use the connection to send other commands

Here is what happen before this patch:

C->S STOR test_file1.dat
S->C 150 Using transfer connection
S->C 550 Could not transfer file: denying write due to space limit

the client does not read the above 550 response and send the next command, so
the response for the STOR response will be readed as response for the next
command
2020-07-30 14:55:31 +02:00
CrazyMax
696d865fa3
Opt-out 2020-07-28 21:13:33 +02:00
Julien Laffaye
e31b4effea
Merge pull request #188 from Techassi/typeentry-string
EntryType String() function
2020-07-28 13:54:05 -04:00
Nick Craig-Wood
6563ce9dff Workaround pure-ftpd connections failing with "Unknown command"
pure-ftpd 1.0.49-4 as supplied as part of Ubuntu 20.04 advertises UTF8
support in the FEAT command but the OPTS command fails to turn it on.

    OPTS UTF8 ON
    504 Unknown command

This patch introduces a workaround to ignore the error which enables
this library to work with this version of pure-ftpd. Filezilla appears
to ignore this error in a similar way.
2020-07-18 14:21:12 +01:00
Techassi
3e3979ddc6
Add String() function 2020-07-17 18:01:41 +02:00
CrazyMax
01c291065f
Move func 2020-05-05 21:04:03 +02:00
CrazyMax
60012218fd
Make "OPTS UTF8 ON" optional (#172) 2020-05-05 13:04:49 +02:00
Viorel Craescu
3b6697e5b6 fix_walk 2020-04-26 10:28:15 +03:00
Julien Laffaye
b9f3ade291 Merge branch 'master' of github.com:jlaffaye/ftp 2020-04-23 00:49:57 +02:00
Julien Laffaye
ac1574d383 Add DialWithExplicitTLS 2020-04-23 00:49:43 +02:00
Julien Laffaye
59f85871cf
Merge pull request #169 from flowrean/append-cmd
Add support for FTP append (APPE) command
2020-04-22 18:29:36 -04:00