History log of /src/usr.bin/ftp/ftp.1
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
# 1.161 28-Oct-2025 lukem

ftp: connect is a synonym for open

As we have disconnect as a synonym for close,
add connect as a synonym for open.

Suggested by Colby Russell in email.


Revision tags: perseant-exfatfs-base-20250801 netbsd-11-base
# 1.160 29-Nov-2024 lukem

ftp: help improvements

Document -? as a separate mode.
Document -H HEADER in the usage.
Clarify units for -b and -x.
Consistent argument names between ftp -? and ftp(1).


# 1.159 30-Sep-2024 kre

Don't forget the dot, use the intended macro name (I think),
and improve the wording a little. (All related to the -H option.)


# 1.158 30-Sep-2024 christos

fix markup (h -> H), explain about multiple headers, fix usage (from RVP)


# 1.157 27-Sep-2024 riastradh

ftp(1): Nix trailing whitespace in man page.

No functional change intended.

PR bin/58581: ftp(1) should allow specifying header fields in http requests


# 1.156 25-Sep-2024 christos

PR/58581: Sunil Nimmagadda: Add flag to allow specifying extra http header
fields.


# 1.155 19-Jul-2024 lukem

ftp: improve -b documentation

Order -b bufsize in the synopsis.
Document the actual default value.


Revision tags: perseant-exfatfs-base-20240630 perseant-exfatfs-base
# 1.154 17-Apr-2024 gutteridge

branches: 1.154.2;
ftp.1: drop a sentence that's no longer accurate


# 1.153 19-Feb-2024 christos

default is now 16K


# 1.152 18-Feb-2024 christos

Add -b <buflen> to specify the buffer size.


# 1.151 09-Dec-2023 lukem

ftp(1): wording and formatting improvements

Fix grammar issue with "Support values" reported in private mail.
Document all file transfer types in "type" and cross-reference that.
Consistency fixes in describing file transfer parameters and types.
Fix some mandoc -Tlint issues (except "useless macro: Tn").


# 1.150 25-Feb-2023 uwe

ftp(1): better mark up for url vs cd example


# 1.149 25-Feb-2023 uwe

ftp(1): minor markup tweaks

Use .Ql instead of .Sq Li, add some missing ones. Use .Pq instead of
explicit () for longer phrases - these are easier to read in the
postscript output b/c of extra spacing.


# 1.148 25-Feb-2023 mlelstv

Add option sslnoverify to control validation of SSL certificates.
Add netrc processing to fetch-mode (URL on command line) to enable options and autologin
via netrc.
Fix SSL cleanup in some error paths.

