ftp PASSIVE mode (PASV)

Michael H. Warfield (galbp!wittsend.LBP.HARRIS.COM!mhw@gatech.edu)
4 Nov 88 17:37:05 GMT

In article <8811012118.AA06767@vax.ftp.com> joel@VAX.FTP.COM (Joel Gartland) writes:
> Should a ftp server, after receiving the PASV command, remain in
>passive mode for the rest of the ftp session, or just for the next transfer?
>It doesn't seem to be stated either way in the RFC (959).

     Here are some extracts from RFC-959:

# This command requests the server-DTP to "listen" on a data
# port (which is not its default data port) and to wait for a
# connection rather than initiate one upon receipt of a
# transfer command. The response to this command includes the
# host and port address this server is listening on.

     This clearly indicates an action to be taken upon receipt of a PASV
command. Its result is to place the receiving server in a state listening
for a connection. This would only affect that transfer since the server
would not normally be in a passive listening state for a data transfer.

# When data is to be transferred between two servers, A and B (refer
# to Figure 2), the user-PI, C, sets up control connections with
# both server-PI's. One of the servers, say A, is then sent a PASV
# command telling him to "listen" on his data port rather than
# initiate a connection when he receives a transfer service command.
# When the user-PI receives an acknowledgment to the PASV command,
# which includes the identity of the host and port being listened
# on, the user-PI then sends A's port, a, to B in a PORT command; a
# reply is returned. The user-PI may then send the corresponding
# service commands to A and B. Server B initiates the connection
# and the transfer proceeds. The command-reply sequence is listed
# below where the messages are vertically synchronous but
# horizontally asynchronous:
# User-PI - Server A User-PI - Server B
# ------------------ ------------------
# C->A : Connect C->B : Connect
# C->A : PASV
# A->C : 227 Entering Passive Mode. A1,A2,A3,A4,a1,a2
# C->B : PORT A1,A2,A3,A4,a1,a2
# B->C : 200 Okay
# C->A : STOR C->B : RETR
# B->A : Connect to HOST-A, PORT-a
# Figure 3

     Note that the PASV command is followed by a STOR or RETR command.
This implies that its domain of effect covers the data connection only.

     BTW - before I get flamed - It is true that this is a slightly ad-hoc
conclusion and I recognize it as such. That's why I said IMPLIED.

     When taken as a whole, there is strong indication that the PASV command
is on a connection by connection basis. Note too that if you assume such
in the client, you are safe. If you assume that it is on a session basis in
the client you may well get FRIED when you find a server that assumes a
connection basis. Implimenting the PASV command with a session basis in the
server could well be an unnecessary exercise in frustration.

Michael H. Warfield (The Mad Wizard) | gatech.edu!galbp!wittsend!mhw
  (404) 270-2123 / 270-2098 | mhw@wittsend.LBP.HARRIS.COM
An optimist believes we live in the best of all possible worlds.
A pessimist is sure of it!

This archive was generated by hypermail 2.0b3 on Thu Mar 09 2000 - 14:43:58 GMT