FTP connections preserve passwords and filenames, with CI checking every change (#1)
CI / checks (push) Successful in 53s
CI / checks (push) Successful in 53s
Co-authored-by: Danny Kim <temeddix@gmail.com> Co-committed-by: Danny Kim <temeddix@gmail.com>
This commit was merged in pull request #1.
This commit is contained in:
@@ -8,12 +8,22 @@ The plugin is a WebAssembly component built against the Memona filesystem
|
||||
contract, `memona:filesystem@0.1.0`. It uses only the host's sockets; it has no
|
||||
ambient filesystem, environment or network access of its own.
|
||||
|
||||
This package requires a Memona version that supports plugin manifest schema 2.
|
||||
|
||||
## What it registers
|
||||
|
||||
One provider, `ftp`, for the `ftp` and `ftps` schemes. A connection is
|
||||
configured with a server name, an optional port, a TLS toggle for FTPS, and an
|
||||
optional username and password. An empty username signs in anonymously.
|
||||
|
||||
With the compatible schema 2 Memona version required by this package, public,
|
||||
LAN, VPN, link-local and localhost addresses work directly from the server
|
||||
name; that API has no separate connection network grant.
|
||||
|
||||
The TLS toggle currently starts TLS on the control connection only. Protected
|
||||
data connections and explicit `AUTH TLS` negotiation are not implemented, so
|
||||
the plugin does not yet provide a complete FTPS connection.
|
||||
|
||||
Listing and stat need a server that answers `MLSD` and `MLST`, the
|
||||
machine-readable listing commands. A server without them reports the folder as
|
||||
unsupported rather than guessing at the older, human-formatted listing or
|
||||
@@ -23,15 +33,13 @@ so a conditional write is reported as unsupported rather than simulated.
|
||||
## Passive mode and the port range
|
||||
|
||||
Transfers are passive: the plugin asks the server for a data port with `EPSV`
|
||||
or `PASV` and connects out to it. The server picks a fresh port for every
|
||||
and connects out to it; `PASV` fallback is not implemented. The server picks a fresh port for every
|
||||
transfer and announces it only as the transfer begins, so the range that has to
|
||||
be reachable is wide.
|
||||
|
||||
`manifest.json` declares `networkPorts` as 21 and 1024-65535, and `networkHosts`
|
||||
as `*` because a server can be anywhere. Declaring is not granting: a
|
||||
connection reaches only the host and ports the person grants it, and a grant
|
||||
never accepts a wildcard host. Grant the control port and the span the server
|
||||
uses for its data channel, usually `21` and `1024-65535`.
|
||||
The package declares socket ports 21 and 1024-65535, which Memona applies
|
||||
automatically to each connection. The control port and passive data ports
|
||||
must be within these ranges.
|
||||
|
||||
## Build
|
||||
|
||||
|
||||
Reference in New Issue
Block a user