Certificate validation is now enabled by default. Set FTPSSLNOVERIFY=1 in environment
or configure a corresponding init macro via netrc to not validate certs (required if
you haven't installed a required CA certificate for OpenSSL).

Discussed with lukem@ on icb.


Revision tags: netbsd-10-base
# 1.147 30-Aug-2022 christos

branches: 1.147.2;
Add cert verification, together with an environment variable "NO_CERT_VERIFY",
to turn it off.


Revision tags: cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base
# 1.146 25-Apr-2021 lukem

ftp(1): consistently use FTP for protocol use.


# 1.145 25-Apr-2021 lukem

ftp(1): consistent Ic (not Nm) for commands


# 1.144 31-Jan-2021 lukem

ftp(1): more $https_proxy documentation

Document $https_proxy in ENVIRONMENT.
(It was already documented elsewhere).

Fixes PR bin/51883


# 1.143 06-Jan-2021 lukem

ftp(1): fix description of "debug"

"debug" command and documentation got accidentally renamed
to "ftp_debug" 13 years ago, and was only partially fixed.


# 1.142 18-Jul-2020 lukem

ftp: add -? for help. improve synopsis

Add -? to display usage synopsis and help to stdout.
This allows for "ftp -? | less", which is more user friendly.
Errors still show usage to stderr.
Consistency improvements in some usage text.


# 1.141 15-Jul-2020 uwe

Try to improve markup for better PostScript output.


# 1.140 15-Jul-2020 uwe

Do not use "[...]", just "..." is enough.

Conventionally the ellipsis already expresses optional repetition,
e.g. .Ar without arguments produces "file ...".


# 1.139 15-Jul-2020 pgoyette

Remove now-extraneous Op since we already have Oo and Oc to enclose
the Ar port.


# 1.138 15-Jul-2020 lukem

ftp.1: don't wrap "[[user@]host [port]]"


# 1.137 13-Jul-2020 lukem

ftp(1): consistency tweaks


Revision tags: netbsd-9-2-RELEASE netbsd-9-1-RELEASE phil-wifi-20200421 phil-wifi-20200411 is-mlppp-base phil-wifi-20200406 netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 pgoyette-compat-merge-20190127 pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126 pgoyette-compat-1020 pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728 phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407 pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base perseant-stdc-iso10646-base
# 1.136 03-Jul-2017 wiz

branches: 1.136.8;
Remove workaround for ancient HTML generation code.


Revision tags: netbsd-8-2-RELEASE netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base netbsd-8-base prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 pgoyette-localcount-20170320 bouyer-socketcan-base pgoyette-localcount-20170107 pgoyette-localcount-20161104 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base
# 1.135 23-Apr-2015 lukem

branches: 1.135.8;
Add -x xferbufsize to set xferbuf size.

Implement -x xferbufsize set the socket send and receive buffer size,
as per 'xferbuf' in interactive mode.

Patch from Nicholas Mills (via private mail), with minor adjustment by me.


Revision tags: netbsd-7-0-2-RELEASE netbsd-7-0-1-RELEASE netbsd-7-0-RELEASE netbsd-7-0-RC3 netbsd-7-0-RC2 netbsd-7-0-RC1 netbsd-7-base yamt-pagecache-base9 tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 tls-maxphys-base
# 1.134 22-Dec-2012 christos

branches: 1.134.8;
document https support, mentioning certificates are not validated, and obey
https_proxy.


Revision tags: yamt-pagecache-base7 yamt-pagecache-base6 yamt-pagecache-base5 yamt-pagecache-base4
# 1.133 08-Apr-2012 wiz

branches: 1.133.2;
Remove unnecessary Bk/Ek pairs from SYNOPSIS.
No effective change except where I used the opportunity to sort options
and/or option descriptions.


# 1.132 22-Mar-2012 wiz

Fix whitespace nits. Suggested by Bug Hunting.


Revision tags: netbsd-6-0-6-RELEASE netbsd-6-1-5-RELEASE netbsd-6-1-4-RELEASE netbsd-6-0-5-RELEASE netbsd-6-1-3-RELEASE netbsd-6-0-4-RELEASE netbsd-6-1-2-RELEASE netbsd-6-0-3-RELEASE netbsd-6-1-1-RELEASE netbsd-6-0-2-RELEASE netbsd-6-1-RELEASE netbsd-6-1-RC4 netbsd-6-1-RC3 netbsd-6-1-RC2 netbsd-6-1-RC1 netbsd-6-0-1-RELEASE matt-nb6-plus-nbase netbsd-6-0-RELEASE netbsd-6-0-RC2 matt-nb6-plus-base netbsd-6-0-RC1 netbsd-6-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base cherry-xenmp-base bouyer-quota2-nbase bouyer-quota2-base matt-mips64-premerge-20101231
# 1.131 05-Mar-2010 lukem

branches: 1.131.6; 1.131.8;
Back to using 'RFC xxxx' instead of 'RFCxxxx'


Revision tags: matt-premerge-20091211
# 1.130 11-Jul-2009 joerg

Fix markup.


Revision tags: jym-xensuspend-nbase jym-xensuspend-base
# 1.129 04-May-2009 wiz

New sentence, new line.


# 1.128 12-Mar-2009 joerg

Don't workaround ancient macro argument limit with .Xo/.Xc. Don't use
.Sm off/.Sm on.


Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 netbsd-5-base matt-mips64-base2
# 1.127 30-Sep-2008 lukem

branches: 1.127.6;
update copyrights


Revision tags: wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 wrstuden-revivesa-base-1 yamt-pf42-base4 yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 wrstuden-revivesa-base
# 1.126 13-May-2008 wiz

Bump date; punctuation improvements.


# 1.125 10-May-2008 skd

Add epsv6 and epsv to disable extended passive mode for ipv6 or both ipv4 and ipv6 respectively. This hack is due to our friends a Juniper Networks who break
epsv in ipv6. Should be fixed in ScreenOS 6.2.X.


# 1.124 02-May-2008 martin

branches: 1.124.2;
Move TNF licenses to 2 clause form


Revision tags: yamt-pf42-baseX yamt-pf42-base keiichi-mipv6-nbase keiichi-mipv6-base matt-armv6-nbase matt-armv6-base hpcarm-cleanup-base
# 1.123 08-Jan-2008 reed

branches: 1.123.4;
Sort a command. It was was renamed in 1.113 but not resorted.
(I noticed when reading man page but didn't quickly find what I was
looking for.)
Also add a missing period.


Revision tags: cube-autoconf-base
# 1.122 02-Dec-2007 wiz

Sort options.


Revision tags: matt-armv6-prevmlocking
# 1.121 20-Aug-2007 perry

branches: 1.121.2;
Never use "utilize". It means exactly the same thing as "use", but it
is longer and more cumbersome. It can always be replaced with "use"
without any change in meaning.


Revision tags: matt-mips64-base
# 1.120 06-Aug-2007 lukem

branches: 1.120.2;
reorder location of "-s srcaddr" in synopsis


# 1.119 18-Jul-2007 lukem

Document about:ftp and about:version.


# 1.118 24-May-2007 lukem

Display times in RFC2822 form rather than using ctime(3), since
the former is more explicit about the timezone offset.


# 1.117 15-May-2007 lukem

* Modify parse_url() to consistently strip the leading `/' off ftp URLs.
Fixes PR 17617.
* Use 'RFCnnnn' (with leading 0) instead of 'RFC nnnn', to be
consistent with the style in the RFC index.
* Refer to RFC3916 instead of 1738 or 2732.
* Expand the list of supported RFCs in ftp(1) to contain the document
name as well.


# 1.116 10-May-2007 lukem

Replace references from draft-ietf-ftpext-mlst-NN to RFC 3659.


# 1.115 17-Apr-2007 lukem

* Implement -s srcaddr; uses srcaddr as the local IP address for all
connections.
Based on code in the version of ftp that FreeBSD had before they
replaced it with lukemftp.
* Move error message handling into ftp_connect() rather than in the
caller, so that more specific error reporting can occur.
* Improve consistency of various warning and error messages.


Revision tags: netbsd-4-0-1-RELEASE wrstuden-fixsa-newbase wrstuden-fixsa-base-1 netbsd-4-0-RELEASE netbsd-4-0-RC5 netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 wrstuden-fixsa-base netbsd-4-base
# 1.114 27-Oct-2006 lukem

Use "see" instead of "c.f.".
Per feedback from Valeriy E. Ushakov.


Revision tags: abandoned-netbsd-4-base chap-midi-nbase chap-midi-base
# 1.113 31-Jan-2006 christos

rename debug to ftp_debug. grr libssh.


# 1.112 06-Jul-2005 wiz

In macdef, point to $ command (from jmc@openbsd), and split paragraph (it was getting a bit big).


# 1.111 06-Jul-2005 wiz

Use more macros, and use them more consistently.
Fix a few typos.


# 1.110 05-Jul-2005 lukem

Improve the description of the macros.
Patch from David H. Gutteridge in PR 24296.


Revision tags: netbsd-3-base
# 1.109 20-Feb-2005 wiz

branches: 1.109.2;
If we mark up RFC, then avoid using "command modifier" for it.


# 1.108 15-Jan-2005 lukem

preempt wizd; crank date


# 1.107 15-Jan-2005 lukem

Expand description of http_proxy by suggesting the use of RFC 1738 '%xx'
encoding for "unsafe URL" characters in usernames and passwords.


# 1.106 04-Jan-2005 lukem

fix copyright year


# 1.105 01-Dec-2004 wiz

Fix typo.


# 1.104 07-Oct-2004 wiz

Drop trailing whitespace.


# 1.103 07-Oct-2004 dan

pre-empt wizd (bump date for previous.)


# 1.102 07-Oct-2004 dan

Note potentially surprising file-saving behaviour in case of HTTP redirects


Revision tags: netbsd-2-0-RC3 netbsd-2-0-RC2 netbsd-2-0-RC1 netbsd-2-0-base
# 1.101 19-Dec-2003 lukem

branches: 1.101.2;
-n is ignored for auto-fetch transfers


# 1.100 07-Aug-2003 agc

Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22365, verified by myself.


# 1.99 31-Jul-2003 lukem

* $FTPUSERAGENT overrides the HTTP User-Agent header.
Based on patch from Douwe Kiela.
* Add about:tnftp
* Fix URL in about:netbsd
* Crank version


# 1.98 09-Jul-2003 lukem

tweak previous; no need to have .Sm on and then just .Sm off


# 1.97 30-Jun-2003 wiz

Fixes to make these man page look nice with groff-1.19.


# 1.96 26-Jun-2003 wiz

Quote punctuation so macro works on it (another one).


# 1.95 26-Jun-2003 wiz

Quote punctuation so macro works on it.


# 1.94 14-May-2003 wiz

Uppercase URL.


# 1.93 28-Feb-2003 lukem

crank dates


# 1.92 25-Feb-2003 wiz

.Nm does not need a dummy argument ("") before punctuation or
for correct formatting of the SYNOPSIS any longer.


# 1.91 14-Feb-2003 grant

The correct capitalisation of 'NetBSD.org' is (you
guessed it) 'NetBSD.org'.

some mdoc fixes.


# 1.90 20-Jan-2003 wiz

Bump date for last.


# 1.89 20-Jan-2003 toddpw

Add a "macdef" example and a short section explaining that you may need to
use it to disable extended passive mode when your firewall is obnoxious.
This did in fact solve a problem I was having with a firewall at work, and
the status message was taken directly from a problem session fixed by this.


Revision tags: fvdl_fs64_base
# 1.88 02-Oct-2002 wiz

Typo and Americanism. From Adrian Mrva.


# 1.87 30-Sep-2002 grant

New sentence, new line.


# 1.86 27-Aug-2002 christos

Add a -q <quit-time> flag to abort a transfer if it has stalled for <quit-time>
seconds. Ok'd by luke.


# 1.85 07-Jul-2002 lukem

Various improvements in wording and marking,
from Alan Barrett <apb@cequrux.com>, with a bit of tweaking from me.


# 1.84 04-Jul-2002 lukem

highlight that for ftp:// auto-fetches, read access is required on
intermediate directories because ftp(1) obeys RFC1738. for [bin/15419]


# 1.83 05-Jun-2002 lukem

- when showing the final progress bar, replace "00:00 ETA" with the
elapsed time. (suggested by simonb)
- actually display transfer stats after a URL fetch. (bug introduced a
*long* time ago)
- update copyright & version


Revision tags: netbsd-1-6-base
# 1.82 18-May-2002 lukem

branches: 1.82.2;
Fix description for "form", "mode", and "struct" commands.
Inspired by [bin/16736] from Steve McClellan <steve.mcclellan@radisys.com>


# 1.81 08-Feb-2002 ross

Generate <>& symbolically. I'm avoiding .../dist/... directories for now.


# 1.80 26-Dec-2001 lukem

update copyrights


# 1.79 23-Dec-2001 lukem

Add -4 to force IPv4 and -6 to force IPv6 address usage.
From Hajimu UMEMOTO, via Mike Heffner of FreeBSD.

(FreeBSD has imported NetBSD's ftp as their ftp client;
Mike is sending back some of their local changes).


# 1.78 01-Dec-2001 wiz

Punctuation nits.


# 1.77 01-Dec-2001 wiz

Whitespace cleanup.


# 1.76 20-Jun-2001 lukem

put "site" in alphabetical order. noted by Mike Barcroft in private email


# 1.75 27-Nov-2000 lukem

be more explicit that $ftp_proxy and $http_proxy are not supported for
interactive sessions


# 1.74 15-Nov-2000 lukem

- implement "mreget"; as per "mget" but uses "reget" instead of "get"
- add -N netrc and $NETRC, as methods to select an alternative .netrc file
- cache local user name and home directory for further use
- in mget(), use docase() instead of a local version to do the case
conversion.


# 1.73 28-Sep-2000 lukem

clarify that $ftp_proxy only works for full URLs and can't be used for
interactive connections.


# 1.72 28-Jul-2000 lukem

rename "opts" to "remopts", so people used to "o host" don't get bitten...


# 1.71 18-Jul-2000 lukem

add rfc 2389, since that's now supported


# 1.70 18-Jul-2000 lukem

add support for FEAT and OPTS commands with `features' and `opts'.
(from RFC 2389).

add support for MLST & MLSD (machine parseble listings) with 'mlst', 'mlsd'
and 'pmlsd' (mlsd |$PAGER) commands. (from draft-ietf-ftpext-mlst-11)

rename remotesyst() to getremoteinfo(), and modify to parse the result from
FEAT (if supported), and take into account the support for the various
extensions such as MDTM, SIZE, REST (STREAM), MLSD, and FEAT/OPTS.
put each feature into one of the following categories:
- known to work (explicit FEAT)
- unknown but assume works until explicit failure, when it's
then tagged as `known not to work'.
- known not to work (FEAT succeeded but didn't return anything,
or was unknown and then explicit failure)
assign results into features[] matrix.

add support to getreply() so that an optional callback will be called
for each line received from the server except for the first and last.
this is used in FEAT (and MLST) parsing.

modify various commands to check if REST (STREAM), MDTM and SIZE are
explicitly or implicitly supported before using.

fix `syst' when verbose is off.

minor knf (indent goto labels by one space, etc).

simply various command usage handlers by assuming that argv != NULL except
for quit() and disconnect().


Revision tags: netbsd-1-5-PATCH003 netbsd-1-5-PATCH002 netbsd-1-5-PATCH001 netbsd-1-5-RELEASE netbsd-1-5-BETA2 netbsd-1-5-BETA netbsd-1-5-ALPHA2 netbsd-1-5-base
# 1.69 05-Jun-2000 lukem

- fix ai_unmapped() to be a no-op in the !def INET6 case
- display `(-INET6)' at the end of the version string if !def INET6
- clarify in the man page that IPv6 support may not be present (for lukemftp :)


# 1.68 01-Jun-2000 itojun

updated comment on IPv4 mapped address. sync with kame.


# 1.67 31-May-2000 lukem

Add support for 'ftp -u url file ...', to upload a list of files to given url.
Mostly based on [bin/10019] by Scott Aaron Bamford <sab@ansic.net>


# 1.66 31-May-2000 lukem

Fix examples on using pipes in local filenames. AFAICT, ftp has always
required `dir . |more' not as `dir |more' treats `|more' as the remote
filename. Resolves [bin/9922] by Geoff Wing <mason@primenet.com.au>


# 1.65 30-May-2000 itojun

document IPv4 mapped address twists.
- ftp(1): treats IPv4 mapped destination as IPv4 peer, not native IPv6 peer.
this does not support network with SIIT translator.
- rshd(8)/rlogind(8): rejects accesses from IPv4 mapped peer, to avoid
possible abuse of IPv4 mapped addr (rshd/rlogind use source address-based
auth so it is important to check the condition).


# 1.64 28-May-2000 lukem

Change `ls' to use the `LIST' and not `NLST' FTP protocol command.
Now that after many years on not caring we find certain popular
ftp servers are starting to obey RFC959 to the letter of the law
and will only return a list of filenames (not directories or
other filetypes) in the output of `NLST', then `LIST' is more useful
in this case. (Note that the aforementioned pedanticness means that
filename completion isn't as useful as it could be...)
Fixes [bin/8937] by David A. Gatwood <dgatwood@deepspace.mklinux.org>


Revision tags: minoura-xpg4dl-base
# 1.63 01-May-2000 lukem

branches: 1.63.2;
convert to ANSI KNF


# 1.62 01-May-2000 lukem

* Add support for `fget localfile', which reads a list of filenames to
retrieve from localfile. Based on work by Darren Reed.
* Crank version.
* Update copyright dates.


Revision tags: wrstuden-devbsize-19991221 wrstuden-devbsize-base
# 1.61 21-Dec-1999 lukem

change references from draft-ietf-ipngwg-url-literal-01.txt to RFC 2732


# 1.60 26-Nov-1999 lukem

* complete_remote(): use remglob("", ...) instead of remglob(".", ...),
for listings of the current working directory; some ftp servers don't
like `NLST .'.
[noted by Giles Lean <giles@nemeton.com.au>]
* recvrequest(): treat remote=="" as remote==NULL when calling command().
(to support the above change)
* support `[user@]' in `[user@]host' and `[user@]host[:][path]'.
[based on idea (and initial code) from David Maxwell <david@fundy.ca>]
* `idle' may be invoked without any args
* reformat some comments
* reformat usage string in program and man page
* call updateremotepwd() after successful login, not after successful connect
* always call setsockopt(, IPPROTO_IP, IP_TOS, ) (et al); using #if
defined(IPPROTO_IP) doesn't work on certain foreign systems where
enums instead of #defines are used...
[noted by Matthias Pfaller <leo@dachau.marco.de>]


# 1.59 12-Nov-1999 lukem

- implement `set rprompt'; right side version of `set prompt'. depends on
EL_RPROMPT support i added to editline(3).
- allow $FTPPROMPT and $FTPRPROMPT to override defaults for the relevant
prompts
- move `%' formatting code from prompt() to expandbuf().
- implement `%.' and `%c', similar to the same % codes in tcsh(1)
(functionality I added to tcsh nearly 6 years ago), except that `%.'
always does `...trailing' and `%c' always does `/<x>trailing'.
- unknown `%foo' codes get printed as `%foo'


# 1.58 11-Nov-1999 lukem

- implement updateremotepwd(); update the global variable `remotepwd'
to contain the remote working directory.
- add `set prompt', a user configurable prompt. (defaults to `ftp> ').
the following escape characters a la tcsh(1) are supported: %/, %m,
%M, and %n.
- add global var `username'; used by prompt code
- fix a couple of minor memory leaks
- bump version


# 1.57 10-Nov-1999 lukem

- implement restarting file:/// non-proxied http:// URLs (with -R).
- fix a semicolono which stopped file:/// from working


Revision tags: comdex-fall-1999-base
# 1.56 24-Oct-1999 lukem

new features:
- add `usage'; displays the usage of a command.
implemented by calling the c_handler() with argc = 0, argv = "funcname".
- add `passive auto'; does the same as $FTPMODE=auto.
- add `set [option value]'; display all options, or set an option to a value.
- add `unset option'; unset an option.
- add getoptionvalue() to retrieve an option's value, and replace a few
global variables with calls to this.
- implement cleanuppeer(), which resets various bits of state back to
`disconnected'. call in disconnect() and lostpeer().
- support completing on `options'.
- improve recovery after a SIGINT may have closed the connection.
XXX: there's still a couple to fix

other stuff:
- various consistency fixes in the man page.
- ensure that the command usage strings in the code and man page match reality.
- mput/mget: check that the connection still exists before each xfer.
- minor cosmetic changes in confirm().
- set code correctly in sizecmd() and modtime()
- don't need \n in err() strings.
- change lostpeer to take an argument (rather than casting (sig_t)lostpeer
in signal handlers)
- knf and whitespace police.


# 1.55 12-Oct-1999 lukem

s/ARPANET/Internet/ ...


# 1.54 12-Oct-1999 lukem

a few user interface and cosmetic tweaks:
* confirm(): move from util.c to cmds.c. display mnemonic string in its prompt.
add support for `q' (terminate current xfer), `?' (show help list)
* in various signal handlers, output a linefeed only if fromatty.
* if fgets(stdin) returned NULL (i.e, EOF), clearerr(stdin) because you don't
want future fgets to fail. this is not done for the fgets() in the main
command loop, since ftp will quit at that point.
* unless ftp is invoked with -a, don't retain the anonftp setting between
hosts (`ftp somehost:' sets anonftp, but you don't want that to `stick'
if you close that connection and open a new one).


# 1.53 05-Oct-1999 lukem

* factor out SIGINFO setting into a handler that is always active (but only
prints out info if bytes > 0). only set the handler if SIGINFO is defined
* hijack SIGQUIT to be the same as SIGINFO (foreign ports have this, and it's
annoying to have SIGQUIT dump core on netbsd when it prints info on other
systems)
* in {recv,send}request(), factor a lot of duplicated code out into a
`cleanup' section at the end
* rework shell() a bit


# 1.52 05-Oct-1999 lukem

add TNFi copyright to all files i've done more than a minor amount of work to...


# 1.51 05-Oct-1999 lukem

enhancments from Marc Horowitz <marc@mit.edu> to improve connection timeouts:
* implement xsignal_restart(), which only sets the SA_RESTART flag if
specifically requested
* xsignal() is now a wrapper to xsignal_restart(). INFO, USR1, USR2 and WINCH
are restartable, ALRM, INT, PIPE and QUIT are not.
* improve getreply()'s timeout code to take advantage of the above.

other changes:
* improve wording of how globbing works for `classic' URLs (host:path).
suggested by John Refling <johnr@imageworks.com> in relation to PRs
[bin/8519] and [bin/8520]
* always compile in the `edit' command even if NO_EDITCOMPLETE defined.
it's just a no-op in the latter case, which is more consistent to
the users.
* always compile in about: support (i.e, remove NO_ABOUT).
i'm entitled to some vanity in this program...
* clean up some whitespace


# 1.50 01-Oct-1999 lukem

If EPSV or EPRT fails, disable epsv4 for the rest of the current connection.
the disabled state can be overridden by toggling epsv4.

(I got sick of the errors about EPSV not being supported on almost
every server I connect to. This way we retain support for epsv4, but
it's not so whiny after the first failure...)


# 1.49 01-Oct-1999 lukem

* newer takes an optional second arg, so document this
* be a bit more explicit that the arguments to rate are in bytes


# 1.48 28-Sep-1999 lukem

* add new commands:
lpage page local files
pdir as dir, but through your $PAGER
pls as ls, but through your $PAGER
* implement docase() (a la dotrans() et al) and use appropriately, rototilling
some duplicated code
* globulize(): modify to return a pointer to the strdup()ed result in all cases,
and hack the code that calls it to take this into account
* replace strcpy() and strncpy() with strlcpy()
* put(), getit(): use some aptly named local vars instead of argv[...]
* delint


# 1.47 22-Sep-1999 lukem

branches: 1.47.2;
* add support for `xferbuf', which sets both `sndbuf' and `rcvbuf'
* document the above three commands
* rototill the way the sndbuf and rcvbuf work. remove resetsockbufsize()
* use the appropriate socket buffer size as the size of the buffer that
the read()/write() loops use. speeds up things in some cases.


# 1.46 12-Jul-1999 lukem

* change fetch_ftp() to be fully rfc 1738 compliant; if the URL contains
the an empty directory (e.g, between `some' and `path' in
`ftp://host/some//path'), then execute `CWD ' (without a path).
This command will probably fail on rfc 959 compliant servers, so
issue a warning in this case and bail. [noted by cgd].
(i wonder if the people who wrote rfc 1738 actually realised that this
requirement appears to contravene the spec for `cwd' in rfc 959 ?)
* replace isurl() with isipv6addr(), and use appropriately. fixes
auto-login with `classic ftp URLs' (e.g, `ftp somehost:')
* cleanup and rework some of the ipv6 stuff in parse_url()
* prevent potential coredump in fetch_ftp() when parsing `;type=X'
* KNF a few lines
* fix a couple of comments
* cleanup the man page a bit


# 1.45 11-Jul-1999 itojun

add epsv4 command, which enable/disable the use of EPSV/EPRT.

this is mainly for (hypothetical) ftp server which disconnect clients
that use EPSV/EPRT. I've never seen any ftp server like this, but
epsv4 command may be of use when such an ftp server is found.


# 1.44 02-Jul-1999 itojun

add dual-stack (IPv4/v6) support. hope I broke no other part...


# 1.43 02-Jul-1999 itojun

IPv6 support.


# 1.42 29-Jun-1999 lukem

[fear this; more ftp hacking from lukem :-]

features:


# 1.41 13-Jun-1999 kleink

Elaborate a bit on PAGER.


# 1.40 02-Jun-1999 lukem

* fix gate mode to login as `user@realhost' rather than using PASSERVE;
the latter only seemed to work for TIS Gauntlet and not TIS fwtk.
thanks to simonb@netbsd.org for testing this. fixes [bin/5556].
* if EOF (e.g, ^D) is entered at a username/password/account prompt which
happens to use fgets(), exit the login rather than treating EOF as CR.
* don't use the comma operator where separate statements are valid
* always use snprintf to copy stuff into malloced buffers, just in case
typos creep in and mean that the buffer ends up being overflowed


# 1.39 12-May-1999 lukem

parse http:// urls (and the $http_proxy variable) for [user:[pass]@]
elements, which are used for the initial authentication attempt (if
requested by the server). in the case of $http_proxy, use the values
for proxy authentication.


# 1.38 04-May-1999 lukem

clarify what uses gate-ftp mode. suggested by simonb


# 1.37 28-Apr-1999 lukem

* make parsing of ftp:// urls more RFC 1738 compliant;
- the path is split on `/', and each directory is CWD-ed into separately.
(from [standards/7484] by Alan Barrett <apb@iafrica.com>)
- support a trailing `;type=X' suffix, where X is a,i, or d. (d isn't
implemented, but it is recognised)
- the only non-compliant behaviour is that empty directories sections
(e.g `//') aren't run as `CWD ' - as a lot of ftpds don't like that.
Instead, treat this as a no-op.
* don't support globbing for ftp urls, since that's technically not
RFC compliant.
* fix a couple of man-page nits


Revision tags: netbsd-1-4-RELEASE netbsd-1-4-base
# 1.36 22-Mar-1999 lukem

branches: 1.36.2;
* implement -R; restart non-proxied command-line FTP xfers
* fix fetch_ftp() so that hcode parsing is not done for file:// urls
(a } in the wrong place, and code at the wrong indent level...)
* change outfile to being a global (so it gets correctly reset)
* change parse_url to not remove leading '/' for non ftp urls.
whilst this is not totally rfc1738 compliant, other code kinda
assumes this is the case, and it doesn't hurt


