=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ftp/ftp.1,v retrieving revision 1.109 retrieving revision 1.110 diff -u -r1.109 -r1.110 --- src/usr.bin/ftp/ftp.1 2019/05/09 14:51:34 1.109 +++ src/usr.bin/ftp/ftp.1 2019/05/12 20:44:39 1.110 @@ -1,6 +1,3 @@ -.\" $OpenBSD: ftp.1,v 1.109 2019/05/09 14:51:34 naddy Exp $ -.\" $NetBSD: ftp.1,v 1.22 1997/08/18 10:20:22 lukem Exp $ -.\" .\" Copyright (c) 1985, 1989, 1990, 1993 .\" The Regents of the University of California. All rights reserved. .\" @@ -30,57 +27,39 @@ .\" .\" @(#)ftp.1 8.3 (Berkeley) 10/9/94 .\" -.Dd $Mdocdate: May 9 2019 $ +.\" Copyright (c) 2015 Sunil Nimmagadda +.\" +.\" Permission to use, copy, modify, and distribute this software for any +.\" purpose with or without fee is hereby granted, provided that the above +.\" copyright notice and this permission notice appear in all copies. +.\" +.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +.\" +.Dd $Mdocdate: May 12 2019 $ .Dt FTP 1 .Os .Sh NAME .Nm ftp .Nd Internet file transfer program .Sh SYNOPSIS -.Nm ftp -.Op Fl 46AadEegiMmnptVv +.Nm +.Op Fl 46AVv .Op Fl D Ar title -.Op Fl k Ar seconds -.Op Fl P Ar port -.Op Fl r Ar seconds -.Op Fl s Ar srcaddr .Op Ar host Op Ar port -.Nm ftp -.Op Fl C +.Nm +.Op Fl 46ACMV +.Op Fl D Ar title .Op Fl o Ar output -.Op Fl s Ar srcaddr -.Sm off -.Pf ftp:// Op Ar user : password No @ -.Ar host Op : Ar port -.No / Ar file Op / -.Sm on -.Ar ... -.Nm ftp -.Op Fl C -.Op Fl c Ar cookie -.Op Fl o Ar output -.Op Fl S Ar ssl_options -.Op Fl s Ar srcaddr +.Op Fl S Ar tls_options .Op Fl U Ar useragent .Op Fl w Ar seconds -.Sm off -.Pf http Oo s Oc :// -.Op Ar user : password No @ -.Ar host Op : Ar port -.No / Ar file -.Sm on -.Ar ... -.Nm ftp -.Op Fl C -.Op Fl o Ar output -.Op Fl s Ar srcaddr -.Pf file: Ar -.Nm ftp -.Op Fl C -.Op Fl o Ar output -.Op Fl s Ar srcaddr -.Ar host : Ns / Ns Ar file Ns Op / -.Ar ... +.Ar url ... .Sh DESCRIPTION .Nm is the user interface to the Internet standard File Transfer @@ -88,8 +67,8 @@ The program allows a user to transfer files to and from a remote network site. .Pp -The latter four usage formats will fetch a file using either the -FTP, HTTP, or HTTPS protocols into the current directory. +The latter usage format will fetch a file using either the +FTP, HTTP or HTTPS protocols into the current directory. This is ideal for scripts. Refer to .Sx AUTO-FETCHING FILES @@ -104,7 +83,7 @@ .It Fl 6 Forces .Nm -to use IPv6 addresses only. +to use IPv6 addreses only. .It Fl A Force active mode FTP. By default, @@ -116,125 +95,34 @@ to always use an active connection. It is only useful for connecting to very old servers that do not implement passive mode properly. -.It Fl a -Causes -.Nm -to bypass the normal login procedure and use an anonymous login instead. .It Fl C Continue a previously interrupted file transfer. .Nm -will continue transferring from an offset equal to the length of -.Ar file . +will continue transferring from an offset equal to the length of file. .Pp -Resuming HTTP(S) transfers are only supported -if the remote server supports the +Resuming HTTP(S) transfers are only supported if the remote server supports the .Dq Range header. -.It Fl c Ar cookie -Load a Netscape-like cookiejar file -for HTTP and HTTPS transfers. -With this option relevant cookies from the jar are sent with each HTTP(S) -request. -Setting the -.Ev http_cookies -environment variable has the same effect. -If both the -.Ev http_cookies -environment variable is set and the -.Fl c -argument is given, the latter takes precedence. .It Fl D Ar title -Specify a short -.Ar title -for the start of the progress bar. -.It Fl d -Enables debugging. -.It Fl E -Disables EPSV/EPRT command on IPv4 connections. -.It Fl e -Disables command line editing. -Useful for Emacs ange-ftp. -.It Fl g -Disables file name globbing. -.It Fl i -Turns off interactive prompting during -multiple file transfers. -.It Fl k Ar seconds -When greater than zero, -sends a byte after each -.Ar seconds -period over the control connection during long transfers, -so that incorrectly configured network equipment won't -aggressively drop it. -The FTP protocol supports a -.Dv NOOP -command that can be used for that purpose. -This assumes the FTP server can deal with extra commands coming over -the control connection during a transfer. -Well-behaved servers queue those commands, and process them after the -transfer. -By default, -.Nm -will send a byte every 60 seconds. +Specify a short title for the start of the progress bar. .It Fl M Causes .Nm -to never display the progress meter in cases where it would do -so by default. -.It Fl m -Causes -.Nm -to always display the progress meter in cases where it would not do -so by default. -.It Fl n -Restrains -.Nm -from attempting -.Dq auto-login -upon initial connection. -If auto-login is enabled, -.Nm -will check the -.Pa .netrc -file (see below) in the user's home directory for an entry describing -an account on the remote machine. -If no entry exists, -.Nm -will prompt for the remote machine login name (default is the user -identity on the local machine) and, if necessary, prompt for a password -and an account with which to log in. +to never display the progress meter in cases where it would do so by default. .It Fl o Ar output -When fetching a single file or URL, save the contents in +When fetching a file or URL, save the contents in .Ar output . -To make the contents go to stdout, -use -.Sq - -for +To make the contents go to stdout, use `-' for .Ar output . -.It Fl P Ar port -Sets the port number to -.Ar port . -.It Fl p -Enable passive mode operation for use behind connection filtering firewalls. -This option has been deprecated as -.Nm -now tries to use passive mode by default, falling back to active mode -if the server does not support passive connections. -.It Fl r Ar seconds -Retry to connect if failed, pausing for number of -.Ar seconds . -.It Fl S Ar ssl_options -SSL/TLS options to use with HTTPS transfers. +.It Fl S Ar tls_options +TLS options to use with HTTPS transfers. The following settings are available: .Bl -tag -width Ds .It Cm cafile Ns = Ns Ar /path/to/cert.pem -PEM encoded file containing CA certificates used for certificate -validation. +PEM encoded file containing CA certificates used for certificate validation. .It Cm capath Ns = Ns Ar /path/to/certs/ Directory containing PEM encoded CA certificates used for certificate validation. -Such a directory can be prepared using the c_rehash script distributed with -OpenSSL. .It Cm ciphers Ns = Ns Ar cipher_list Specify the list of ciphers that will be used by .Nm . @@ -243,12 +131,17 @@ .Cm ciphers subcommand. .It Cm depth Ns = Ns Ar max_depth -Maximum depth of the certificate chain allowed when performing -validation. -.It Cm do -Perform server certificate validation. +Maximum depth of the certificate chain allowed when performing validation. .It Cm dont Don't perform server certificate validation. +.It Cm protocols Ns = Ns Ar string +Specify the TLS protocols to use. +If not specified the value +.Qq all +is used. +Refer to the +.Xr tls_config_parse_protocols 3 +function for other valid protocol string values. .It Cm muststaple Require the server to present a valid OCSP stapling in the TLS handshake. .It Cm noverifytime @@ -257,8 +150,8 @@ Specify a file to use for TLS session data. If this file has a non-zero length, the session data will be read from this file and the client will attempt to resume the TLS session with the server. -Upon completion of a successful TLS handshake this file will be updated -with new session data, if available. +Upon completion of a successful TLS handshake this file will be updated with +new session data, if available. This file will be created if it does not already exist. .El .Pp @@ -272,14 +165,6 @@ setting is provided, .Pa /etc/ssl/cert.pem will be used. -.It Fl s Ar srcaddr -Use -.Ar srcaddr -on the local machine as the source address -of the connection. -Only useful on systems with more than one address. -.It Fl t -Enables packet tracing. .It Fl U Ar useragent Set .Ar useragent @@ -287,18 +172,9 @@ If not specified, the default User-Agent is .Dq OpenBSD ftp . .It Fl V -Disable verbose mode, overriding the default of enabled when input -is from a terminal. -.It Fl v -Enable verbose mode. -This is the default if input is from a terminal. -Forces -.Nm -to show all responses from the remote server, as well -as report on data transfer statistics. +Disable verbose mode. .It Fl w Ar seconds -For URL format connections to HTTP/HTTPS servers, abort a -slow connection after +Abort a slow connection after .Ar seconds . .El .Pp @@ -321,251 +197,32 @@ by .Nm : .Bl -tag -width Fl -.It Ic \&! Oo Ar command -.Op Ar arg ... -.Oc -Invoke an interactive shell on the local machine. -If there are arguments, the first is taken to be a command to execute -directly, with the rest of the arguments as its arguments. -.It Ic \&$ Ar macro-name Op Ar arg ... -Execute the macro -.Ar macro-name -that was defined with the -.Ic macdef -command. -Arguments are passed to the macro unglobbed. -.It Ic \&? Op Ar command -A synonym for -.Ic help . -.It Ic account Op Ar password -Supply a supplemental password required by a remote system for access -to resources once a login has been successfully completed. -If no argument is included, the user will be prompted for an account -password in a non-echoing input mode. -.It Ic append Ar local-file Op Ar remote-file -Append a local file to a file on the remote machine. -If -.Ar remote-file -is left unspecified, the local file name is used in naming the -remote file after being altered by any -.Ic ntrans -or -.Ic nmap -setting. -File transfer uses the current settings for -.Ic type , -.Ic format , -.Ic mode , -and -.Ic structure . -.It Ic ascii -Set the file transfer -.Ic type -to network -.Tn ASCII . -.It Ic bell Op Ic on | off -Arrange that a bell be sounded after each file transfer -command is completed. -.It Ic binary -Set the file transfer -.Ic type -to support binary image transfer. -This is the default type. -.It Ic bye -Terminate the FTP session with the remote server and exit -.Nm . -An end-of-file will also terminate the session and exit. -.It Ic case Op Ic on | off -Toggle remote computer file name case mapping during -.Ic mget -commands. -When -.Ic case -is on (default is off), remote computer file names with all letters in -upper case are written in the local directory with the letters mapped -to lower case. -.It Ic cd Ar remote-directory -Change the working directory on the remote machine -to -.Ar remote-directory . -.It Ic cdup -Change the remote machine working directory to the parent of the -current remote machine working directory. -.It Ic chmod Ar mode file -Change the permission modes of -.Ar file -on the remote -system to -.Ar mode . +.It Ic open Ar host Op Ar port +Establish a connection to the specified +.Ar host +FTP server. +An optional port number may be supplied, +in which case +.Nm +will attempt to contact an FTP server at that port. .It Ic close Terminate the FTP session with the remote server and return to the command interpreter. -Any defined macros are erased. -.It Ic cr Op Ic on | off -Toggle carriage return stripping during -ASCII type file retrieval. -Records are denoted by a carriage return/linefeed sequence -during ASCII type file transfer. -When -.Ic cr -is on (the default), carriage returns are stripped from this -sequence to conform with the -.Ux -single linefeed record delimiter. -Records on non-UNIX -remote systems may contain single linefeeds; -when an ASCII type transfer is made, these linefeeds may be -distinguished from a record delimiter only when -.Ic cr -is off. -.It Ic debug Oo Ic on | off | -.Ar debuglevel -.Oc -Toggle debugging mode. -If an optional -.Ar debuglevel -is specified, it is used to set the debugging level. -When debugging is on, -.Nm -prints each command sent to the remote machine, -preceded by the string -.Ql --\*(Gt . -.It Ic delete Ar remote-file -Delete the file -.Ar remote-file -on the remote machine. -.It Ic dir Op Ar remote-directory Op Ar local-file -A synonym for -.Ic ls . -.It Ic disconnect -A synonym for -.Ic close . -.It Ic edit Op Ic on | off -Toggle command line editing, and context sensitive command and file -completion. -This is automatically enabled if input is from a terminal, and -disabled otherwise. -.It Ic epsv4 Op Ic on | off -Toggle use of EPSV/EPRT command on IPv4 connection. -.It Ic exit -A synonym for -.Ic bye . -.It Ic form Ar format -Set the file transfer -.Ic form -to -.Ar format . -The default format is -.Dq file . -.It Ic ftp Ar host Op Ar port -A synonym for -.Ic open . -.It Ic gate Oo Ic on | off | -.Ar host Op Ar port -.Oc -Toggle gate-ftp mode. -This will not be permitted if the gate-ftp server hasn't been set -(either explicitly by the user, or from the -.Ev FTPSERVER -environment variable). -If -.Ar host -is given, -then gate-ftp mode will be enabled, and the gate-ftp server will be set to -.Ar host . -If -.Ar port -is also given, that will be used as the port to connect to on the -gate-ftp server. -.It Ic get Ar remote-file Op Ar local-file -Retrieve the -.Ar remote-file -and store it on the local machine. -If the local -file name is not specified, it is given the same -name it has on the remote machine, subject to -alteration by the current -.Ic case , -.Ic ntrans , -and -.Ic nmap -settings. -The current settings for -.Ic type , -.Ic form , -.Ic mode , -and -.Ic structure -are used while transferring the file. -.It Ic glob Op Ic on | off -Toggle filename expansion for -.Ic mdelete , -.Ic mget -and -.Ic mput . -If globbing is turned off with -.Ic glob , -the file name arguments -are taken literally and not expanded. -Globbing for -.Ic mput -is done as in -.Xr csh 1 . -For -.Ic mdelete -and -.Ic mget , -each remote file name is expanded -separately on the remote machine and the lists are not merged. -Expansion of a directory name is likely to be -different from expansion of the name of an ordinary file: -the exact result depends on the foreign operating system and FTP server, -and can be previewed by doing -.Dq mls remote-files - . -Note: -.Ic mget -and -.Ic mput -are not meant to transfer -entire directory subtrees of files. -That can be done by -transferring a -.Xr tar 1 -archive of the subtree (in binary mode). -.It Ic hash Oo Ic on | off | -.Ar size -.Oc -Toggle hash mark -.Pq Ql # -printing for each data block transferred. -The size of a data block defaults to 1024 bytes. -This can be changed by specifying -.Ar size -in bytes. .It Ic help Op Ar command Print an informative message about the meaning of .Ar command . If no argument is given, .Nm prints a list of the known commands. -.It Ic idle Op Ar seconds -Set the inactivity timer on the remote server to -.Ar seconds -seconds. -If -.Ar seconds -is omitted, the current inactivity timer is printed. -.It Ic lcd Op Ar local-directory -Change the working directory on the local machine. -If -no -.Ar local-directory -is specified, the user's home directory is used. -.It Ic less Ar file +.It Ic \&? Op Ar command A synonym for -.Ic page . -.It Ic lpwd -Print the working directory on the local machine. +.Ic help . +.It Ic quit +Terminate the FTP session with the remote server and exit +.Nm . +.It Ic exit +A synonym for +.Ic quit . .It Ic ls Op Ar remote-directory Op Ar local-file Print a listing of the contents of a directory on the remote machine. The listing includes any system-dependent information that the server @@ -576,211 +233,17 @@ If .Ar remote-directory is left unspecified, the current working directory is used. -If interactive prompting is on, -.Nm -will prompt the user to verify that the last argument is indeed the -target local file for receiving -.Ic ls -output. If no local file is specified, or if .Ar local-file is .Sq - , the output is sent to the terminal. -.It Ic macdef Ar macro-name -Define a macro. -Subsequent lines are stored as the macro -.Ar macro-name ; -a null line (consecutive newline characters -in a file or -carriage returns from the terminal) terminates macro input mode. -There is a limit of 16 macros and 4096 total characters in all -defined macros. -Macro names can be a maximum of 8 characters. -Macros are only applicable to the current session they are -defined in (or if defined outside a session, to the session -invoked with the next -.Ic open -command), and remain defined until a -.Ic close -command is executed. -To invoke a macro, -use the -.Ic $ -command (see above). -.Pp -The macro processor interprets -.Ql $ -and -.Ql \e -as special characters. -A -.Ql $ -followed by a number (or numbers) is replaced by the -corresponding argument on the macro invocation command line. -A -.Ql $ -followed by an -.Sq i -tells the macro processor that the -executing macro is to be looped. -On the first pass -.Ql $i -is -replaced by the first argument on the macro invocation command line, -on the second pass it is replaced by the second argument, and so on. -A -.Ql \e -followed by any character is replaced by that character. -Use the -.Ql \e -to prevent special treatment of the -.Ql $ . -.It Ic mdelete Op Ar remote-files -Delete the -.Ar remote-files -on the remote machine. -.It Ic mdir Ar remote-files local-file -A synonym for -.Ic mls . -.It Xo Ic mget -.Op Fl cnr -.Op Fl d Ar depth -.Ar remote-files -.Xc -Expand the -.Ar remote-files -on the remote machine -and do a -.Ic get -for each file name thus produced. -See -.Ic glob -for details on the filename expansion. -Resulting file names will then be processed according to -.Ic case , -.Ic ntrans , -and -.Ic nmap -settings. -Files are transferred into the local working directory, -which can be changed with -.Ql lcd directory ; -new local directories can be created with -.Ql "\&! mkdir directory" . -.Pp -The options are as follows: -.Bl -tag -width Ds -.It Fl c -Use -.Ic reget -instead of -.Ic get . -.It Fl d Ar depth -Specify the maximum recursion level -.Ar depth . -The default is 0, which means unlimited. -.It Fl n -Use -.Ic newer -instead of -.Ic get . -.It Fl r -Recursively descend the directory tree, transferring all files and -directories. -.El -.It Ic mkdir Ar directory-name -Make a directory on the remote machine. -.It Ic mls Ar remote-files local-file -Like -.Ic ls , -except multiple remote files may be specified, -and the -.Ar local-file -must be specified. -If interactive prompting is on, -.Nm -will prompt the user to verify that the last argument is indeed the -target local file for receiving -.Ic mls -output. -.It Ic mode Op Ar mode-name -Set the file transfer -.Ic mode -to -.Ar mode-name . -The default mode is -.Dq stream -mode. -.It Ic modtime Ar file -Show the last modification time of -.Ar file -on the remote machine. -.It Ic more Ar file -A synonym for -.Ic page . -.It Xo Ic mput -.Op Fl cr -.Op Fl d Ar depth -.Ar local-files -.Xc -Expand wild cards in the list of local files given as arguments -and do a -.Ic put -for each file in the resulting list. -See -.Ic glob -for details of filename expansion. -Resulting file names will then be processed according to -.Ic ntrans -and -.Ic nmap -settings. -.Pp -If the -.Fl c -flag is specified then -The options are as follows: -.Bl -tag -width Ds -.It Fl c -Use -.Ic reput -instead of -.Ic put . -.It Fl d Ar depth -Specify the maximum recursion level -.Ar depth . -The default is 0, which means unlimited. -.It Fl r -Recursively descend the directory tree, transferring all files and -directories. -.El -.It Xo Ic msend -.Op Fl c -.Ar local-files -.Xc -A synonym for -.Ic mput . -.It Ic newer Ar remote-file Op Ar local-file -Get the file only if the modification time of the remote file is more -recent than the file on the current system. -If the file does not -exist on the current system, the remote file is considered -.Ic newer . -Otherwise, this command is identical to -.Ar get . .It Ic nlist Op Ar remote-directory Op Ar local-file Print a list of the files in a directory on the remote machine. If .Ar remote-directory is left unspecified, the current working directory is used. -If interactive prompting is on, -.Nm -will prompt the user to verify that the last argument is indeed the -target local file for receiving -.Ic nlist -output. If no local file is specified, or if .Ar local-file is @@ -790,163 +253,20 @@ .Ic nlist command will only return information on normal files (not directories or special files). -.It Ic nmap Op Ar inpattern outpattern -Set or unset the filename mapping mechanism. -If no arguments are specified, the filename mapping mechanism is unset. -If arguments are specified, remote filenames are mapped during -.Ic mput -commands and -.Ic put -commands issued without a specified remote target filename. -If arguments are specified, local filenames are mapped during -.Ic mget -commands and -.Ic get -commands issued without a specified local target filename. -This command is useful when connecting to a non-UNIX remote computer -with different file naming conventions or practices. -.Pp -The mapping follows the pattern set by -.Ar inpattern -and -.Ar outpattern . -.Ar inpattern -is a template for incoming filenames (which may have already been -processed according to the -.Ic ntrans -and -.Ic case -settings). -Variable templating is accomplished by including the -sequences -.Ql $1 , -.Ql $2 , -\&..., -.Ql $9 -in -.Ar inpattern . -Use -.Ql \e -to prevent this special treatment of the -.Ql $ -character. -All other characters are treated literally, and are used to determine the -.Ic nmap -.Ar inpattern -variable values. -.Pp -For example, given -.Ar inpattern -$1.$2 and the remote file name "mydata.data", $1 would have the value -"mydata", and $2 would have the value "data". -The -.Ar outpattern -determines the resulting mapped filename. -The sequences -.Ql $1 , -.Ql $2 , -\&..., -.Ql $9 -are replaced by any value resulting from the -.Ar inpattern -template. -The sequence -.Ql $0 -is replaced by the original filename. -Additionally, the sequence -.Sq Op Ar seq1 , Ar seq2 -is replaced by -.Ar seq1 -if -.Ar seq1 -is not a null string; otherwise it is replaced by -.Ar seq2 . -For example: -.Pp -.Dl nmap $1.$2.$3 [$1,$2].[$2,file] -.Pp -This command would yield the output filename -.Pa myfile.data -for input filenames -.Pa myfile.data -and -.Pa myfile.data.old ; -.Pa myfile.file -for the input filename -.Pa myfile ; -and -.Pa myfile.myfile -for the input filename -.Pa .myfile . -Spaces may be included in -.Ar outpattern -by quoting them, -as in the following example: -.Bd -literal -offset indent -nmap $1.$2 "$1 $2" -.Ed -.Pp -Use the -.Ql \e -character to prevent special treatment -of the -.Ql $ , -.Ql \&[ , -.Ql \&] , -and -.Ql \&, -characters. -.It Ic ntrans Op Ar inchars Op Ar outchars -Set or unset the filename character translation mechanism. -If no arguments are specified, the filename character -translation mechanism is unset. -If arguments are specified, characters in -remote filenames are translated during -.Ic mput -commands and -.Ic put -commands issued without a specified remote target filename. -If arguments are specified, characters in -local filenames are translated during -.Ic mget -commands and -.Ic get -commands issued without a specified local target filename. -This command is useful when connecting to a non-UNIX remote computer -with different file naming conventions or practices. -Characters in a filename matching a character in -.Ar inchars -are replaced with the corresponding character in -.Ar outchars . -If the character's position in -.Ar inchars -is longer than the length of -.Ar outchars , -the character is deleted from the file name. -.It Ic open Ar host Op Ar port -Establish a connection to the specified -.Ar host -FTP server. -An optional port number may be supplied, -in which case -.Nm -will attempt to contact an FTP server at that port. -If the -.Ic auto-login -option is on (default), -.Nm -will also attempt to automatically log the user in to -the FTP server (see below). -.It Ic page Ar file -Retrieve -.Ic file -and display with the program defined in -.Ev PAGER -(defaulting to -.Xr more 1 -if -.Ev PAGER -is null or not defined). +.It Ic pwd +Print the name of the current working directory on the remote +machine. +.It Ic cd Ar remote-directory +Change the working directory on the remote machine +to +.Ar remote-directory . +.It Ic get Ar remote-file Op Ar local-file +Retrieve the +.Ar remote-file +and store it on the local machine. +If the local +file name is not specified, it is given the same +name it has on the remote machine. .It Ic passive Op Ic on | off Toggle passive mode. If passive mode is turned on (default is on), @@ -954,367 +274,43 @@ will send a .Dv EPSV command for all data connections instead of the usual -.Dv PORT +.Dv EPRT command. The -.Dv PASV +.Dv EPSV command requests that the remote server open a port for the data connection and return the address of that port. The remote server listens on that port and the client connects to it. When using the more traditional -.Dv PORT +.Dv EPRT command, the client listens on a port and sends that address to the remote server, who connects back to it. Passive mode is useful when using .Nm through a gateway router or host that controls the directionality of traffic. -(Note that though FTP servers are required to support the -.Dv PASV -command by RFC 1123, some do not.) -.It Ic preserve Op Ic on | off -Toggle preservation of modification times on retrieved files. -.It Ic progress Op Ic on | off -Toggle display of transfer progress bar. -The progress bar will be disabled for a transfer that has -.Ar local-file -as -.Sq - -or a command that starts with -.Sq \&| . -Refer to -.Sx FILE NAMING CONVENTIONS -for more information. -.It Ic prompt Op Ic on | off -Toggle interactive prompting. -Interactive prompting -occurs during multiple file transfers to allow the -user to selectively retrieve or store files. -If prompting is turned off (default is on), any -.Ic mget -or -.Ic mput -will transfer all files, and any -.Ic mdelete -will delete all files. -.Pp -When prompting is on, the following commands are available at a prompt: -.Bl -tag -width 2n -offset indent -.It Ic ?\& -Print help message. -.It Ic a -Answer -.Dq yes -to the current file and automatically answer -.Dq yes -to any remaining files for the current command. -.It Ic n -Do not transfer the file. -.It Ic p -Answer -.Dq yes -to the current file and turn off prompt mode -(as if -.Dq prompt off -had been given). -.It Ic q -Answer -.Dq no -to the current file and automatically answer -.Dq no -to any remaining files for the current command. -.It Ic y -Transfer the file. -.El -.It Ic proxy Ar command -Execute an FTP command on a secondary control connection. -This command allows simultaneous connection to two remote FTP -servers for transferring files between the two servers. -The first -.Ic proxy -command should be an -.Ic open , -to establish the secondary control connection. -Enter the command -.Ic proxy ?\& -to see other FTP commands executable on the -secondary connection. -The following commands behave differently when prefaced by -.Ic proxy : -.Ic open -will not define new macros during the auto-login process; -.Ic close -will not erase existing macro definitions; -.Ic get -and -.Ic mget -transfer files from the host on the primary control connection -to the host on the secondary control connection; and -.Ic put , -.Ic mput , -and -.Ic append -transfer files from the host on the secondary control connection -to the host on the primary control connection. -Third party file transfers depend upon support of the FTP protocol -.Dv PASV -command by the server on the secondary control connection. +.It Ic lcd Op Ar local-directory +Change the working directory on the local machine. +If +no +.Ar local-directory +is specified, the user's home directory is used. +.It Ic lpwd +Print the working directory on the local machine. .It Ic put Ar local-file Op Ar remote-file Store a local file on the remote machine. If .Ar remote-file -is left unspecified, the local file name is used -after processing according to any -.Ic ntrans -or -.Ic nmap -settings -in naming the remote file. -File transfer uses the -current settings for -.Ic type , -.Ic format , -.Ic mode , -and -.Ic structure . -.It Ic pwd -Print the name of the current working directory on the remote -machine. -.It Ic quit -A synonym for -.Ic bye . -.It Ic quote Ar arg ... -The arguments specified are sent, verbatim, to the remote FTP server. -.It Ic recv Ar remote-file Op Ar local-file -A synonym for -.Ic get . -.It Ic reget Ar remote-file Op Ar local-file -Reget acts like get, except that if -.Ar local-file -exists and is -smaller than -.Ar remote-file , -.Ar local-file -is presumed to be -a partially transferred copy of -.Ar remote-file -and the transfer -is continued from the apparent point of failure. -This command -is useful when transferring very large files over networks that -are prone to dropping connections. -.It Ic rename Ar from-name to-name -Rename the file -.Ar from-name -on the remote machine to the file -.Ar to-name . -.It Ic reput Ar local-file Op Ar remote-file -Reput acts like put, except that if -.Ar remote-file -exists and is -smaller than -.Ar local-file , -.Ar remote-file -is presumed to be -a partially transferred copy of -.Ar local-file -and the transfer -is continued from the apparent point of failure. -This command -is useful when transferring very large files over networks that -are prone to dropping connections. -.It Ic reset -Clear reply queue. -This command re-synchronizes command/reply sequencing with the remote -FTP server. -Resynchronization may be necessary following a violation of the FTP protocol -by the remote server. -.It Ic restart Ar marker -Restart the immediately following +is left unspecified, the local file name is used. +.It Ic mget Ar remote-files +Do a .Ic get -or +for each file name specified. +.It Ic mput Ar local-files +Do a .Ic put -at the -indicated -.Ar marker . -On -.Ux -systems, -.Ar marker -is usually a byte -offset into the file. -.It Ic rhelp Op Ar command-name -Request help from the remote FTP server. -If a -.Ar command-name -is specified, it is supplied to the server as well. -.It Ic rmdir Ar directory-name -Delete a directory on the remote machine. -.It Ic rstatus Op Ar file -With no arguments, show status of remote machine. -If -.Ar file -is specified, show status of -.Ar file -on remote machine. -.It Ic runique Op Ic on | off -Toggle storing of files on the local system with unique filenames. -If a file already exists with a name equal to the target -local filename for a -.Ic get -or -.Ic mget -command, a -.Dq .1 -is appended to the name. -If the resulting name matches another existing file, -a -.Dq .2 -is appended to the original name. -If this process continues up to -.Dq .99 , -an error message is printed, and the transfer does not take place. -The generated unique filename will be reported. -Note that -.Ic runique -will not affect local files generated from a shell command -(see below). -The default value is off. -.It Ic send Ar local-file Op Ar remote-file -A synonym for -.Ic put . -.It Ic sendport Op Ic on | off -Toggle the use of -.Dv PORT -commands. -By default, -.Nm -will attempt to use a -.Dv PORT -command when establishing -a connection for each data transfer. -The use of -.Dv PORT -commands can prevent delays -when performing multiple file transfers. -If the -.Dv PORT -command fails, -.Nm -will use the default data port. -When the use of -.Dv PORT -commands is disabled, no attempt will be made to use -.Dv PORT -commands for each data transfer. -This is useful for certain FTP implementations which do ignore -.Dv PORT -commands but, incorrectly, indicate they've been accepted. -.It Ic site Ar arg ... -The arguments specified are sent, verbatim, to the remote FTP server as a -.Dv SITE -command. -.It Ic size Ar file -Return size of -.Ar file -on remote machine. -.It Ic status -Show the current status of -.Nm . -.\" .It Ic struct Op Ar struct-name -.\" Set the file transfer -.\" .Ar structure -.\" to -.\" .Ar struct-name . -.\" By default, -.\" .Dq file -.\" structure is used. -.It Ic sunique Op Ic on | off -Toggle storing of files on remote machine under unique file names. -The remote FTP server must support the FTP protocol -.Dv STOU -command for -successful completion. -The remote server will report the unique name. -Default value is off. -.It Ic system -Show the type of operating system running on the remote machine. -.It Ic trace Op Ic on | off -Toggle packet tracing. -.It Ic type Op Ar type-name -Set the file transfer -.Ic type -to -.Ar type-name . -If no type is specified, the current type -is printed. -The default type is -.Dq binary . -.It Ic umask Op Ar newmask -Set the default umask on the remote server to -.Ar newmask . -If -.Ar newmask -is omitted, the current umask is printed. -.It Xo -.Ic user Ar username -.Op Ar password Op Ar account -.Xc -Identify yourself to the remote FTP server. -If the -.Ar password -is not specified and the server requires it, -.Nm -will prompt the user for it (after disabling local echo). -If an -.Ar account -field is not specified, and the FTP server requires it, -the user will be prompted for it. -If an -.Ar account -field is specified, an account command will -be relayed to the remote server after the login sequence -is completed if the remote server did not require it -for logging in. -Unless -.Nm -is invoked with -.Dq auto-login -disabled, this process is done automatically on initial connection to the -FTP server. -.It Ic verbose Op Ic on | off -Toggle verbose mode. -In verbose mode, all responses from -the FTP server are displayed to the user. -In addition, -if verbose is on, when a file transfer completes, statistics -regarding the efficiency of the transfer are reported. -By default, -verbose is on. +for each file name specified. .El -.Pp -Command arguments which have embedded spaces may be quoted with -quote -.Pq Ql \&" -marks. -.Pp -Commands which toggle settings can take an explicit -.Ic on -or -.Ic off -argument to force the setting appropriately. -.Pp -If -.Nm -receives a -.Dv SIGINFO -(see the -.Dq status -argument of -.Xr stty 1 ) -signal whilst a transfer is in progress, the current transfer rate -statistics will be written to the standard error output, in the -same format as the standard completion message. .Sh AUTO-FETCHING FILES In addition to standard commands, this version of .Nm @@ -1324,15 +320,10 @@ .Pp The following formats are valid syntax for an auto-fetch element: .Bl -tag -width Ds -.It Ar host : Ns / Ns Ar file Ns Op / -.Dq Classic -.Nm -format. .Sm off -.It Xo -.Pf ftp:// Op Ar user : password No @ +.It Xo ftp:// .Ar host Op : Ar port -.No / Ar file Op / +.No / Ar file .Xc .Sm on An FTP URL, retrieved using the FTP protocol if @@ -1340,20 +331,8 @@ isn't defined. Otherwise, transfer using HTTP via the proxy defined in .Ev ftp_proxy . -If a -.Ar user -and -.Ar password -are given and -.Ev ftp_proxy -isn't defined, -log in as -.Ar user -with a password of -.Ar password . .Sm off -.It Xo -.Pf http:// Op Ar user : password No @ +.It Xo http:// .Ar host Op : Ar port .No / Ar file .Xc @@ -1362,21 +341,8 @@ If .Ev http_proxy is defined, it is used as a URL to an HTTP proxy server. -If a -.Ar user -and -.Ar password -are given and -.Ev http_proxy -isn't defined, -log in as -.Ar user -with a password of -.Ar password -using Basic authentication. .Sm off -.It Xo -.Pf https:// Op Ar user : password No @ +.It Xo https:// .Ar host Op : Ar port .No / Ar file .Xc @@ -1386,367 +352,19 @@ .Ev http_proxy is defined, this HTTPS proxy server will be used to fetch the file using the CONNECT method. -If a -.Ar user -and -.Ar password -are given and -.Ev http_proxy -isn't defined, -log in as -.Ar user -with a password of -.Ar password -using Basic authentication. .It Pf file: Ar file .Ar file is retrieved from a mounted file system. .El -.Pp -If a classic format or an FTP URL format has a trailing -.Sq / , -then -.Nm -will connect to the site and -.Ic cd -to the directory given as the path, and leave the user in interactive -mode ready for further input. -.Pp -If -.Ar file -contains a glob character and globbing is enabled -(see -.Ic glob ) , -then the equivalent of -.Ic mget Ar file -is performed. -.Pp -If no -.Fl o -option is specified, and -the directory component of -.Ar file -contains no globbing characters, -then -it is stored in the current directory as the -.Xr basename 1 -of -.Ar file . -If -.Fl o Ar output -is specified, then -.Ar file -is stored as -.Ar output . -Otherwise, the remote name is used as the local name. -.Sh ABORTING A FILE TRANSFER -To abort a file transfer, use the terminal interrupt key -(usually Ctrl-C). -Sending transfers will be immediately halted. -Receiving transfers will be halted by sending an FTP protocol -.Dv ABOR -command to the remote server, and discarding any further data received. -The speed at which this is accomplished depends upon the remote -server's support for -.Dv ABOR -processing. -If the remote server does not support the -.Dv ABOR -command, an -.Ql ftp\*(Gt -prompt will not appear until the remote server has completed -sending the requested file. -.Pp -The terminal interrupt key sequence will be ignored when -.Nm -has completed any local processing and is awaiting a reply -from the remote server. -A long delay in this mode may result from the ABOR processing described -above, or from unexpected behavior by the remote server, including -violations of the FTP protocol. -If the delay results from unexpected remote server behavior, the local -.Nm -program must be killed by hand. -.Sh FILE NAMING CONVENTIONS -Files specified as arguments to -.Nm -commands are processed according to the following rules. -.Bl -enum -.It -If -.Sq - -is specified as a local file name, the standard input (for reading) -or standard output (for writing) -is used. -.It -If the first character of a local file name is -.Sq \&| , -the -remainder of the argument is interpreted as a shell command. -.Nm -then forks a shell, using -.Xr popen 3 -with the argument supplied, and reads (writes) from the standard output -(standard input). -If the shell command includes spaces, the argument -must be quoted; e.g., -.Qq ls -lt . -A particularly -useful example of this mechanism is: -.Qq ls \&. |more . -.It -Failing the above checks, if -.Dq globbing -is enabled, -local file names are expanded -according to the rules used in the -.Xr csh 1 -.Ic glob -command. -If the -.Nm -command expects a single local file (e.g., -.Ic put ) , -only the first filename generated by the -.Dq globbing -operation is used. -.It -For -.Ic mget -commands and -.Ic get -commands with unspecified local file names, the local filename is -the remote filename, which may be altered by a -.Ic case , -.Ic ntrans , -or -.Ic nmap -setting. -The resulting filename may then be altered if -.Ic runique -is on. -.It -For -.Ic mput -commands and -.Ic put -commands with unspecified remote file names, the remote filename is -the local filename, which may be altered by a -.Ic ntrans -or -.Ic nmap -setting. -The resulting filename may then be altered by the remote server if -.Ic sunique -is on. -.El -.Sh FILE TRANSFER PARAMETERS -The FTP specification specifies many parameters which may -affect a file transfer. -The -.Ic type -may be one of -.Dq ascii , -.Dq binary , -or -.Dq image . -.Nm -supports the ASCII and image types of file transfer. -.Pp -.Nm -supports only the default values for the remaining -file transfer parameters: -.Ic mode , -.Ic form , -and -.Ic struct . -.Sh THE .netrc FILE -The -.Pa .netrc -file contains login and initialization information -used by the auto-login process. -It resides in the user's home directory. -The following tokens are recognized; they may be separated by spaces, -tabs, or new-lines: -.Bl -tag -width password -.It Ic machine Ar name -Identify a remote machine -.Ar name . -The auto-login process searches the -.Pa .netrc -file for a -.Ic machine -token that matches the remote machine specified on the -.Nm -command line or as an -.Ic open -command argument. -Once a match is made, the subsequent -.Pa .netrc -tokens are processed, -stopping when the end of file is reached or another -.Ic machine -or a -.Ic default -token is encountered. -.It Ic default -This is the same as -.Ic machine -.Ar name -except that -.Ic default -matches any name. -There can be only one -.Ic default -token, and it must be after all -.Ic machine -tokens. -This is normally used as: -.Pp -.Dl default login anonymous password user@site -.Pp -thereby giving the user -.Ar automatic -anonymous FTP login to -machines not specified in -.Pa .netrc . -This can be overridden -by using the -.Fl n -flag to disable auto-login. -.It Ic login Ar name -Identify a user on the remote machine. -If this token is present, the auto-login process will initiate -a login using the specified -.Ar name . -.It Ic password Ar string -Supply a password. -If this token is present, the auto-login process will supply the -specified string if the remote server requires a password as part -of the login process. -Note that if this token is present in the -.Pa .netrc -file for any user other -than -.Ar anonymous , -.Nm -will abort the auto-login process if the -.Pa .netrc -is readable by -anyone besides the user. -.It Ic account Ar string -Supply an additional account password. -If this token is present, the auto-login process will supply the -specified string if the remote server requires an additional -account password, or the auto-login process will initiate an -.Dv ACCT -command if it does not. -.It Ic macdef Ar name -Define a macro. -This token functions like the -.Nm -.Ic macdef -command functions. -A macro is defined with the specified name; its contents begin with the -next -.Pa .netrc -line and continue until a null line (consecutive new-line -characters) is encountered. -Like the other tokens in the -.Pa .netrc -file, a -.Ic macdef -is applicable only to the -.Ic machine -definition preceding it. -A -.Ic macdef -entry cannot be utilized by multiple -.Ic machine -definitions; rather, it must be defined following each -.Ic machine -it is intended to be used with. -If a macro named -.Ic init -is defined, it is automatically executed as the last step in the -auto-login process. -.El -.Sh COMMAND LINE EDITING -.Nm -supports interactive command line editing, via the -.Xr editline 3 -library. -It is enabled with the -.Ic edit -command, and is enabled by default if input is from a tty. -Previous lines can be recalled and edited with the arrow keys, -and other GNU Emacs-style editing keys may be used as well. -.Pp -The -.Xr editline 3 -library is configured with a -.Pa .editrc -file \- refer to -.Xr editrc 5 -for more information. -.Pp -An extra key binding is available to -.Nm -to provide context sensitive command and filename completion -(including remote file completion). -To use this, bind a key to the -.Xr editline 3 -command -.Ic ftp-complete . -By default, this is bound to the TAB key. .Sh ENVIRONMENT .Nm utilizes the following environment variables: -.Bl -tag -width "FTPSERVERPORT" -.It Ev FTPMODE -Overrides the default operation mode. -Recognized values are: -.Pp -.Bl -tag -width "passive " -offset indent -compact -.It passive -passive mode FTP only -.It active -active mode FTP only -.It auto -automatic determination of passive or active (this is the default) -.It gate -gate-ftp mode -.El -.It Ev FTPSERVER -Host to use as gate-ftp server when -.Ic gate -is enabled. -.It Ev FTPSERVERPORT -Port to use when connecting to gate-ftp server when -.Ic gate -is enabled. -Default is port returned by a -.Fn getservbyname -lookup of -.Dq ftpgate/tcp . -.It Ev HOME -For default location of a -.Pa .netrc -file, if one exists. -.It Ev PAGER -Used by -.Ic page -to display files. -.It Ev SHELL -For default shell. +.Bl -tag -width Ds .It Ev ftp_proxy URL of FTP proxy to use when making FTP URL requests (if not defined, use the standard FTP protocol). .It Ev http_proxy -URL of HTTP proxy to use when making HTTP or HTTPS URL requests. -.It Ev http_cookies -Path of a Netscape-like cookiejar file to use when making -HTTP or HTTPS URL requests. +URL of HTTP proxy to use when making HTTP(S) URL requests. .El .Sh PORT ALLOCATION For active mode data connections, @@ -1758,45 +376,19 @@ .Va net.inet.ip.porthifirst and .Va net.inet.ip.porthilast . -.Sh SEE ALSO -.Xr basename 1 , -.Xr csh 1 , -.Xr more 1 , -.Xr stty 1 , -.Xr tar 1 , -.Xr tftp 1 , -.Xr editline 3 , -.Xr getservbyname 3 , -.Xr popen 3 , -.Xr editrc 5 , -.Xr services 5 , -.Xr ftp-proxy 8 , -.Xr ftpd 8 -.Sh STANDARDS -.Rs -.%A J. Postel -.%A J. Reynolds -.%D October 1985 -.%R RFC 959 -.%T FILE TRANSFER PROTOCOL (FTP) -.Re -.Pp -.Rs -.%A P. Hethmon -.%D March 2007 -.%R RFC 3659 -.%T Extensions to FTP -.Re .Sh HISTORY The .Nm -command appeared in +command first appeard in .Bx 4.2 . -.Sh BUGS -Correct execution of many commands depends upon proper behavior -by the remote server. -.Pp -In the recursive mode of -.Ic mget , -files and directories starting with whitespace are ignored -because the list cannot be parsed any other way. +A complete rewrite of the +.Nm +command first appeared in +.Ox x.x . +.Sh AUTHORS +.An Sunil Nimmagadda Aq Mt sunil@openbsd.org +.Sh CAVEATS +While aborting a data transfer, certain FTP servers violate +the protocol by not responding with a 426 reply first, thereby making +.Nm +wait indefinitely for a correct reply.