# 1.35 15-Mar-1999 garbled

First round of .Os cleanups. .Os is defined in the tmac.doc-common file,
so we shouldn't override it with versions in the manpages. Many more to
come.


# 1.34 08-Mar-1999 lukem

* add url_decode() - `in-place' decode %xx escapes in a given url component
* parse_url()
- only look for user[:pass] for an ftp url (per rfc1738)
- strip leading /'s in an ftp url. (almost per rfc 1738)
* fetch_url()
- decode a copy of the path and use that to build local filenames
- send port in http Host: header (suggested by cgd@netbsd.org)
* fetch_ftp()
- url_decode() the user, pass and path
- fix splitting of path into dir & file (partially from [bin/7073])
- don't bother caching the last host; it can cause problems when
using ftp:// transfers, or when the user changes between xfers
* improve documentation of auto-fetched url arguments (especially regarding
escape sequences in ftp:// urls)
* some whitespace & copyright updates

this should fix [bin/7073] William O Ferry <woferry@warp.wofme.com>,
as well as the metaissues raised in that PR.


# 1.33 07-Mar-1999 mycroft

Clean up SYNOPSIS formatting.


# 1.32 24-Jan-1999 lukem

* -v enables verbose & progress, -V disables both
* set setvbuf(ttyout, NULL, _IOLBF, 0) and remove a bunch of fflush(ttyout).
* use fwrite() instead of write() for progressmeter (don't intermix stdio
with non stdio ops)


# 1.31 23-Jan-1999 lukem

support -f, which forces a cache flush for http xfers using either
`Pragma: no-cache' (http/1.0) or `Cache-Control: no-cache' (http/1.1)


# 1.30 08-Oct-1998 lukem

* hash & progress are mutually exclusive. [noted by mrg@netbsd.org]
* in autofetch mode, don't attempt to 'cd /' on first xfer (only on
subsequent xfers), as some ftp daemons don't permit that.
[noted by dbj@netbsd.org].
XXX: code could be smarter (but a lot more complicated to boot); this
works for now.


# 1.29 08-Aug-1998 lukem

default anon password is user@ not user@host


# 1.28 03-Aug-1998 lukem

features:
* support $no_proxy, which is a comma or space separated list of
host[:port] elements for which proxying is to be disabled.
(asked for by cgd in [bin/5027])
* if $FTPANONPASS is defined, use that as the anon ftp password
(instead of "`whoami`@")
* allow http URL's without a filename as long as an output file
is specified.

other stuff:
* implement parse_url(), which breaks up a URL into its bits, and use.
* simplify url_get() and auto_fetch() to use parse_url() and to not
modify the supplied URL or a copy of it.
* implement xmalloc() and xstrdup(); error-checked malloc()/strdup()
* add more consistency to messages, quoting strings in output as `%s'


# 1.27 26-Jul-1998 lukem

* spell `retrieved' correctly!
* parse Last-Modified: HTTP headers for date, and change time of
retrieved file if parsing succeeded
* support file:/// and file://localhost/ URLs
* in url_get(), re-write byte moving code to consistently use fread()
and fwrite(), and check errors at end with ferror()
* add about:* easter-egg (#ifndef SMALL :-)


# 1.26 13-Jul-1998 perry

Style police: "uses" is better than "utilizes", which is a horrible nelogism.


# 1.25 04-Jun-1998 lukem

some fixes & enhancements from openbsd's ftp, with extra fixes by me:
* default to passive with active fallback. $FTPMODE modifies this behaviour.
-A forces active connection.
* support '-o outfile' for auto-fetched files. outfile can be a file,
`-' (for stdout), or '|command' (to output each file through command).
* support '-r waittime', which retries the connection after waittime seconds
if it fails.
* fix 'page file' when restart is non-zero.
* try all ip-addresses of a host in a http fetch (as the normal ftp fetch
does).

XXX: a ``broken pipe'' error sometimes occurs with -o '|command';
i haven't tracked this down yet.


# 1.24 20-May-1998 msaitoh

fix typo.


Revision tags: netbsd-1-3-PATCH002 netbsd-1-3-PATCH001 netbsd-1-3-RELEASE netbsd-1-3-BETA netbsd-1-3-base
# 1.23 23-Aug-1997 lukem

branches: 1.23.2;
support $TMPDIR


# 1.22 18-Aug-1997 lukem

bugs fixed:
* don't interpret '-' or '|' when a local filename is determined from
the remote name (i.e, in mget, and in get with only one argument).
This is implemented using an extra argument to recvrequest().
Fixes a major security hole.
* clean up memory leak when using globulize()
* clean up a couple of comments
* fix wording in TNF copyright

features added:
* support for TIS fwtk gate-ftp servers:
* read defaults from $FTPSERVER && $FTPSERVERPORT
* start in gate-ftp mode if invoked as 'gate-ftp'
* toggle or set with 'gate [host [port]]'


# 1.21 10-Jun-1997 lukem

* Only print the progress bar when ftp(1) is the foreground progress.
Patch from enami tsugutomo <enami@ba2.so-net.or.jp> in [bin/3735].
* Fix punctuation.


# 1.20 14-Apr-1997 lukem

More enhancements/bugfixes (when will it end?)
* differentiate between being connected, and being logged in
* cleanup some text messages
* support username & password ftp URLs (ftp://user:pass@host/) in non-proxy
situations; assume proxy supports it for proxy situations.
* cd to / before performing any autofetch transfers
* use strncasecmp in URL parsing. fix from <Todd.Miller@courtesan.com>


# 1.19 05-Apr-1997 lukem

* support $ftp_proxy for ftp:// transfers [bin/3245]
* add "more" & "less" as synonyms for "page"
* move editline setup code into controlediting(), and call appropriately.
only setup setup terminal if going into interactive mode. inspired
by Todd Miller <todd.miller@courtesan.com>


# 1.18 13-Mar-1997 lukem

Features:
* support remglobbing of auto_fetch arguments
* new flag - '-e'; disable editing
* "page file" == "get file |${PAGER-less}"

Bugfixes/cleanup:
* consistently use a trailing '.' on messages
* code cleanup, including buffer overrun fixes, use puts
and putchar in places, etc (inspired by OpenBSD mods)
* disable progress bar when local-file is a pipe or '-'
* skip \r in http headers
* fix remote ftpd slash bug more elegantly (so it works with ////)
* abort_remote(): check if cout==NULL before using it. should fix [bin/3273]
* fixed up cosmetic problems when complete_remote() generated errors from the
remote server (such as "no files found", "login with user and pass", ...)
done by adding extra argument to remglob(), which is a pointer to an error
buffer to put messages in rather than printing to stdout.


# 1.17 01-Feb-1997 lukem

[Yet Another Huge Ftp Commit - hopefully the last for a while,
barring any more little things people want added ...]

New features:
* progressmeter is now asynchronous, so "stalled" transfers can be
detected. "- stalled -" is displayed instead of the ETA in this case.
When the xfer resumes, the time that the xfer was stalled for is
factored out of the ETA. It is debatable whether this is better than
not factoring it out, but I like it this way (I.e, if it stalls for 8
seconds and the ETA was 30 seconds, when it resumes the ETA will still
be 30 seconds).
* verbosity can be disabled on the command line (-V), so that in auto-fetch
mode the only lines displayed will be a description of the file, and
the progress bar (if possible)
* if the screen is resized (and detected via the SIGWINCH signal), the
progress bar will rescale automatically.

Bugs fixed:
* progress bar will not use the last character on the line, as this can
cause problems on some terminals
* screen dimensions (via ioctl(TIOCWINSZ)) should use stdout not stdin
* progressmeter() used some vars before initialising them
* ^D will quit now. [fixes bin/3162]
* use hstrerror() to generate error message for host name lookup failure.
* use getcwd instead of getwd (it should have been OK, but why tempt fate?)
* auto-fetch transfers will always return a positive exit value upon failure
or interruption, relative to the file's position in argv[].
* remote completion of / will work, without putting a leading "///".
This is actually a bug in ftpd(1), where "NLST /" prefixes all names
with "//", but fixing every ftpd(1) is not an option...


# 1.16 19-Jan-1997 lukem

New features:
* Command line editing via editline(3) library.
* Context sensitive command and file completion, including remote files.

Enhancements to auto-fetch feature:
* Support for http:// URLs using the http protocol, including proxy HTTP
support via $htty_proxy if it's defined.
* The connection is kept open between successive files on the same host.
(obviously, this does not count for http requests.)
* Return value of ftp is 0 on no error, or the offset in argv[] of the file
which failed (i.e., argv[x] failed, ftp returns x).
* If the path in an ftp URL or classic format line has a trailing '/',
cd to the path and enter interactive mode. Fixes [bin/3011], albiet
requiring the user to help ftp in determining the operation.

Other changes:
* '-P port' works for normal ftp, and is the default for all classic style
auto-fetch transfers and for ftp URLs that don't specify the port.
(previously it would just work for the first xfer.)
* Some code moved into separated files along logical divisions.
* Editing and completion can be compiled out with -DSMALLFTP.


# 1.15 06-Dec-1996 lukem

* note that nlist and ls and equivalent
* fix up optional argument descriptions for dir, ls, nlist, and user.


# 1.14 06-Dec-1996 lukem

functionality mods:
* implement 'progress bar/meter' (inspired by ncftp). use 'progress' to
toggle on. it will display current file size to 5 digits, automatically
determining suffix (up to 16384 P (petabytes) == 2^64).
* 'ls' now uses NLST (unadorned listing), a la older ftp clients. 'dir'
still does LIST (long listing). idea from John Nemeth <jnemeth@cue.bc.ca>

bug fixes:
* return first line of reply in reply_string[] from getreply(), instead
of last line. This fixes [bin/741] (parsing of SYST), and also means
that SIZE and MDTM messages will be parsed correctly if they're longer
than 1 line.
* parse URL-style auto-ftps that have no filename correctly
(e.g, ftp://host, ftp://host/, ftp://host/dir/). pointed out by
Jaromir Dolecek <dolecek@saruman.ics.muni.cz>
* pass the correct size array in 2nd arg of utimes() when setting the
modification time


# 1.13 28-Nov-1996 lukem

More features, some of which were inspired by changes that
friedman@gnu.ai.mit.edu (Noah Friedman) made to his modified ftp:
- implement "lpwd" - local pwd
- implement "preserve" - toggle preserving of file modification
times on retrieved files
- allow for explicit "on" or "off" arg to toggle commands
- "exit" synonym for "quit", "msend" synonym for "mput"
- in confirmation mode, allow 'a' (yes to rest of current command),
and 'p' (turn off prompt mode, as if 'prompt off' was done,
effective immediately)
- "modtime" returns time formatted as localtime, not GMT

Bug fixes:
- check for extraneous args on commands
- cleanup const usage, line formatting
- create 0 length temporary file in remglob() to prevent symlink games
(from OpenBSD)
- check length of filename of ~/.netrc (from OpenBSD)


# 1.12 25-Nov-1996 lukem

cleanups/bugfixes:
- don't echo 'ACCT' parameter when debugging (a la 'PASS')
- Fix checking of directory access for "/foo", the parent
directory is "/", not "" (from FreeBSD)
- remove trailing whitespace on lines
- add any missing NetBSD tags
- cleanups to man page, includinging sorting options description

feature additions:
- variable sized hash marks (from [bin/683], but done in the hash command
as an optional arg)
- more user-friendly transfer time printing (from FreeBSD, with mods)
- '-p' command line option to jump into PASV mode (closes [bin/2857],
but with an option rather than checking argv[0])
- SIGINFO support for printing xfer stats when sending/receiving requests
- '-P port' for changing the port to connect to (from thorpej@netbsd.org)
- '-a': bypass normal login, and try anonymous login (from OpenBSD
via thorpej)
- autofetch files via url (ftp://...) or "classic" (host:/file)
(from OpenBSD via thorpej)
- 'ftp' synonymous with 'open' (from FreeBSD)


Revision tags: netbsd-1-2-PATCH001 netbsd-1-2-RELEASE netbsd-1-2-BETA netbsd-1-2-base netbsd-1-1-PATCH001 netbsd-1-1-RELEASE netbsd-1-1-base
# 1.11 08-Sep-1995 tls

Sync with 4.4lite2


# 1.10 13-Jan-1995 jtc

Describe -t (enable packet tracing) command line flag (PR #713).
Alphabetize description of command line flags.

Packet tracing is an unimplemented feature, I've decided to keep it's
documentation since ever other UN*X vendor I checked still does. Not
a particularly useful reason.


Revision tags: netbsd-1-0-PATCH06 netbsd-1-0-PATCH05 netbsd-1-0-PATCH04 netbsd-1-0-PATCH03 netbsd-1-0-PATCH02 netbsd-1-0-PATCH1 netbsd-1-0-PATCH0 netbsd-1-0-RELEASE
# 1.9 29-Aug-1994 mycroft

branches: 1.9.2;
Add RCS ids.


# 1.8 25-Aug-1994 cgd

passive mode support, from David Carrel <carrel@cisco.com>, and cleaned
up for the new ftp sources by me.


# 1.7 25-Aug-1994 cgd

the previous local changes


# 1.6 25-Aug-1994 cgd

clean up import, no local changes.


Revision tags: netbsd-1-0-base
# 1.5 03-Feb-1994 jtc

spelling mistakes


# 1.4 11-Jan-1994 jtc

Fix spelling errors.


# 1.3 01-Aug-1993 mycroft

Add RCS indentifiers.


Revision tags: netbsd-0-9-RELEASE netbsd-0-9-BETA netbsd-0-9-ALPHA2 netbsd-0-9-ALPHA netbsd-0-9-base
# 1.2 22-Apr-1993 mycroft

Fix various bugs in man pages (from 386BSD patch 130).


# 1.1 21-Mar-1993 cgd

branches: 1.1.1; 1.1.2;
Initial revision