aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/lukemftp/src
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/lukemftp/src')
-rw-r--r--contrib/lukemftp/src/cmds.c113
-rw-r--r--contrib/lukemftp/src/cmdtab.c4
-rw-r--r--contrib/lukemftp/src/domacro.c15
-rw-r--r--contrib/lukemftp/src/extern.h5
-rw-r--r--contrib/lukemftp/src/fetch.c91
-rw-r--r--contrib/lukemftp/src/ftp.1108
-rw-r--r--contrib/lukemftp/src/ftp.c55
-rw-r--r--contrib/lukemftp/src/ftp.cat11055
-rw-r--r--contrib/lukemftp/src/ftp_var.h20
-rw-r--r--contrib/lukemftp/src/main.c82
-rw-r--r--contrib/lukemftp/src/ruserpass.c18
-rw-r--r--contrib/lukemftp/src/util.c86
-rw-r--r--contrib/lukemftp/src/version.h6
13 files changed, 1441 insertions, 217 deletions
diff --git a/contrib/lukemftp/src/cmds.c b/contrib/lukemftp/src/cmds.c
index d72a1f8893f6..e13240007222 100644
--- a/contrib/lukemftp/src/cmds.c
+++ b/contrib/lukemftp/src/cmds.c
@@ -1,7 +1,7 @@
-/* $NetBSD: cmds.c,v 1.90 2000/08/01 22:47:25 lukem Exp $ */
+/* $NetBSD: cmds.c,v 1.98 2002/06/05 10:20:46 lukem Exp $ */
/*-
- * Copyright (c) 1996-2000 The NetBSD Foundation, Inc.
+ * Copyright (c) 1996-2002 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
@@ -515,26 +515,28 @@ void
reget(int argc, char *argv[])
{
- (void)getit(argc, argv, 1, "r+w");
+ (void)getit(argc, argv, 1, "r+");
}
void
get(int argc, char *argv[])
{
- (void)getit(argc, argv, 0, restart_point ? "r+w" : "w" );
+ (void)getit(argc, argv, 0, restart_point ? "r+" : "w" );
}
/*
* Receive one file.
+ * If restartit is 1, restart the xfer always.
+ * If restartit is -1, restart the xfer only if the remote file is newer.
*/
int
getit(int argc, char *argv[], int restartit, const char *mode)
{
- int loc = 0;
- int rval = 0;
- char *remfile, *locfile, *olocfile;
+ int loc, rval;
+ char *remfile, *locfile, *olocfile;
+ loc = rval = 0;
if (argc == 2) {
argc++;
argv[2] = argv[1];
@@ -639,8 +641,9 @@ void
mget(int argc, char *argv[])
{
sigfunc oldintr;
- int ch, ointer;
- char *cp, *tp, *tp2, tmpbuf[MAXPATHLEN];
+ int ointer;
+ char *cp, *tp;
+ int restartit;
if (argc == 0 ||
(argc == 1 && !another(&argc, &argv, "remote-files"))) {
@@ -650,6 +653,16 @@ mget(int argc, char *argv[])
}
mname = argv[0];
mflag = 1;
+ restart_point = 0;
+ restartit = 0;
+ if (strcmp(argv[0], "mreget") == 0) {
+ if (! features[FEAT_REST_STREAM]) {
+ fprintf(ttyout,
+ "Restart is not supported by the remote server.\n");
+ return;
+ }
+ restartit = 1;
+ }
oldintr = xsignal(SIGINT, mintr);
if (sigsetjmp(jabort, 1))
mabort();
@@ -658,30 +671,32 @@ mget(int argc, char *argv[])
mflag = 0;
continue;
}
- if (mflag && confirm(argv[0], cp)) {
- tp = cp;
- if (mcase) {
- for (tp2 = tmpbuf; (ch = *tp++) != 0; )
- *tp2++ = isupper(ch) ? tolower(ch) : ch;
- *tp2 = '\0';
- tp = tmpbuf;
- }
- if (ntflag) {
- tp = dotrans(tp);
- }
- if (mapflag) {
- tp = domap(tp);
- }
- recvrequest("RETR", tp, cp, "w",
- tp != cp || !interactive, 1);
- if (!mflag && fromatty) {
- ointer = interactive;
- interactive = 1;
- if (confirm("Continue with", "mget")) {
- mflag++;
- }
- interactive = ointer;
- }
+ if (! mflag || !confirm(argv[0], cp))
+ continue;
+ tp = cp;
+ if (mcase)
+ tp = docase(tp);
+ if (ntflag)
+ tp = dotrans(tp);
+ if (mapflag)
+ tp = domap(tp);
+ if (restartit) {
+ struct stat stbuf;
+
+ if (stat(tp, &stbuf) == 0)
+ restart_point = stbuf.st_size;
+ else
+ warn("stat %s", tp);
+ }
+ recvrequest("RETR", tp, cp, restart_point ? "r+" : "w",
+ tp != cp || !interactive, 1);
+ restart_point = 0;
+ if (!mflag && fromatty) {
+ ointer = interactive;
+ interactive = 1;
+ if (confirm("Continue with", "mget"))
+ mflag++;
+ interactive = ointer;
}
}
(void)xsignal(SIGINT, oldintr);
@@ -711,7 +726,7 @@ fget(int argc, char *argv[])
}
argv[0] = "get";
- mode = restart_point ? "r+w" : "w";
+ mode = restart_point ? "r+" : "w";
for (;
(buf = fparseln(fp, NULL, NULL, "\0\0\0", 0)) != NULL;
@@ -1111,7 +1126,7 @@ lcd(int argc, char *argv[])
code = -1;
if (argc == 1) {
argc++;
- argv[1] = home;
+ argv[1] = localhome;
}
if (argc != 2) {
fprintf(ttyout, "usage: %s [local-directory]\n", argv[0]);
@@ -1306,7 +1321,7 @@ mls(int argc, char *argv[])
sigfunc oldintr;
int ointer, i;
int dolist;
- char mode[1], *dest, *odest;
+ char *mode, *dest, *odest;
if (argc == 0)
goto usage;
@@ -1333,7 +1348,7 @@ mls(int argc, char *argv[])
if (sigsetjmp(jabort, 1))
mabort();
for (i = 1; mflag && i < argc-1 && connected; i++) {
- *mode = (i == 1) ? 'w' : 'a';
+ mode = (i == 1) ? "w" : "a";
recvrequest(dolist ? "LIST" : "NLST", dest, argv[i], mode,
0, 0);
if (!mflag && fromatty) {
@@ -1620,6 +1635,12 @@ do_chmod(int argc, char *argv[])
(void)command("SITE CHMOD %s %s", argv[1], argv[2]);
}
+#define COMMAND_1ARG(argc, argv, cmd) \
+ if (argc == 1) \
+ command(cmd); \
+ else \
+ command(cmd " %s", argv[1])
+
void
do_umask(int argc, char *argv[])
{
@@ -1631,7 +1652,7 @@ do_umask(int argc, char *argv[])
return;
}
verbose = 1;
- (void)command(argc == 1 ? "SITE UMASK" : "SITE UMASK %s", argv[1]);
+ COMMAND_1ARG(argc, argv, "SITE UMASK");
verbose = oldverbose;
}
@@ -1646,7 +1667,7 @@ idlecmd(int argc, char *argv[])
return;
}
verbose = 1;
- (void)command(argc == 1 ? "SITE IDLE" : "SITE IDLE %s", argv[1]);
+ COMMAND_1ARG(argc, argv, "SITE IDLE");
verbose = oldverbose;
}
@@ -1664,7 +1685,7 @@ rmthelp(int argc, char *argv[])
return;
}
verbose = 1;
- (void)command(argc == 1 ? "HELP" : "HELP %s", argv[1]);
+ COMMAND_1ARG(argc, argv, "HELP");
verbose = oldverbose;
}
@@ -1792,6 +1813,7 @@ doproxy(int argc, char *argv[])
cmdpos = strcspn(line, " \t");
if (cmdpos > 0) /* remove leading "proxy " from input buffer */
memmove(line, line + cmdpos + 1, strlen(line) - cmdpos + 1);
+ argv[1] = c->c_name;
(*c->c_handler)(argc-1, argv+1);
if (connected) {
proxflag = 1;
@@ -2427,7 +2449,7 @@ rmtstatus(int argc, char *argv[])
code = -1;
return;
}
- (void)command(argc > 1 ? "STAT %s" : "STAT" , argv[1]);
+ COMMAND_1ARG(argc, argv, "STAT");
}
/*
@@ -2503,7 +2525,7 @@ page(int argc, char *argv[])
orestart_point = restart_point;
overbose = verbose;
hash = restart_point = verbose = 0;
- recvrequest("RETR", pager, argv[1], "r+w", 1, 0);
+ recvrequest("RETR", pager, argv[1], "r+", 1, 0);
hash = ohash;
restart_point = orestart_point;
verbose = overbose;
@@ -2648,7 +2670,7 @@ mlst(int argc, char *argv[])
return;
}
verbose = 1; /* If we aren't verbose, this doesn't do anything! */
- (void)command(argc == 1 ? "MLST" : "MLST %s", argv[1]);
+ COMMAND_1ARG(argc, argv, "MLST");
verbose = oldverbose;
}
@@ -2668,6 +2690,9 @@ opts(int argc, char *argv[])
return;
}
verbose = 1; /* If we aren't verbose, this doesn't do anything! */
- (void)command(argc == 2 ? "OPTS %s" : "OPTS %s %s", argv[1], argv[2]);
+ if (argc == 2)
+ command("OPTS %s", argv[1]);
+ else
+ command("OPTS %s %s", argv[1], argv[2]);
verbose = oldverbose;
}
diff --git a/contrib/lukemftp/src/cmdtab.c b/contrib/lukemftp/src/cmdtab.c
index 492f7bd54449..0f52fe26682b 100644
--- a/contrib/lukemftp/src/cmdtab.c
+++ b/contrib/lukemftp/src/cmdtab.c
@@ -1,4 +1,4 @@
-/* $NetBSD: cmdtab.c,v 1.38 2000/09/14 13:48:33 lukem Exp $ */
+/* $NetBSD: cmdtab.c,v 1.39 2000/11/15 00:10:59 lukem Exp $ */
/*-
* Copyright (c) 1996-2000 The NetBSD Foundation, Inc.
@@ -108,6 +108,7 @@ char lshelp[] = "list contents of remote path";
char macdefhelp[] = "define a macro";
char mdeletehelp[] = "delete multiple files";
char mgethelp[] = "get multiple files";
+char mregethelp[] = "get multiple files restarting at end of local file";
char fgethelp[] = "get files using a localfile as a source of names";
char mkdirhelp[] = "make directory on the remote machine";
char mlshelp[] = "list contents of multiple remote directories";
@@ -224,6 +225,7 @@ struct cmd cmdtab[] = {
{ "modtime", modtimehelp, 0, 1, 1, CMPL(r) modtime },
{ "more", pagehelp, 1, 1, 1, CMPL(r) page },
{ "mput", mputhelp, 1, 1, 1, CMPL(L) mput },
+ { "mreget", mregethelp, 1, 1, 1, CMPL(R) mget },
{ "msend", mputhelp, 1, 1, 1, CMPL(L) mput },
{ "newer", newerhelp, 1, 1, 1, CMPL(r) newer },
{ "nlist", lshelp, 1, 1, 1, CMPL(rl) ls },
diff --git a/contrib/lukemftp/src/domacro.c b/contrib/lukemftp/src/domacro.c
index f42011c4f814..09109b01b0c4 100644
--- a/contrib/lukemftp/src/domacro.c
+++ b/contrib/lukemftp/src/domacro.c
@@ -1,4 +1,4 @@
-/* $NetBSD: domacro.c,v 1.17 2000/07/18 06:45:03 lukem Exp $ */
+/* $NetBSD: domacro.c,v 1.19 2002/02/01 05:04:43 itojun Exp $ */
/*
* Copyright (c) 1985, 1993, 1994
@@ -41,7 +41,7 @@ void
domacro(int argc, char *argv[])
{
int i, j, count = 2, loopflg = 0;
- char *cp1, *cp2, line2[200];
+ char *cp1, *cp2, line2[FTPBUFLEN];
struct cmd *c;
if ((argc == 0 && argv != NULL) ||
@@ -59,7 +59,7 @@ domacro(int argc, char *argv[])
code = -1;
return;
}
- (void)strcpy(line2, line);
+ (void)strlcpy(line2, line, sizeof(line2));
TOP:
cp1 = macros[i].mac_start;
while (cp1 != macros[i].mac_end) {
@@ -78,7 +78,8 @@ domacro(int argc, char *argv[])
j = 10*j + *cp1 - '0';
cp1--;
if (argc - 2 >= j) {
- (void)strcpy(cp2, argv[j+1]);
+ (void)strlcpy(cp2, argv[j+1],
+ sizeof(line) - (cp2 - line));
cp2 += strlen(argv[j+1]);
}
break;
@@ -87,7 +88,8 @@ domacro(int argc, char *argv[])
loopflg = 1;
cp1++;
if (count < argc) {
- (void)strcpy(cp2, argv[count]);
+ (void)strlcpy(cp2, argv[count],
+ sizeof(line) - (cp2 - line));
cp2 += strlen(argv[count]);
}
break;
@@ -117,10 +119,11 @@ domacro(int argc, char *argv[])
fputs(line, ttyout);
putc('\n', ttyout);
}
+ margv[0] = c->c_name;
(*c->c_handler)(margc, margv);
if (bell && c->c_bell)
(void)putc('\007', ttyout);
- (void)strcpy(line, line2);
+ (void)strlcpy(line, line2, sizeof(line));
makeargv();
argc = margc;
argv = margv;
diff --git a/contrib/lukemftp/src/extern.h b/contrib/lukemftp/src/extern.h
index ba8402b9d13c..0136f43b5f60 100644
--- a/contrib/lukemftp/src/extern.h
+++ b/contrib/lukemftp/src/extern.h
@@ -1,4 +1,4 @@
-/* $NetBSD: extern.h,v 1.59 2000/08/06 08:51:22 lukem Exp $ */
+/* $NetBSD: extern.h,v 1.60 2000/10/11 14:46:03 is Exp $ */
/*-
* Copyright (c) 1996-2000 The NetBSD Foundation, Inc.
@@ -122,7 +122,8 @@ void cleanuppeer(void);
void cmdabort(int);
void cmdtimeout(int);
void cmdscanner(void);
-int command(const char *, ...);
+int command(const char *, ...)
+ ;
#ifndef NO_EDITCOMPLETE
unsigned char complete(EditLine *, int);
void controlediting(void);
diff --git a/contrib/lukemftp/src/fetch.c b/contrib/lukemftp/src/fetch.c
index c38e90df90a4..1827abd85d4c 100644
--- a/contrib/lukemftp/src/fetch.c
+++ b/contrib/lukemftp/src/fetch.c
@@ -1,7 +1,7 @@
-/* $NetBSD: fetch.c,v 1.125 2000/09/28 12:29:23 lukem Exp $ */
+/* $NetBSD: fetch.c,v 1.136 2002/06/05 10:20:48 lukem Exp $ */
/*-
- * Copyright (c) 1997-2000 The NetBSD Foundation, Inc.
+ * Copyright (c) 1997-2002 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
@@ -58,7 +58,7 @@ typedef enum {
void aborthttp(int);
static int auth_url(const char *, char **, const char *, const char *);
-static void base64_encode(const char *, size_t, char *);
+static void base64_encode(const u_char *, size_t, u_char *);
static int go_fetch(const char *);
static int fetch_ftp(const char *);
static int fetch_url(const char *, const char *, char *, char *);
@@ -171,11 +171,11 @@ auth_url(const char *challenge, char **response, const char *guser,
* which should be at least ((len + 2) * 4 / 3 + 1) in size.
*/
static void
-base64_encode(const char *clear, size_t len, char *encoded)
+base64_encode(const u_char *clear, size_t len, u_char *encoded)
{
- static const char enc[] =
+ static const u_char enc[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
- char *cp;
+ u_char *cp;
int i;
cp = encoded;
@@ -373,7 +373,7 @@ parse_url(const char *url, const char *desc, url_t *type,
if (tport != NULL)
*port = xstrdup(tport);
if (*path == NULL)
- *path = xstrdup("");
+ *path = xstrdup("/");
if (debug)
fprintf(ttyout,
@@ -393,7 +393,7 @@ sigjmp_buf httpabort;
* If proxyenv is set, use that for the proxy, otherwise try ftp_proxy or
* http_proxy as appropriate.
* Supports HTTP redirects.
- * Returns -1 on failure, 0 on completed xfer, 1 if ftp connection
+ * Returns 1 on failure, 0 on completed xfer, -1 if ftp connection
* is still open (e.g, ftp xfer with trailing /)
*/
static int
@@ -574,6 +574,10 @@ fetch_url(const char *url, const char *proxyenv, char *proxyauth, char *wwwauth)
}
}
FREEPTR(np_copy);
+ if (isproxy == 0 && urltype == FTP_URL_T) {
+ rval = fetch_ftp(url);
+ goto cleanup_fetch_url;
+ }
}
if (isproxy) {
@@ -700,10 +704,13 @@ fetch_url(const char *url, const char *proxyenv, char *proxyauth, char *wwwauth)
(p = strchr(h, '%')) != NULL) {
*p = '\0';
}
- fprintf(fin, "Host: [%s]:%d\r\n", h, portnum);
+ fprintf(fin, "Host: [%s]", h);
free(h);
} else
- fprintf(fin, "Host: %s:%d\r\n", host, portnum);
+ fprintf(fin, "Host: %s", host);
+ if (portnum != HTTP_PORT)
+ fprintf(fin, ":%u", portnum);
+ fprintf(fin, "\r\n");
fprintf(fin, "Accept: */*\r\n");
fprintf(fin, "Connection: close\r\n");
if (restart_point) {
@@ -801,26 +808,42 @@ fetch_url(const char *url, const char *proxyenv, char *proxyauth, char *wwwauth)
} else if (strncasecmp(cp, CONTENTRANGE,
sizeof(CONTENTRANGE) - 1) == 0) {
cp += sizeof(CONTENTRANGE) - 1;
- rangestart = STRTOLL(cp, &ep, 10);
- if (rangestart < 0 || *ep != '-')
- goto improper;
- cp = ep + 1;
- rangeend = STRTOLL(cp, &ep, 10);
- if (rangeend < 0 || *ep != '/' ||
- rangeend < rangestart)
+ if (*cp == '*') {
+ ep = cp + 1;
+ }
+ else {
+ rangestart = STRTOLL(cp, &ep, 10);
+ if (rangestart < 0 || *ep != '-')
+ goto improper;
+ cp = ep + 1;
+ rangeend = STRTOLL(cp, &ep, 10);
+ if (rangeend < 0 || rangeend < rangestart)
+ goto improper;
+ }
+ if (*ep != '/')
goto improper;
cp = ep + 1;
- entitylen = STRTOLL(cp, &ep, 10);
- if (entitylen < 0 || *ep != '\0')
+ if (*cp == '*') {
+ ep = cp + 1;
+ }
+ else {
+ entitylen = STRTOLL(cp, &ep, 10);
+ if (entitylen < 0)
+ goto improper;
+ }
+ if (*ep != '\0')
goto improper;
- if (debug)
- fprintf(ttyout,
- "parsed range as: "
- LLF "-" LLF "/" LLF "\n",
- (LLT)rangestart,
- (LLT)rangeend,
- (LLT)entitylen);
+ if (debug) {
+ fprintf(ttyout, "parsed range as: ");
+ if (rangestart == -1)
+ fprintf(ttyout, "*");
+ else
+ fprintf(ttyout, LLF "-" LLF,
+ (LLT)rangestart,
+ (LLT)rangeend);
+ fprintf(ttyout, "/" LLF "\n", (LLT)entitylen);
+ }
if (! restart_point) {
warnx(
"Received unexpected Content-Range header");
@@ -1014,10 +1037,18 @@ fetch_url(const char *url, const char *proxyenv, char *proxyauth, char *wwwauth)
}
closefunc = pclose;
} else {
- if (restart_point){
+ if ((rangeend != -1 && rangeend <= restart_point) ||
+ (rangestart == -1 && filesize != -1 && filesize <= restart_point)) {
+ /* already done */
+ if (verbose)
+ fprintf(ttyout, "already done\n");
+ rval = 0;
+ goto cleanup_fetch_url;
+ }
+ if (restart_point && rangestart != -1) {
if (entitylen != -1)
filesize = entitylen;
- if (rangestart != -1 && rangestart != restart_point) {
+ if (rangestart != restart_point) {
warnx(
"Size of `%s' differs from save file `%s'",
url, savefile);
@@ -1149,7 +1180,6 @@ fetch_url(const char *url, const char *proxyenv, char *proxyauth, char *wwwauth)
goto cleanup_fetch_url;
}
progressmeter(1);
- bytes = 0;
(void)fflush(fout);
if (closefunc == fclose && mtime != -1) {
struct timeval tval[2];
@@ -1168,6 +1198,7 @@ fetch_url(const char *url, const char *proxyenv, char *proxyauth, char *wwwauth)
}
if (bytes > 0)
ptransfer(0);
+ bytes = 0;
rval = 0;
goto cleanup_fetch_url;
@@ -1351,7 +1382,7 @@ fetch_ftp(const char *url)
/* Set up the connection */
if (connected)
disconnect(0, NULL);
- xargv[0] = __progname;
+ xargv[0] = (char *)getprogname(); /* XXX discards const */
xargv[1] = host;
xargv[2] = NULL;
xargc = 2;
diff --git a/contrib/lukemftp/src/ftp.1 b/contrib/lukemftp/src/ftp.1
index 83bff622f4d1..f162ca66153b 100644
--- a/contrib/lukemftp/src/ftp.1
+++ b/contrib/lukemftp/src/ftp.1
@@ -1,6 +1,6 @@
-.\" $NetBSD: ftp.1,v 1.73 2000/09/28 12:26:19 lukem Exp $
+.\" $NetBSD: ftp.1,v 1.83 2002/06/05 10:20:48 lukem Exp $
.\"
-.\" Copyright (c) 1996-2000 The NetBSD Foundation, Inc.
+.\" Copyright (c) 1996-2002 The NetBSD Foundation, Inc.
.\" All rights reserved.
.\"
.\" This code is derived from software contributed to The NetBSD Foundation
@@ -68,7 +68,7 @@
.\"
.\" @(#)ftp.1 8.3 (Berkeley) 10/9/94
.\"
-.Dd September 28, 2000
+.Dd May 18, 2002
.Dt FTP 1
.Os
.Sh NAME
@@ -79,6 +79,9 @@ Internet file transfer program
.Nm ""
.Op Fl 46AadefginpRtvV
.Bk -words
+.Op Fl N Ar netrc
+.Ek
+.Bk -words
.Op Fl o Ar output
.Ek
.Bk -words
@@ -202,6 +205,14 @@ If no entry exists,
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 login.
+.It Fl N Ar netrc
+Use
+.Ar netrc
+instead of
+.Pa ~/.netrc .
+Refer to
+.Sx THE .netrc FILE
+for more information.
.It Fl o Ar output
When auto-fetching files, save the contents in
.Ar output .
@@ -299,7 +310,7 @@ from the user.
When
.Nm
is awaiting commands from the user the prompt
-.Ql ftp>
+.Ql ftp\*[Gt]
is provided to the user.
The following commands are recognized
by
@@ -359,7 +370,10 @@ and exit
An end of file will also terminate the session and exit.
.It Ic case
Toggle remote computer file name case mapping during
+.Ic get ,
.Ic mget
+and
+.Ic mput
commands.
When
.Ic case
@@ -413,7 +427,7 @@ When debugging is on,
.Nm
prints each command sent to the remote machine, preceded
by the string
-.Ql \-\->
+.Ql \-\-\*[Gt]
.It Ic delete Ar remote-file
Delete the file
.Ar remote-file
@@ -481,8 +495,9 @@ Set the file transfer
.Ic form
to
.Ar format .
-The default format is
-.Dq file .
+The default (and only supported)
+format is
+.Dq non-print .
.It Ic ftp Ar host Op Ar port
A synonym for
.Ic open .
@@ -525,9 +540,10 @@ are used while transferring the file.
.It Ic glob
Toggle filename expansion for
.Ic mdelete ,
-.Ic mget
+.Ic mget ,
+.Ic mput ,
and
-.Ic mput .
+.Ic mreget .
If globbing is turned off with
.Ic glob ,
the file name arguments
@@ -537,9 +553,10 @@ Globbing for
is done as in
.Xr csh 1 .
For
-.Ic mdelete
+.Ic mdelete ,
+.Ic mget ,
and
-.Ic mget ,
+.Ic mreget ,
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
@@ -548,9 +565,10 @@ the exact result depends on the foreign operating system and ftp server,
and can be previewed by doing
.Ql mls remote-files \-
Note:
-.Ic mget
-and
+.Ic mget ,
.Ic mput
+and
+.Ic mreget
are not meant to transfer
entire directory subtrees of files.
That can be done by
@@ -697,9 +715,9 @@ Set the file transfer
.Ic mode
to
.Ar mode-name .
-The default mode is
-.Dq stream
-mode.
+The default (and only supported)
+mode is
+.Dq stream .
.It Ic modtime Ar remote-file
Show the last modification time of the file on the remote machine.
.It Ic more Ar file
@@ -718,6 +736,13 @@ Resulting file names will then be processed according to
and
.Ic nmap
settings.
+.It Ic mreget Ar remote-files
+As per
+.Ic mget ,
+but performs a
+.Ic reget
+instead of
+.Ic get .
.It Ic msend Ar local-files
A synonym for
.Ic mput .
@@ -800,7 +825,7 @@ the output filename "myfile.data" for input filenames "myfile.data" and
"myfile.myfile" for the input filename ".myfile".
Spaces may be included in
.Ar outpattern ,
-as in the example: `nmap $1 sed "s/ *$//" > $1' .
+as in the example: `nmap $1 sed "s/ *$//" \*[Gt] $1' .
Use the `\e' character to prevent special treatment
of the `$','[',']', and `,' characters.
.It Ic ntrans Op Ar inchars Op Ar outchars
@@ -1121,7 +1146,7 @@ commands known to support options include:
.Sq MLST
(used for
.Dv MLSD
-and
+and
.Dv MLST ) .
.It Ic rename Op Ar from Op Ar to
Rename the file
@@ -1249,6 +1274,12 @@ Defaults to
Defaults to
.Ev $FTPRPROMPT .
.El
+.It Ic site Ar arg1 arg2 ...
+The arguments specified are sent, verbatim, to the remote
+.Tn FTP
+server as a
+.Dv SITE
+command.
.It Ic size Ar remote-file
Return size of
.Ar remote-file
@@ -1256,12 +1287,6 @@ on remote machine.
.It Ic sndbuf Ar size
Set the size of the socket send buffer to
.Ar size .
-.It Ic site Ar arg1 arg2 ...
-The arguments specified are sent, verbatim, to the remote
-.Tn FTP
-server as a
-.Dv SITE
-command.
.It Ic status
Show the current status of
.Nm ftp .
@@ -1270,9 +1295,9 @@ Set the file transfer
.Ar structure
to
.Ar struct-name .
-By default
-.Dq stream
-structure is used.
+The default (and only supported)
+structure is
+.Dq file .
.It Ic sunique
Toggle storing of files on remote machine under unique file names.
The remote
@@ -1720,7 +1745,12 @@ The
.Pa .netrc
file contains login and initialization information
used by the auto-login process.
-It resides in the user's home directory.
+It resides in the user's home directory,
+unless overridden with the
+.Fl N Ar netrc
+option, or specified in the
+.Ev NETRC
+environment variable.
The following tokens are recognized; they may be separated by spaces,
tabs, or new-lines:
.Bl -tag -width password
@@ -1844,7 +1874,7 @@ By default, this is bound to the TAB key.
By default,
.Nm
displays a command line prompt of
-.Dq "ftp> "
+.Dq "ftp\*[Gt] "
to the user.
This can be changed with the
.Ic "set prompt"
@@ -1872,7 +1902,7 @@ begins with
.Sq 0 ,
the number of skipped components precede the trailing component(s) in
the format
-.Dq /\fI<skipped>\fRtrailing
+.Dq /\fI\*[Lt]skipped\*[Gt]\fRtrailing
(for
.Sq %c )
or
@@ -1920,7 +1950,7 @@ only
.It Ev FTPPROMPT
Command-line prompt to use.
Defaults to
-.Dq "ftp> " .
+.Dq "ftp\*[Gt] " .
Refer to
.Sx COMMAND LINE PROMPT
for more information.
@@ -1947,6 +1977,10 @@ lookup of
For default location of a
.Pa .netrc
file, if one exists.
+.It Ev NETRC
+An alternate location of the
+.Pa .netrc
+file.
.It Ev PAGER
Used by various commands to display files.
Defaults to
@@ -1963,6 +1997,10 @@ URL requests
(if not defined, use the standard
.Tn FTP
protocol).
+.Pp
+.Em NOTE :
+this is not used for interactive sessions, only for command-line
+fetches.
.It Ev http_proxy
URL of
.Tn HTTP
@@ -1979,7 +2017,11 @@ and
.Ev http_proxy
may be incompatible with other programs that use it
(such as
-.Xr lynx 1 ).
+.Xr lynx 1 ) .
+.Pp
+.Em NOTE :
+this is not used for interactive sessions, only for command-line
+fetches.
.It Ev no_proxy
A space or comma separated list of hosts (or domains) for which
proxying is not to be used.
@@ -2019,7 +2061,7 @@ and other enhancements over the standard
were implemented in
.Nx 1.3
and later releases
-by Luke Mewburn <lukem@netbsd.org>.
+by Luke Mewburn \*[Lt]lukem@netbsd.org\*[Gt].
.Pp
IPv6 support was added by the WIDE/KAME project
(but may not be present in all non-NetBSD versions of this program, depending
diff --git a/contrib/lukemftp/src/ftp.c b/contrib/lukemftp/src/ftp.c
index b340e85669d0..6dcc530f80a3 100644
--- a/contrib/lukemftp/src/ftp.c
+++ b/contrib/lukemftp/src/ftp.c
@@ -1,7 +1,7 @@
-/* $NetBSD: ftp.c,v 1.109 2000/09/28 12:29:24 lukem Exp $ */
+/* $NetBSD: ftp.c,v 1.120 2002/06/05 10:20:49 lukem Exp $ */
/*-
- * Copyright (c) 1996-2000 The NetBSD Foundation, Inc.
+ * Copyright (c) 1996-2002 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
@@ -192,8 +192,9 @@ hookup(char *host, char *port)
if (res0->ai_next) /* if we have multiple possibilities */
#endif
{
- getnameinfo(res->ai_addr, res->ai_addrlen,
- hbuf, sizeof(hbuf), NULL, 0, NI_NUMERICHOST);
+ if (getnameinfo(res->ai_addr, res->ai_addrlen,
+ hbuf, sizeof(hbuf), NULL, 0, NI_NUMERICHOST))
+ strlcpy(hbuf, "?", sizeof(hbuf));
fprintf(ttyout, "Trying %s...\n", hbuf);
}
((struct sockaddr_in *)res->ai_addr)->sin_port = htons(portnum);
@@ -209,9 +210,10 @@ hookup(char *host, char *port)
if (error) {
/* this "if" clause is to prevent print warning twice */
if (res->ai_next) {
- getnameinfo(res->ai_addr, res->ai_addrlen,
+ if (getnameinfo(res->ai_addr, res->ai_addrlen,
hbuf, sizeof(hbuf), NULL, 0,
- NI_NUMERICHOST);
+ NI_NUMERICHOST))
+ strlcpy(hbuf, "?", sizeof(hbuf));
warn("connect to address %s", hbuf);
}
cause = "connect";
@@ -703,7 +705,7 @@ sendrequest(const char *cmd, const char *local, const char *remote,
}
if (command("REST " LLF, (LLT)restart_point) != CONTINUE)
goto cleanupsend;
- lmode = "r+w";
+ lmode = "r+";
}
if (remote) {
if (command("%s %s", cmd, remote) != PRELIM)
@@ -1178,7 +1180,7 @@ recvrequest(const char *cmd, const char *local, const char *remote,
bytes++;
contin2: ;
}
-break2:
+ break2:
if (hash && (!progress || filesize < 0)) {
if (bytes < hashbytes)
(void)putc('#', ttyout);
@@ -1300,7 +1302,8 @@ initconn(void)
switch (data_addr.su_family) {
case AF_INET:
if (epsv4 && !epsv4bad) {
- result = command(pasvcmd = "EPSV");
+ pasvcmd = "EPSV";
+ result = command("EPSV");
if (!connected)
return (1);
/*
@@ -1322,14 +1325,16 @@ initconn(void)
}
}
if (result != COMPLETE) {
- result = command(pasvcmd = "PASV");
+ pasvcmd = "PASV";
+ result = command("PASV");
if (!connected)
return (1);
}
break;
#ifdef INET6
case AF_INET6:
- result = command(pasvcmd = "EPSV");
+ pasvcmd = "EPSV";
+ result = command("EPSV");
if (!connected)
return (1);
/* this code is to be friendly with broken BSDI ftpd */
@@ -1339,8 +1344,10 @@ initconn(void)
ttyout);
result = COMPLETE + 1;
}
- if (result != COMPLETE)
- result = command(pasvcmd = "LPSV");
+ if (result != COMPLETE) {
+ pasvcmd = "LPSV";
+ result = command("LPSV");
+ }
if (!connected)
return (1);
break;
@@ -1573,10 +1580,9 @@ initconn(void)
warn("listen");
if (sendport) {
-#ifdef INET6
- char hname[INET6_ADDRSTRLEN];
+ char hname[NI_MAXHOST], sname[NI_MAXSERV];
int af;
-#endif
+ struct sockinet tmp;
switch (data_addr.su_family) {
case AF_INET:
@@ -1587,14 +1593,20 @@ initconn(void)
/* FALLTHROUGH */
#ifdef INET6
case AF_INET6:
+#endif
af = (data_addr.su_family == AF_INET) ? 1 : 2;
- if (getnameinfo((struct sockaddr *)&data_addr.si_su,
- data_addr.su_len, hname, sizeof(hname), NULL, 0,
- NI_NUMERICHOST)) {
+ tmp = data_addr;
+#ifdef INET6
+ if (tmp.su_family == AF_INET6)
+ tmp.si_su.su_sin6.sin6_scope_id = 0;
+#endif
+ if (getnameinfo((struct sockaddr *)&tmp.si_su,
+ tmp.su_len, hname, sizeof(hname), sname,
+ sizeof(sname), NI_NUMERICHOST | NI_NUMERICSERV)) {
result = ERROR;
} else {
- result = command("EPRT |%d|%s|%d|", af, hname,
- ntohs(data_addr.su_port));
+ result = command("EPRT |%d|%s|%s|", af, hname,
+ sname);
if (!connected)
return (1);
if (result != COMPLETE) {
@@ -1606,7 +1618,6 @@ initconn(void)
}
}
break;
-#endif
default:
result = COMPLETE + 1;
break;
diff --git a/contrib/lukemftp/src/ftp.cat1 b/contrib/lukemftp/src/ftp.cat1
new file mode 100644
index 000000000000..091a1190c2f7
--- /dev/null
+++ b/contrib/lukemftp/src/ftp.cat1
@@ -0,0 +1,1055 @@
+FTP(1) NetBSD Reference Manual FTP(1)
+
+NNAAMMEE
+ ffttpp - Internet file transfer program
+
+SSYYNNOOPPSSIISS
+ ffttpp [--4466AAaaddeeffggiinnppRRttvvVV] [--NN _n_e_t_r_c] [--oo _o_u_t_p_u_t] [--PP _p_o_r_t] [--rr _r_e_t_r_y] [--TT
+ _d_i_r,_m_a_x[,_i_n_c]] [[_u_s_e_r@]_h_o_s_t [_p_o_r_t]] [_u_s_e_r@]_h_o_s_t:[_p_a_t_h][/]
+ [file:///_p_a_t_h] [ftp://[_u_s_e_r[:_p_a_s_s_w_o_r_d]@]_h_o_s_t[:_p_o_r_t]/_p_a_t_h[/]]
+ [http://[_u_s_e_r[:_p_a_s_s_w_o_r_d]@]_h_o_s_t[:_p_o_r_t]/_p_a_t_h] [_._._.]
+ ffttpp --uu _u_r_l file [_._._.]
+
+DDEESSCCRRIIPPTTIIOONN
+ ffttpp is the user interface to the Internet standard File Transfer Proto-
+ col. The program allows a user to transfer files to and from a remote
+ network site.
+
+ The last five arguments will fetch a file using the FTP or HTTP proto-
+ cols, or by direct copying, into the current directory. This is ideal
+ for scripts. Refer to _A_U_T_O_-_F_E_T_C_H_I_N_G _F_I_L_E_S below for more information.
+
+ Options may be specified at the command line, or to the command inter-
+ preter.
+
+ --44 Forces ffttpp to only use IPv4 addresses.
+
+ --66 Forces ffttpp to only use IPv6 addresses.
+
+ --AA Force active mode ftp. By default, ffttpp will try to use passive
+ mode ftp and fall back to active mode if passive is not support-
+ ed by the server. This option causes ffttpp to always use an ac-
+ tive connection. It is only useful for connecting to very old
+ servers that do not implement passive mode properly.
+
+ --aa Causes ffttpp to bypass normal login procedure, and use an anony-
+ mous login instead.
+
+ --dd Enables debugging.
+
+ --ee Disables command line editing. This is useful for Emacs ange-
+ ftp mode.
+
+ --ff Forces a cache reload for transfers that go through the FTP or
+ HTTP proxies.
+
+ --gg Disables file name globbing.
+
+ --ii Turns off interactive prompting during multiple file transfers.
+
+ --nn Restrains ffttpp from attempting ``auto-login'' upon initial con-
+ nection. If auto-login is enabled, ffttpp will check the _._n_e_t_r_c
+ (see below) file in the user's home directory for an entry de-
+ scribing an account on the remote machine. If no entry exists,
+ ffttpp 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 login.
+
+ --NN _n_e_t_r_c
+ Use _n_e_t_r_c instead of _~_/_._n_e_t_r_c. Refer to _T_H_E _._n_e_t_r_c _F_I_L_E for
+ more information.
+
+ --oo _o_u_t_p_u_t
+ When auto-fetching files, save the contents in _o_u_t_p_u_t. _o_u_t_p_u_t
+ is parsed according to the _F_I_L_E _N_A_M_I_N_G _C_O_N_V_E_N_T_I_O_N_S below. If
+ _o_u_t_p_u_t is not `-' or doesn't start with `|', then only the first
+ file specified will be retrieved into _o_u_t_p_u_t; all other files
+ will be retrieved into the basename of their remote name.
+
+ --pp Enable passive mode operation for use behind connection filter-
+ ing firewalls. This option has been deprecated as ffttpp now tries
+ to use passive mode by default, falling back to active mode if
+ the server does not support passive connections.
+
+ --PP _p_o_r_t Sets the port number to _p_o_r_t.
+
+ --rr _w_a_i_t Retry the connection attempt if it failed, pausing for _w_a_i_t sec-
+ onds.
+
+ --RR Restart all non-proxied auto-fetches.
+
+ --tt Enables packet tracing.
+
+ --TT _d_i_r_e_c_t_i_o_n,_m_a_x_i_m_u_m[,_i_n_c_r_e_m_e_n_t]
+ Set the maximum transfer rate for _d_i_r_e_c_t_i_o_n to _m_a_x_i_m_u_m
+ bytes/second, and if specified, the increment to _i_n_c_r_e_m_e_n_t
+ bytes/second. Refer to rraattee for more information.
+
+ --uu _u_r_l _f_i_l_e [...]
+ Upload files on the command line to _u_r_l where _u_r_l is one of the
+ ftp URL types as supported by auto-fetch (with an optional tar-
+ get filename for single file uploads), and _f_i_l_e is one or more
+ local files to be uploaded.
+
+ --vv Enable vveerrbboossee and pprrooggrreessss. This is the default if output is
+ to a terminal (and in the case of pprrooggrreessss, ffttpp is the fore-
+ ground process). Forces ffttpp to show all responses from the re-
+ mote server, as well as report on data transfer statistics.
+
+ --VV Disable vveerrbboossee and pprrooggrreessss, overriding the default of enabled
+ when output is to a terminal.
+
+ The client host with which ffttpp is to communicate may be specified on the
+ command line. If this is done, ffttpp will immediately attempt to establish
+ a connection to an FTP server on that host; otherwise, ffttpp will enter its
+ command interpreter and await instructions from the user. When ffttpp is
+ awaiting commands from the user the prompt `ftp>' is provided to the us-
+ er. The following commands are recognized by ffttpp:
+
+ !! [_c_o_m_m_a_n_d [_a_r_g_s]]
+ 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.
+
+ $$ _m_a_c_r_o_-_n_a_m_e [_a_r_g_s]
+ Execute the macro _m_a_c_r_o_-_n_a_m_e that was defined with the mmaaccddeeff
+ command. Arguments are passed to the macro unglobbed.
+
+ aaccccoouunntt [_p_a_s_s_w_d]
+ 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.
+
+ aappppeenndd _l_o_c_a_l_-_f_i_l_e [_r_e_m_o_t_e_-_f_i_l_e]
+ Append a local file to a file on the remote machine. If
+ _r_e_m_o_t_e_-_f_i_l_e is left unspecified, the local file name is used
+ in naming the remote file after being altered by any nnttrraannss
+ or nnmmaapp setting. File transfer uses the current settings for
+ ttyyppee, ffoorrmmaatt, mmooddee, and ssttrruuccttuurree.
+
+ aasscciiii Set the file transfer ttyyppee to network ASCII. This is the de-
+ fault type.
+
+ bbeellll Arrange that a bell be sounded after each file transfer com-
+ mand is completed.
+
+ bbiinnaarryy Set the file transfer ttyyppee to support binary image transfer.
+
+ bbyyee Terminate the FTP session with the remote server and exit
+ ffttpp. An end of file will also terminate the session and ex-
+ it.
+
+ ccaassee Toggle remote computer file name case mapping during ggeett,
+ mmggeett and mmppuutt commands. When ccaassee 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.
+
+ ccdd _r_e_m_o_t_e_-_d_i_r_e_c_t_o_r_y
+ Change the working directory on the remote machine to _r_e_m_o_t_e_-
+ _d_i_r_e_c_t_o_r_y.
+
+ ccdduupp Change the remote machine working directory to the parent of
+ the current remote machine working directory.
+
+ cchhmmoodd _m_o_d_e _r_e_m_o_t_e_-_f_i_l_e
+ Change the permission modes of the file _r_e_m_o_t_e_-_f_i_l_e on the
+ remote system to _m_o_d_e.
+
+ cclloossee Terminate the FTP session with the remote server, and return
+ to the command interpreter. Any defined macros are erased.
+
+ ccrr Toggle carriage return stripping during ascii type file re-
+ trieval. Records are denoted by a carriage return/linefeed
+ sequence during ascii type file transfer. When ccrr is on (the
+ default), carriage returns are stripped from this sequence to
+ conform with the UNIX single linefeed record delimiter.
+ Records on non-UNIX remote systems may contain single line-
+ feeds; when an ascii type transfer is made, these linefeeds
+ may be distinguished from a record delimiter only when ccrr is
+ off.
+
+ ddeebbuugg [_d_e_b_u_g_-_v_a_l_u_e]
+ Toggle debugging mode. If an optional _d_e_b_u_g_-_v_a_l_u_e is speci-
+ fied it is used to set the debugging level. When debugging
+ is on, ffttpp prints each command sent to the remote machine,
+ preceded by the string `-->'
+
+ ddeelleettee _r_e_m_o_t_e_-_f_i_l_e
+ Delete the file _r_e_m_o_t_e_-_f_i_l_e on the remote machine.
+
+ ddiirr [_r_e_m_o_t_e_-_p_a_t_h [_l_o_c_a_l_-_f_i_l_e]]
+ Print a listing of the contents of a directory on the remote
+ machine. The listing includes any system-dependent informa-
+ tion that the server chooses to include; for example, most
+ UNIX systems will produce output from the command `ls -l'.
+ If _r_e_m_o_t_e_-_p_a_t_h is left unspecified, the current working di-
+ rectory is used. If interactive prompting is on, ffttpp will
+ prompt the user to verify that the last argument is indeed
+ the target local file for receiving ddiirr output. If no local
+ file is specified, or if _l_o_c_a_l_-_f_i_l_e is `--', the output is
+ sent to the terminal.
+
+ ddiissccoonnnneecctt A synonym for cclloossee.
+
+ eeddiitt Toggle command line editing, and context sensitive command
+ and file completion. This is automatically enabled if input
+ is from a terminal, and disabled otherwise.
+
+ eeppssvv44 Toggle the use of the extended EPSV and EPRT commands on IPv4
+ connections; first try EPSV / EPRT, and then PASV / PORT.
+ This is enabled by default. If an extended command fails
+ then this option will be temporarily disabled for the dura-
+ tion of the current connection, or until eeppssvv44 is executed
+ again.
+
+ eexxiitt A synonym for bbyyee.
+
+ ffeeaattuurreess Display what features the remote server supports (using the
+ FEAT command).
+
+ ffggeett _l_o_c_a_l_f_i_l_e
+ Retrieve the files listed in _l_o_c_a_l_f_i_l_e, which has one line
+ per filename.
+
+ ffoorrmm _f_o_r_m_a_t
+ Set the file transfer ffoorrmm to _f_o_r_m_a_t. The default (and only
+ supported) format is ``non-print''.
+
+ ffttpp _h_o_s_t [_p_o_r_t]
+ A synonym for ooppeenn.
+
+ ggaattee [_h_o_s_t [_p_o_r_t]]
+ Toggle gate-ftp mode, which used to connect through the TIS
+ FWTK and Gauntlet ftp proxies. This will not be permitted if
+ the gate-ftp server hasn't been set (either explicitly by the
+ user, or from the FTPSERVER environment variable). If _h_o_s_t
+ is given, then gate-ftp mode will be enabled, and the gate-
+ ftp server will be set to _h_o_s_t. If _p_o_r_t is also given, that
+ will be used as the port to connect to on the gate-ftp serv-
+ er.
+
+ ggeett _r_e_m_o_t_e_-_f_i_l_e [_l_o_c_a_l_-_f_i_l_e]
+ Retrieve the _r_e_m_o_t_e_-_f_i_l_e 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 ccaassee, nnttrraannss, and nnmmaapp settings. The current
+ settings for ttyyppee, ffoorrmm, mmooddee, and ssttrruuccttuurree are used while
+ transferring the file.
+
+ gglloobb Toggle filename expansion for mmddeelleettee, mmggeett, mmppuutt, and
+ mmrreeggeett. If globbing is turned off with gglloobb, the file name
+ arguments are taken literally and not expanded. Globbing for
+ mmppuutt is done as in csh(1). For mmddeelleettee, mmggeett, and mmrreeggeett,
+ each remote file name is expanded separately on the remote
+ machine and the lists are not merged. Expansion of a direc-
+ tory 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 `mls remote-files -' Note: mmggeett, mmppuutt and mmrreeggeett are
+ not meant to transfer entire directory subtrees of files.
+ That can be done by transferring a tar(1) archive of the sub-
+ tree (in binary mode).
+
+ hhaasshh [_s_i_z_e]
+ Toggle hash-sign (``#'') printing for each data block trans-
+ ferred. The size of a data block defaults to 1024 bytes.
+ This can be changed by specifying _s_i_z_e in bytes. Enabling
+ hhaasshh disables pprrooggrreessss.
+
+ hheellpp [_c_o_m_m_a_n_d]
+ Print an informative message about the meaning of _c_o_m_m_a_n_d.
+ If no argument is given, ffttpp prints a list of the known com-
+ mands.
+
+ iiddllee [_s_e_c_o_n_d_s]
+ Set the inactivity timer on the remote server to _s_e_c_o_n_d_s sec-
+ onds. If _s_e_c_o_n_d_s is omitted, the current inactivity timer is
+ printed.
+
+ iimmaaggee A synonym for bbiinnaarryy.
+
+ llccdd [_d_i_r_e_c_t_o_r_y]
+ Change the working directory on the local machine. If no
+ _d_i_r_e_c_t_o_r_y is specified, the user's home directory is used.
+
+ lleessss _f_i_l_e A synonym for ppaaggee.
+
+ llppaaggee _l_o_c_a_l_-_f_i_l_e
+ Display _l_o_c_a_l_-_f_i_l_e with the program specified by the sseett
+ ppaaggeerr option.
+
+ llppwwdd Print the working directory on the local machine.
+
+ llss [_r_e_m_o_t_e_-_p_a_t_h [_l_o_c_a_l_-_f_i_l_e]]
+ A synonym for ddiirr.
+
+ mmaaccddeeff _m_a_c_r_o_-_n_a_m_e
+ Define a macro. Subsequent lines are stored as the macro
+ _m_a_c_r_o_-_n_a_m_e; 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. Macros remain defined un-
+ til a cclloossee command is executed. The macro processor inter-
+ prets `$' and `\' as special characters. A `$' followed by a
+ number (or numbers) is replaced by the corresponding argument
+ on the macro invocation command line. A `$' followed by an
+ `i' signals that macro processor that the executing macro is
+ to be looped. On the first pass `$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 `\' followed by any character is replaced by that charac-
+ ter. Use the `\' to prevent special treatment of the `$'.
+
+ mmddeelleettee [_r_e_m_o_t_e_-_f_i_l_e_s]
+ Delete the _r_e_m_o_t_e_-_f_i_l_e_s on the remote machine.
+
+ mmddiirr _r_e_m_o_t_e_-_f_i_l_e_s _l_o_c_a_l_-_f_i_l_e
+ Like ddiirr, except multiple remote files may be specified. If
+ interactive prompting is on, ffttpp will prompt the user to ver-
+ ify that the last argument is indeed the target local file
+ for receiving mmddiirr output.
+
+ mmggeett _r_e_m_o_t_e_-_f_i_l_e_s
+ Expand the _r_e_m_o_t_e_-_f_i_l_e_s on the remote machine and do a ggeett
+ for each file name thus produced. See gglloobb for details on
+ the filename expansion. Resulting file names will then be
+ processed according to ccaassee, nnttrraannss, and nnmmaapp settings.
+ Files are transferred into the local working directory, which
+ can be changed with `lcd directory'; new local directories
+ can be created with `! mkdir directory'.
+
+ mmkkddiirr _d_i_r_e_c_t_o_r_y_-_n_a_m_e
+ Make a directory on the remote machine.
+
+ mmllss _r_e_m_o_t_e_-_f_i_l_e_s _l_o_c_a_l_-_f_i_l_e
+ Like llss, except multiple remote files may be specified, and
+ the _l_o_c_a_l_-_f_i_l_e must be specified. If interactive prompting
+ is on, ffttpp will prompt the user to verify that the last argu-
+ ment is indeed the target local file for receiving mmllss out-
+ put.
+
+ mmllssdd [_r_e_m_o_t_e_-_p_a_t_h]
+ Display the contents of _r_e_m_o_t_e_-_p_a_t_h (which should default to
+ the current directory if not given) in a machine-parsable
+ form, using MLSD. The format of display can be changed with
+ `remopts mlst ...'.
+
+ mmllsstt [_r_e_m_o_t_e_-_p_a_t_h]
+ Display the details about _r_e_m_o_t_e_-_p_a_t_h (which should default
+ to the current directory if not given) in a machine-parsable
+ form, using MLST. The format of display can be changed with
+ `remopts mlst ...'.
+
+ mmooddee _m_o_d_e_-_n_a_m_e
+ Set the file transfer mmooddee to _m_o_d_e_-_n_a_m_e. The default (and
+ only supported) mode is ``stream''.
+
+ mmooddttiimmee _r_e_m_o_t_e_-_f_i_l_e
+ Show the last modification time of the file on the remote ma-
+ chine.
+
+ mmoorree _f_i_l_e A synonym for ppaaggee.
+
+ mmppuutt _l_o_c_a_l_-_f_i_l_e_s
+ Expand wild cards in the list of local files given as argu-
+ ments and do a ppuutt for each file in the resulting list. See
+ gglloobb for details of filename expansion. Resulting file names
+ will then be processed according to nnttrraannss and nnmmaapp settings.
+
+ mmrreeggeett _r_e_m_o_t_e_-_f_i_l_e_s
+ As per mmggeett, but performs a rreeggeett instead of ggeett.
+
+ mmsseenndd _l_o_c_a_l_-_f_i_l_e_s
+ A synonym for mmppuutt.
+
+ nneewweerr _r_e_m_o_t_e_-_f_i_l_e [_l_o_c_a_l_-_f_i_l_e]
+ Get the file only if the modification time of the remote file
+ is more recent that the file on the current system. If the
+ file does not exist on the current system, the remote file is
+ considered nneewweerr. Otherwise, this command is identical to
+ _g_e_t.
+
+ nnlliisstt [_r_e_m_o_t_e_-_p_a_t_h [_l_o_c_a_l_-_f_i_l_e]]
+ A synonym for llss.
+
+ nnmmaapp [_i_n_p_a_t_t_e_r_n _o_u_t_p_a_t_t_e_r_n]
+ 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
+ mmppuutt commands and ppuutt commands issued without a specified re-
+ mote target filename. If arguments are specified, local
+ filenames are mapped during mmggeett commands and ggeett commands
+ issued without a specified local target filename. This com-
+ mand is useful when connecting to a non-UNIX remote computer
+ with different file naming conventions or practices. The
+ mapping follows the pattern set by _i_n_p_a_t_t_e_r_n and _o_u_t_p_a_t_t_e_r_n.
+ [_I_n_p_a_t_t_e_r_n] is a template for incoming filenames (which may
+ have already been processed according to the nnttrraannss and ccaassee
+ settings). Variable templating is accomplished by including
+ the sequences `$1', `$2', ..., `$9' in _i_n_p_a_t_t_e_r_n. Use `\' to
+ prevent this special treatment of the `$' character. All
+ other characters are treated literally, and are used to de-
+ termine the nnmmaapp [_i_n_p_a_t_t_e_r_n] variable values. For example,
+ given _i_n_p_a_t_t_e_r_n $1.$2 and the remote file name "mydata.data",
+ $1 would have the value "mydata", and $2 would have the value
+ "data". The _o_u_t_p_a_t_t_e_r_n determines the resulting mapped file-
+ name. The sequences `$1', `$2', ...., `$9' are replaced by
+ any value resulting from the _i_n_p_a_t_t_e_r_n template. The se-
+ quence `$0' is replace by the original filename. Additional-
+ ly, the sequence `[_s_e_q_1, _s_e_q_2]' is replaced by [_s_e_q_1] if _s_e_q_1
+ is not a null string; otherwise it is replaced by _s_e_q_2. For
+ example, the command
+
+ nmap $1.$2.$3 [$1,$2].[$2,file]
+
+ would yield the output filename "myfile.data" for input file-
+ names "myfile.data" and "myfile.data.old", "myfile.file" for
+ the input filename "myfile", and "myfile.myfile" for the in-
+ put filename ".myfile". Spaces may be included in
+ _o_u_t_p_a_t_t_e_r_n, as in the example: `nmap $1 sed "s/ *$//" > $1'
+ . Use the `\' character to prevent special treatment of the
+ `$','[',']', and `,' characters.
+
+ nnttrraannss [_i_n_c_h_a_r_s [_o_u_t_c_h_a_r_s]]
+ Set or unset the filename character translation mechanism.
+ If no arguments are specified, the filename character trans-
+ lation mechanism is unset. If arguments are specified, char-
+ acters in remote filenames are translated during mmppuutt com-
+ mands and ppuutt commands issued without a specified remote tar-
+ get filename. If arguments are specified, characters in lo-
+ cal filenames are translated during mmggeett commands and ggeett
+ 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 _i_n_c_h_a_r_s are
+ replaced with the corresponding character in _o_u_t_c_h_a_r_s. If
+ the character's position in _i_n_c_h_a_r_s is longer than the length
+ of _o_u_t_c_h_a_r_s, the character is deleted from the file name.
+
+ ooppeenn _h_o_s_t [_p_o_r_t]
+ Establish a connection to the specified _h_o_s_t FTP server. An
+ optional port number may be supplied, in which case, ffttpp will
+ attempt to contact an FTP server at that port. If the aauuttoo--
+ llooggiinn option is on (default), ffttpp will also attempt to auto-
+ matically log the user in to the FTP server (see below).
+
+ ppaaggee _f_i_l_e Retrieve ffiillee and display with the program specified by the
+ sseett ppaaggeerr option.
+
+ ppaassssiivvee [aauuttoo]
+ Toggle passive mode (if no arguments are given). If aauuttoo is
+ given, act as if FTPMODE is set to `auto'. If passive mode
+ is turned on (default), ffttpp will send a PASV command for all
+ data connections instead of a PORT command. The PASV command
+ requests that the remote server open a port for the data con-
+ nection 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 PORT command, the client lis-
+ tens on a port and sends that address to the remote server,
+ who connects back to it. Passive mode is useful when using
+ ffttpp through a gateway router or host that controls the direc-
+ tionality of traffic. (Note that though FTP servers are re-
+ quired to support the PASV command by RFC 1123, some do not.)
+
+ ppddiirr [_r_e_m_o_t_e_-_p_a_t_h]
+ Perform ddiirr [_r_e_m_o_t_e_-_p_a_t_h], and display the result with the
+ program specified by the sseett ppaaggeerr option.
+
+ ppllss [_r_e_m_o_t_e_-_p_a_t_h]
+ Perform llss [_r_e_m_o_t_e_-_p_a_t_h], and display the result with the
+ program specified by the sseett ppaaggeerr option.
+
+ ppmmllssdd [_r_e_m_o_t_e_-_p_a_t_h]
+ Perform mmllssdd [_r_e_m_o_t_e_-_p_a_t_h], and display the result with the
+ program specified by the sseett ppaaggeerr option.
+
+ pprreesseerrvvee Toggle preservation of modification times on retrieved files.
+
+ pprrooggrreessss Toggle display of transfer progress bar. The progress bar
+ will be disabled for a transfer that has _l_o_c_a_l_-_f_i_l_e as `--' or
+ a command that starts with `|'. Refer to _F_I_L_E _N_A_M_I_N_G
+ _C_O_N_V_E_N_T_I_O_N_S for more information. Enabling pprrooggrreessss disables
+ hhaasshh.
+
+ pprroommpptt Toggle interactive prompting. Interactive prompting occurs
+ during multiple file transfers to allow the user to selec-
+ tively retrieve or store files. If prompting is turned off
+ (default is on), any mmggeett or mmppuutt will transfer all files,
+ and any mmddeelleettee will delete all files.
+
+ When prompting is on, the following commands are available at
+ a prompt:
+
+ aa Answer `yes' to the current file, and automatically
+ answer `yes' to any remaining files for the current
+ command.
+
+ nn Answer `no', and do not transfer the file.
+
+ pp Answer `yes' to the current file, and turn off
+ prompt mode (as is ``prompt off'' had been given).
+
+ qq Terminate the current operation.
+
+ yy Answer `yes', and transfer the file.
+
+ ?? Display a help message.
+
+ Any other reponse will answer `yes' to the current file.
+
+ pprrooxxyy _f_t_p_-_c_o_m_m_a_n_d
+ 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 pprrooxxyy command should be an ooppeenn, to establish the sec-
+ ondary control connection. Enter the command "proxy ?" to
+ see other FTP commands executable on the secondary connec-
+ tion. The following commands behave differently when pref-
+ aced by pprrooxxyy: ooppeenn will not define new macros during the au-
+ to-login process, cclloossee will not erase existing macro defini-
+ tions, ggeett and mmggeett transfer files from the host on the pri-
+ mary control connection to the host on the secondary control
+ connection, and ppuutt, mmppuutt, and aappppeenndd transfer files from the
+ host on the secondary control connection to the host on the
+ primary control connection. Third party file transfers de-
+ pend upon support of the FTP protocol PASV command by the
+ server on the secondary control connection.
+
+ ppuutt _l_o_c_a_l_-_f_i_l_e [_r_e_m_o_t_e_-_f_i_l_e]
+ Store a local file on the remote machine. If _r_e_m_o_t_e_-_f_i_l_e is
+ left unspecified, the local file name is used after process-
+ ing according to any nnttrraannss or nnmmaapp settings in naming the
+ remote file. File transfer uses the current settings for
+ ttyyppee, ffoorrmmaatt, mmooddee, and ssttrruuccttuurree.
+
+ ppwwdd Print the name of the current working directory on the remote
+ machine.
+
+ qquuiitt A synonym for bbyyee.
+
+ qquuoottee _a_r_g_1 _a_r_g_2 _._._.
+ The arguments specified are sent, verbatim, to the remote FTP
+ server.
+
+ rraattee _d_i_r_e_c_t_i_o_n [_m_a_x_i_m_u_m [_i_n_c_r_e_m_e_n_t]]
+ Throttle the maximum transfer rate to _m_a_x_i_m_u_m bytes/second.
+ If _m_a_x_i_m_u_m is 0, disable the throttle.
+
+ _d_i_r_e_c_t_i_o_n may be one of:
+ aallll Both directions.
+ ggeett Incoming transfers.
+ ppuutt Outgoing transfers.
+
+ _m_a_x_i_m_u_m can by modified on the fly by _i_n_c_r_e_m_e_n_t bytes (de-
+ fault: 1024) each time a given signal is received:
+
+ SIGUSR1 Increment _m_a_x_i_m_u_m by _i_n_c_r_e_m_e_n_t bytes.
+
+ SIGUSR2 Decrement _m_a_x_i_m_u_m by _i_n_c_r_e_m_e_n_t bytes. The re-
+ sult must be a positive number.
+
+ If _m_a_x_i_m_u_m is not supplied, the current throttle rates are
+ displayed.
+
+ Note: rraattee is not yet implemented for ascii mode transfers.
+
+ rrccvvbbuuff _s_i_z_e
+ Set the size of the socket receive buffer to _s_i_z_e.
+
+ rreeccvv _r_e_m_o_t_e_-_f_i_l_e [_l_o_c_a_l_-_f_i_l_e]
+ A synonym for ggeett.
+
+ rreeggeett _r_e_m_o_t_e_-_f_i_l_e [_l_o_c_a_l_-_f_i_l_e]
+ rreeggeett acts like ggeett, except that if _l_o_c_a_l_-_f_i_l_e exists and is
+ smaller than _r_e_m_o_t_e_-_f_i_l_e, _l_o_c_a_l_-_f_i_l_e is presumed to be a par-
+ tially transferred copy of _r_e_m_o_t_e_-_f_i_l_e 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.
+
+ rreemmooppttss _c_o_m_m_a_n_d [_c_o_m_m_a_n_d_-_o_p_t_i_o_n_s]
+ Set options on the remote FTP server for _c_o_m_m_a_n_d to _c_o_m_m_a_n_d_-
+ _o_p_t_i_o_n_s (whose absence is handled on a command-specific ba-
+ sis). Remote FTP commands known to support options include:
+ `MLST' (used for MLSD and MLST).
+
+ rreennaammee [_f_r_o_m [_t_o]]
+ Rename the file _f_r_o_m on the remote machine, to the file _t_o.
+
+ rreesseett Clear reply queue. This command re-synchronizes command/re-
+ ply sequencing with the remote FTP server. Resynchronization
+ may be necessary following a violation of the FTP protocol by
+ the remote server.
+
+ rreessttaarrtt _m_a_r_k_e_r
+ Restart the immediately following ggeett or ppuutt at the indicated
+ _m_a_r_k_e_r. On UNIX systems, marker is usually a byte offset in-
+ to the file.
+
+ rrhheellpp [_c_o_m_m_a_n_d_-_n_a_m_e]
+ Request help from the remote FTP server. If a _c_o_m_m_a_n_d_-_n_a_m_e
+ is specified it is supplied to the server as well.
+
+ rrmmddiirr _d_i_r_e_c_t_o_r_y_-_n_a_m_e
+ Delete a directory on the remote machine.
+
+ rrssttaattuuss [_r_e_m_o_t_e_-_f_i_l_e]
+ With no arguments, show status of remote machine. If _r_e_m_o_t_e_-
+ _f_i_l_e is specified, show status of _r_e_m_o_t_e_-_f_i_l_e on remote ma-
+ chine.
+
+ rruunniiqquuee Toggle storing of files on the local system with unique file-
+ names. If a file already exists with a name equal to the
+ target local filename for a ggeett or mmggeett command, a ".1" is
+ appended to the name. If the resulting name matches another
+ existing file, a ".2" is appended to the original name. If
+ this process continues up to ".99", an error message is
+ printed, and the transfer does not take place. The generated
+ unique filename will be reported. Note that rruunniiqquuee will not
+ affect local files generated from a shell command (see be-
+ low). The default value is off.
+
+ sseenndd _l_o_c_a_l_-_f_i_l_e [_r_e_m_o_t_e_-_f_i_l_e]
+ A synonym for ppuutt.
+
+ sseennddppoorrtt Toggle the use of PORT commands. By default, ffttpp will at-
+ tempt to use a PORT command when establishing a connection
+ for each data transfer. The use of PORT commands can prevent
+ delays when performing multiple file transfers. If the PORT
+ command fails, ffttpp will use the default data port. When the
+ use of PORT commands is disabled, no attempt will be made to
+ use PORT commands for each data transfer. This is useful for
+ certain FTP implementations which do ignore PORT commands
+ but, incorrectly, indicate they've been accepted.
+
+ sseett [_o_p_t_i_o_n _v_a_l_u_e]
+ Set _o_p_t_i_o_n to _v_a_l_u_e. If _o_p_t_i_o_n and _v_a_l_u_e are not given, dis-
+ play all of the options and their values. The currently sup-
+ ported options are:
+
+ anonpass Defaults to $FTPANONPASS
+
+ ftp_proxy Defaults to $ftp_proxy.
+
+ http_proxy Defaults to $http_proxy.
+
+ no_proxy Defaults to $no_proxy.
+
+ pager Defaults to $PAGER.
+
+ prompt Defaults to $FTPPROMPT.
+
+ rprompt Defaults to $FTPRPROMPT.
+
+ ssiittee _a_r_g_1 _a_r_g_2 _._._.
+ The arguments specified are sent, verbatim, to the remote FTP
+ server as a SITE command.
+
+ ssiizzee _r_e_m_o_t_e_-_f_i_l_e
+ Return size of _r_e_m_o_t_e_-_f_i_l_e on remote machine.
+
+ ssnnddbbuuff _s_i_z_e
+ Set the size of the socket send buffer to _s_i_z_e.
+
+ ssttaattuuss Show the current status of ffttpp.
+
+ ssttrruucctt _s_t_r_u_c_t_-_n_a_m_e
+ Set the file transfer _s_t_r_u_c_t_u_r_e to _s_t_r_u_c_t_-_n_a_m_e. The default
+ (and only supported) structure is ``file''.
+
+ ssuunniiqquuee Toggle storing of files on remote machine under unique file
+ names. The remote FTP server must support FTP protocol STOU
+ command for successful completion. The remote server will
+ report unique name. Default value is off.
+
+ ssyysstteemm Show the type of operating system running on the remote ma-
+ chine.
+
+ tteenneexx Set the file transfer type to that needed to talk to TENEX
+ machines.
+
+ tthhrroottttllee A synonym for rraattee.
+
+ ttrraaccee Toggle packet tracing.
+
+ ttyyppee [_t_y_p_e_-_n_a_m_e]
+ Set the file transfer ttyyppee to _t_y_p_e_-_n_a_m_e. If no type is spec-
+ ified, the current type is printed. The default type is net-
+ work ASCII.
+
+ uummaasskk [_n_e_w_m_a_s_k]
+ Set the default umask on the remote server to _n_e_w_m_a_s_k. If
+ _n_e_w_m_a_s_k is omitted, the current umask is printed.
+
+ uunnsseett _o_p_t_i_o_n
+ Unset _o_p_t_i_o_n. Refer to sseett for more information.
+
+ uussaaggee _c_o_m_m_a_n_d
+ Print the usage message for _c_o_m_m_a_n_d.
+
+ uusseerr _u_s_e_r_-_n_a_m_e [_p_a_s_s_w_o_r_d [_a_c_c_o_u_n_t]]
+ Identify yourself to the remote FTP server. If the _p_a_s_s_w_o_r_d
+ is not specified and the server requires it, ffttpp will prompt
+ the user for it (after disabling local echo). If an _a_c_c_o_u_n_t
+ field is not specified, and the FTP server requires it, the
+ user will be prompted for it. If an _a_c_c_o_u_n_t field is speci-
+ fied, 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 ffttpp is invoked
+ with ``auto-login'' disabled, this process is done automati-
+ cally on initial connection to the FTP server.
+
+ vveerrbboossee Toggle verbose mode. In verbose mode, all responses from the
+ FTP server are displayed to the user. In addition, if ver-
+ bose is on, when a file transfer completes, statistics re-
+ garding the efficiency of the transfer are reported. By de-
+ fault, verbose is on.
+
+ xxffeerrbbuuff _s_i_z_e
+ Set the size of the socket send and receive buffers to _s_i_z_e.
+
+ ?? [_c_o_m_m_a_n_d]
+ A synonym for hheellpp.
+
+ Command arguments which have embedded spaces may be quoted with quote `"'
+ marks.
+
+ Commands which toggle settings can take an explicit oonn or ooffff argument to
+ force the setting appropriately.
+
+ Commands which take a byte count as an argument (e.g., hhaasshh, rraattee, and
+ xxffeerrbbuuff) support an optional suffix on the argument which changes the in-
+ terpretation of the argument. Supported suffixes are:
+ b Causes no modification. (Optional)
+ k Kilo; multiply the argument by 1024
+ m Mega; multiply the argument by 1048576
+ g Giga; multiply the argument by 1073741824
+
+ If ffttpp receives a SIGINFO (see the ``status'' argument of stty(1)) or
+ SIGQUIT 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.
+
+AAUUTTOO--FFEETTCCHHIINNGG FFIILLEESS
+ In addition to standard commands, this version of ffttpp supports an auto-
+ fetch feature. To enable auto-fetch, simply pass the list of host-
+ names/files on the command line.
+
+ The following formats are valid syntax for an auto-fetch element:
+
+ [user@]host:[path][/]
+ ``Classic'' FTP format.
+
+ If _p_a_t_h contains a glob character and globbing is enabled, (see
+ gglloobb), then the equivalent of `mget path' is performed.
+
+ If the directory component of _p_a_t_h contains no globbing characters,
+ it is stored locally with the name basename (see basename(1)) of
+ ppaatthh, in the current directory. Otherwise, the full remote name is
+ used as the local name, relative to the local root directory.
+
+ ftp://[user[:password]@]host[:port]/path[/][;type=X]
+ An FTP URL, retrieved using the FTP protocol if sseett ffttpp__pprrooxxyy isn't
+ defined. Otherwise, transfer the URL using HTTP via the proxy de-
+ fined in sseett ffttpp__pprrooxxyy. If sseett ffttpp__pprrooxxyy isn't defined and _u_s_e_r is
+ given, login as _u_s_e_r. In this case, use _p_a_s_s_w_o_r_d if supplied, oth-
+ erwise prompt the user for one.
+
+ In order to be compliant with RRFFCC 11773388, ffttpp strips the leading `/'
+ from _p_a_t_h, resulting in a transfer relative from the default login
+ directory of the user. If the _/ directory is required, use a lead-
+ ing path of ``%2F''. If a user's home directory is required (and
+ the remote server supports the syntax), use a leading path of
+ ``%7Euser/''. For example, to retrieve _/_e_t_c_/_m_o_t_d from `localhost'
+ as the user `myname' with the password `mypass', use
+ ``ftp://myname:mypass@localhost/%2fetc/motd''
+
+ If a suffix of `;type=A' or `;type=I' is supplied, then the trans-
+ fer type will take place as ascii or binary (respectively). The
+ default transfer type is binary.
+
+ http://[user[:password]@]host[:port]/path
+ An HTTP URL, retrieved using the HTTP protocol. If sseett hhttttpp__pprrooxxyy
+ is defined, it is used as a URL to an HTTP proxy server. If HTTP
+ authorisation is required to retrieve _p_a_t_h, and `user' (and option-
+ ally `password') is in the URL, use them for the first attempt to
+ authenticate.
+
+ file:///path
+ A local URL, copied from _/_p_a_t_h.
+
+ Unless noted otherwise above, and --oo _o_u_t_p_u_t is not given, the file is
+ stored in the current directory as the basename(1) of _p_a_t_h.
+
+ If a classic format or an FTP URL format has a trailing `/' or an empty
+ _p_a_t_h component, then ffttpp will connect to the site and ccdd to the directory
+ given as the path, and leave the user in interactive mode ready for fur-
+ ther input. This will not work if sseett ffttpp__pprrooxxyy is being used.
+
+ Direct HTTP transfers use HTTP 1.1. Proxied FTP and HTTP transfers use
+ HTTP 1.0.
+
+ If --RR is given, all auto-fetches that don't go via the FTP or HTTP prox-
+ ies will be restarted. For FTP, this is implemented by using rreeggeett in-
+ stead of ggeett. For HTTP, this is implemented by using the `Range: bytes='
+ HTTP/1.1 directive.
+
+ If WWW or proxy WWW authentication is required, you will be prompted to
+ enter a username and password to authenticate with.
+
+ When specifying IPv6 numeric addresses in a URL, you need to surround the
+ address in square brackets. E.g.: ``ftp://[::1]:21/''. This is because
+ colons are used in IPv6 numeric address as well as being the separator
+ for the port number.
+
+AABBOORRTTIINNGG AA FFIILLEE TTRRAANNSSFFEERR
+ 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 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 ABOR
+ processing. If the remote server does not support the ABOR command, the
+ prompt will not appear until the remote server has completed sending the
+ requested file.
+
+ If the terminal interrupt key sequence is used whilst ffttpp is awaiting a
+ reply from the remote server for the ABOR processing, then the connection
+ will be closed. This is different from the traditional behaviour (which
+ ignores the terminal interrupt during this phase), but is considered more
+ useful.
+
+FFIILLEE NNAAMMIINNGG CCOONNVVEENNTTIIOONNSS
+ Files specified as arguments to ffttpp commands are processed according to
+ the following rules.
+
+ 1. If the file name `--' is specified, the _s_t_d_i_n (for reading) or _s_t_d_o_u_t
+ (for writing) is used.
+
+ 2. If the first character of the file name is `|', the remainder of the
+ argument is interpreted as a shell command. ffttpp then forks a shell,
+ using popen(3) with the argument supplied, and reads (writes) from
+ the stdout (stdin). If the shell command includes spaces, the argu-
+ ment must be quoted; e.g. ``"| ls -lt"''. A particularly useful
+ example of this mechanism is: ``dir "" |more''.
+
+ 3. Failing the above checks, if ``globbing'' is enabled, local file
+ names are expanded according to the rules used in the csh(1); c.f.
+ the gglloobb command. If the ffttpp command expects a single local file
+ (e.g. ppuutt), only the first filename generated by the "globbing" op-
+ eration is used.
+
+ 4. For mmggeett commands and ggeett commands with unspecified local file
+ names, the local filename is the remote filename, which may be al-
+ tered by a ccaassee, nnttrraannss, or nnmmaapp setting. The resulting filename
+ may then be altered if rruunniiqquuee is on.
+
+ 5. For mmppuutt commands and ppuutt commands with unspecified remote file
+ names, the remote filename is the local filename, which may be al-
+ tered by a nnttrraannss or nnmmaapp setting. The resulting filename may then
+ be altered by the remote server if ssuunniiqquuee is on.
+
+FFIILLEE TTRRAANNSSFFEERR PPAARRAAMMEETTEERRSS
+ The FTP specification specifies many parameters which may affect a file
+ transfer. The ttyyppee may be one of ``ascii'', ``image'' (binary),
+ ``ebcdic'', and ``local byte size'' (for PDP-10's and PDP-20's mostly).
+ ffttpp supports the ascii and image types of file transfer, plus local byte
+ size 8 for tteenneexx mode transfers.
+
+ ffttpp supports only the default values for the remaining file transfer pa-
+ rameters: mmooddee, ffoorrmm, and ssttrruucctt.
+
+TTHHEE ..nneettrrcc FFIILLEE
+ The _._n_e_t_r_c file contains login and initialization information used by the
+ auto-login process. It resides in the user's home directory, unless
+ overridden with the --NN _n_e_t_r_c option, or specified in the NETRC environ-
+ ment variable. The following tokens are recognized; they may be separat-
+ ed by spaces, tabs, or new-lines:
+
+ mmaacchhiinnee _n_a_m_e
+ Identify a remote machine _n_a_m_e. The auto-login process search-
+ es the _._n_e_t_r_c file for a mmaacchhiinnee token that matches the remote
+ machine specified on the ffttpp command line or as an ooppeenn command
+ argument. Once a match is made, the subsequent _._n_e_t_r_c tokens
+ are processed, stopping when the end of file is reached or an-
+ other mmaacchhiinnee or a ddeeffaauulltt token is encountered.
+
+ ddeeffaauulltt This is the same as mmaacchhiinnee _n_a_m_e except that ddeeffaauulltt matches
+ any name. There can be only one ddeeffaauulltt token, and it must be
+ after all mmaacchhiinnee tokens. This is normally used as:
+
+ default login anonymous password user@site
+
+ thereby giving the user an automatic anonymous FTP login to ma-
+ chines not specified in _._n_e_t_r_c. This can be overridden by us-
+ ing the --nn flag to disable auto-login.
+
+ llooggiinn _n_a_m_e
+ Identify a user on the remote machine. If this token is pre-
+ sent, the auto-login process will initiate a login using the
+ specified _n_a_m_e.
+
+ ppaasssswwoorrdd _s_t_r_i_n_g
+ 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 _._n_e_t_r_c file for any user other
+ than _a_n_o_n_y_m_o_u_s, ffttpp will abort the auto-login process if the
+ _._n_e_t_r_c is readable by anyone besides the user.
+
+ aaccccoouunntt _s_t_r_i_n_g
+ Supply an additional account password. If this token is pre-
+ sent, 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 ACCT command if it
+ does not.
+
+ mmaaccddeeff _n_a_m_e
+ Define a macro. This token functions like the ffttpp mmaaccddeeff com-
+ mand functions. A macro is defined with the specified name;
+ its contents begin with the next _._n_e_t_r_c line and continue until
+ a blank line (consecutive new-line characters) is encountered.
+ If a macro named iinniitt is defined, it is automatically executed
+ as the last step in the auto-login process.
+
+CCOOMMMMAANNDD LLIINNEE EEDDIITTIINNGG
+ ffttpp supports interactive command line editing, via the editline(3) li-
+ brary. It is enabled with the eeddiitt 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.
+
+ The editline(3) library is configured with a _._e_d_i_t_r_c file - refer to
+ editrc(5) for more information.
+
+ An extra key binding is available to ffttpp to provide context sensitive
+ command and filename completion (including remote file completion). To
+ use this, bind a key to the editline(3) command ffttpp--ccoommpplleettee. By de-
+ fault, this is bound to the TAB key.
+
+CCOOMMMMAANNDD LLIINNEE PPRROOMMPPTT
+ By default, ffttpp displays a command line prompt of ``ftp>'' to the user.
+ This can be changed with the sseett pprroommpptt command.
+
+ A prompt can be displayed on the right side of the screen (after the com-
+ mand input) with the sseett rrpprroommpptt command.
+
+ The following formatting sequences are replaced by the given information:
+
+ %/ The current remote working directory.
+
+ %c[[0]_n], %.[[0]_n]
+ The trailing component of the current remote working directo-
+ ry, or _n trailing components if a digit _n is given. If _n be-
+ gins with `0', the number of skipped components precede the
+ trailing component(s) in the format ``/_<_s_k_i_p_p_e_d_>trailing''
+ (for `%c') or ``...trailing'' (for `%.').
+
+ %M The remote host name.
+
+ %m The remote host name, up to the first `.'.
+
+ %n The remote user name.
+
+ %% A single `%'.
+
+EENNVVIIRROONNMMEENNTT
+ ffttpp uses the following environment variables.
+
+ FTPANONPASS Password to send in an anonymous FTP transfer. Defaults
+ to ```whoami`@''.
+
+ FTPMODE Overrides the default operation mode. Support values are:
+
+ active active mode FTP only
+
+ auto automatic determination of passive or active
+ (this is the default)
+
+ gate gate-ftp mode
+
+ passive passive mode FTP only
+
+ FTPPROMPT Command-line prompt to use. Defaults to ``ftp>''. Refer
+ to _C_O_M_M_A_N_D _L_I_N_E _P_R_O_M_P_T for more information.
+
+ FTPRPROMPT Command-line right side prompt to use. Defaults to ``''.
+ Refer to _C_O_M_M_A_N_D _L_I_N_E _P_R_O_M_P_T for more information.
+
+ FTPSERVER Host to use as gate-ftp server when ggaattee is enabled.
+
+ FTPSERVERPORT Port to use when connecting to gate-ftp server when ggaattee
+ is enabled. Default is port returned by a ggeettsseerrvvbbyynnaammee()
+ lookup of ``ftpgate/tcp''.
+
+ HOME For default location of a _._n_e_t_r_c file, if one exists.
+
+ NETRC An alternate location of the _._n_e_t_r_c file.
+
+ PAGER Used by various commands to display files. Defaults to
+ more(1) if empty or not set.
+
+ SHELL For default shell.
+
+ ftp_proxy URL of FTP proxy to use when making FTP URL requests (if
+ not defined, use the standard FTP protocol).
+
+ _N_O_T_E: this is not used for interactive sessions, only for
+ command-line fetches.
+
+ http_proxy URL of HTTP proxy to use when making HTTP URL requests.
+ If proxy authentication is required and there is a user-
+ name and password in this URL, they will automatically be
+ used in the first attempt to authenticate to the proxy.
+
+ Note that the use of a username and password in ftp_proxy
+ and http_proxy may be incompatible with other programs
+ that use it (such as lynx(1)).
+
+ _N_O_T_E: this is not used for interactive sessions, only for
+ command-line fetches.
+
+ no_proxy A space or comma separated list of hosts (or domains) for
+ which proxying is not to be used. Each entry may have an
+ optional trailing ":port", which restricts the matching to
+ connections to that port.
+
+SSEEEE AALLSSOO
+ getservbyname(3), editrc(5), services(5), ftpd(8)
+
+SSTTAANNDDAARRDDSS
+ ffttpp attempts to be compliant with RRFFCC 995599, RRFFCC 11112233, RRFFCC 11773388, RRFFCC 22006688,
+ RRFFCC 22338899, RRFFCC 22442288, RRFFCC 22773322, and ddrraafftt--iieettff--ffttppeexxtt--mmllsstt--1111.
+
+HHIISSTTOORRYY
+ The ffttpp command appeared in 4.2BSD.
+
+ Various features such as command line editing, context sensitive command
+ and file completion, dynamic progress bar, automatic fetching of files
+ and URLs, modification time preservation, transfer rate throttling, con-
+ figurable command line prompt, and other enhancements over the standard
+ BSD ffttpp were implemented in NetBSD 1.3 and later releases by Luke Mewburn
+ <lukem@netbsd.org>.
+
+ IPv6 support was added by the WIDE/KAME project (but may not be present
+ in all non-NetBSD versions of this program, depending if the operating
+ system supports IPv6 in a similar manner to KAME).
+
+BBUUGGSS
+ Correct execution of many commands depends upon proper behavior by the
+ remote server.
+
+ An error in the treatment of carriage returns in the 4.2BSD ascii-mode
+ transfer code has been corrected. This correction may result in incor-
+ rect transfers of binary files to and from 4.2BSD servers using the ascii
+ type. Avoid this problem by using the binary image type.
+
+ ffttpp assumes that all IPv4 mapped addresses (IPv6 addresses with a form
+ like ::ffff:10.1.1.1) indicate IPv4 destinations which can be handled by
+ AF_INET sockets. However, in certain IPv6 network configurations, this
+ assumption is not true. In such an environment, IPv4 mapped addresses
+ must be passed to AF_INET6 sockets directly. For example, if your site
+ uses a SIIT translator for IPv6-to-IPv4 translation, ffttpp is unable to
+ support your configuration.
+
+NetBSD 1.6_BETA1 May 18, 2002 16
diff --git a/contrib/lukemftp/src/ftp_var.h b/contrib/lukemftp/src/ftp_var.h
index 2e4ed1ce37a5..e06076c41c76 100644
--- a/contrib/lukemftp/src/ftp_var.h
+++ b/contrib/lukemftp/src/ftp_var.h
@@ -1,7 +1,7 @@
-/* $NetBSD: ftp_var.h,v 1.58 2000/08/01 22:47:28 lukem Exp $ */
+/* $NetBSD: ftp_var.h,v 1.62 2001/12/26 09:40:16 lukem Exp $ */
/*-
- * Copyright (c) 1996-2000 The NetBSD Foundation, Inc.
+ * Copyright (c) 1996-2001 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
@@ -308,7 +308,9 @@ GLOBAL int macnum; /* number of defined macros */
GLOBAL struct macel macros[16];
GLOBAL char macbuf[4096];
-GLOBAL char home[MAXPATHLEN]; /* home directory (for lcd) */
+GLOBAL char *localhome; /* local home directory */
+GLOBAL char *localname; /* local user name */
+GLOBAL char netrc[MAXPATHLEN]; /* path to .netrc file */
GLOBAL char reply_string[BUFSIZ]; /* first line of previous reply */
GLOBAL void (*reply_callback)(const char *);
/*
@@ -325,8 +327,6 @@ GLOBAL int data;
extern struct cmd cmdtab[];
extern struct option optiontab[];
-extern char *__progname; /* from crt0.o */
-
#define EMPTYSTRING(x) ((x) == NULL || (*(x) == '\0'))
#define FREEPTR(x) if ((x) != NULL) { free(x); (x) = NULL; }
@@ -344,6 +344,15 @@ extern char *__progname; /* from crt0.o */
# define ULLT unsigned long
# define STRTOLL(x,y,z) strtol(x,y,z)
#else
+#if HAVE_PRINTF_QD
+# define LLF "%qd"
+# define LLFP(x) "%" x "qd"
+# define LLT long long
+# define ULLF "%qu"
+# define ULLFP(x) "%" x "qu"
+# define ULLT unsigned long long
+# define STRTOLL(x,y,z) strtoll(x,y,z)
+#else
# define LLF "%lld"
# define LLFP(x) "%" x "lld"
# define LLT long long
@@ -352,3 +361,4 @@ extern char *__progname; /* from crt0.o */
# define ULLT unsigned long long
# define STRTOLL(x,y,z) strtoll(x,y,z)
#endif
+#endif
diff --git a/contrib/lukemftp/src/main.c b/contrib/lukemftp/src/main.c
index 3fae56e64710..cc8dcfb4403c 100644
--- a/contrib/lukemftp/src/main.c
+++ b/contrib/lukemftp/src/main.c
@@ -1,7 +1,7 @@
-/* $NetBSD: main.c,v 1.73 2000/07/18 07:16:56 lukem Exp $ */
+/* $NetBSD: main.c,v 1.82 2002/06/05 13:51:54 lukem Exp $ */
/*-
- * Copyright (c) 1996-2000 The NetBSD Foundation, Inc.
+ * Copyright (c) 1996-2002 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
@@ -112,8 +112,6 @@
#define NO_PROXY "no_proxy" /* env var with list of non-proxied
* hosts, comma or space separated */
-char * __progname;
-
static void setupoption(char *, char *, char *);
int main(int, char *[]);
@@ -121,15 +119,14 @@ int
main(int argc, char *argv[])
{
int ch, rval;
- struct passwd *pw = NULL;
+ struct passwd *pw;
char *cp, *ep, *anonuser, *anonpass, *upload_path;
int dumbterm, s, len, isupload;
- __progname = strrchr(argv[0], '/');
- if (__progname == NULL)
- __progname = argv[0];
- else
- __progname++;
+#if 0 /* XXX */
+ setlocale(LC_ALL, "");
+#endif
+ setprogname(argv[0]);
ftpport = "ftp";
httpport = "http";
@@ -173,6 +170,11 @@ main(int argc, char *argv[])
reply_callback = NULL;
family = AF_UNSPEC;
+ netrc[0] = '\0';
+ cp = getenv("NETRC");
+ if (cp != NULL && strlcpy(netrc, cp, sizeof(netrc)) >= sizeof(netrc))
+ errx(1, "$NETRC `%s': %s", cp, strerror(ENAMETOOLONG));
+
/*
* Get the default socket buffer sizes if we don't already have them.
* It doesn't matter which socket we do this to, because on the first
@@ -218,10 +220,10 @@ main(int argc, char *argv[])
warnx("unknown $FTPMODE '%s'; using defaults", cp);
}
- if (strcmp(__progname, "pftp") == 0) {
+ if (strcmp(getprogname(), "pftp") == 0) {
passivemode = 1;
activefallback = 0;
- } else if (strcmp(__progname, "gate-ftp") == 0)
+ } else if (strcmp(getprogname(), "gate-ftp") == 0)
gatemode = 1;
gateserver = getenv("FTPSERVER");
@@ -256,14 +258,18 @@ main(int argc, char *argv[])
}
}
- while ((ch = getopt(argc, argv, "46Aadefgino:pP:r:RtT:u:vV")) != -1) {
+ while ((ch = getopt(argc, argv, "46AadefginN:o:pP:r:RtT:u:vV")) != -1) {
switch (ch) {
case '4':
family = AF_INET;
break;
case '6':
+#ifdef INET6
family = AF_INET6;
+#else
+ warnx("INET6 support is not available; ignoring -6");
+#endif
break;
case 'A':
@@ -302,6 +308,13 @@ main(int argc, char *argv[])
autologin = 0;
break;
+ case 'N':
+ if (strlcpy(netrc, optarg, sizeof(netrc))
+ >= sizeof(netrc))
+ errx(1, "%s: %s", optarg,
+ strerror(ENAMETOOLONG));
+ break;
+
case 'o':
outfile = optarg;
if (strcmp(outfile, "-") == 0)
@@ -387,21 +400,38 @@ main(int argc, char *argv[])
proxy = 0; /* proxy not active */
crflag = 1; /* strip c.r. on ascii gets */
sendport = -1; /* not using ports */
+
/*
- * Set up the home directory in case we're globbing.
+ * Cache the user name and home directory.
*/
+ localhome = NULL;
+ localname = NULL;
+ anonuser = "anonymous";
+ cp = getenv("HOME");
+ if (! EMPTYSTRING(cp))
+ localhome = xstrdup(cp);
+ pw = NULL;
cp = getlogin();
if (cp != NULL)
pw = getpwnam(cp);
if (pw == NULL)
pw = getpwuid(getuid());
if (pw != NULL) {
- (void)strlcpy(home, pw->pw_dir, sizeof(home));
- anonuser = pw->pw_name;
- } else {
- (void)strlcpy(home, "/", sizeof(home));
- anonuser = "anonymous";
+ if (localhome == NULL && !EMPTYSTRING(pw->pw_dir))
+ localhome = xstrdup(pw->pw_dir);
+ localname = xstrdup(pw->pw_name);
+ anonuser = localname;
}
+ if (netrc[0] == '\0' && localhome != NULL) {
+ if (strlcpy(netrc, localhome, sizeof(netrc)) >= sizeof(netrc) ||
+ strlcat(netrc, "/.netrc", sizeof(netrc)) >= sizeof(netrc)) {
+ warnx("%s/.netrc: %s", localhome,
+ strerror(ENAMETOOLONG));
+ netrc[0] = '\0';
+ }
+ }
+ if (localhome == NULL)
+ localhome = xstrdup("/");
/*
* Every anonymous FTP server I've encountered will accept the
@@ -467,7 +497,8 @@ main(int argc, char *argv[])
user = host;
host = cp + 1;
}
- xargv[0] = __progname;
+ /* XXX discards const */
+ xargv[0] = (char *)getprogname();
xargv[1] = host;
xargv[2] = argv[1];
xargv[3] = NULL;
@@ -633,7 +664,7 @@ cmdscanner(void)
* such commands as invalid.
*/
if (strchr(margv[0], ':') != NULL ||
- el_parse(el, margc, margv) != 0)
+ el_parse(el, margc, (const char **)margv) != 0)
#endif /* !NO_EDITCOMPLETE */
fputs("?Invalid command.\n", ttyout);
continue;
@@ -643,6 +674,7 @@ cmdscanner(void)
continue;
}
confirmrest = 0;
+ margv[0] = c->c_name;
(*c->c_handler)(margc, margv);
if (bell && c->c_bell)
(void)putc('\007', ttyout);
@@ -908,7 +940,7 @@ help(int argc, char *argv[])
cmd, arg);
else {
if (isusage) {
- nargv[0] = arg;
+ nargv[0] = c->c_name;
(*c->c_handler)(0, nargv);
} else
fprintf(ttyout, "%-*s\t%s\n", HELPINDENT,
@@ -964,11 +996,13 @@ setupoption(char *name, char *value, char *defaultvalue)
void
usage(void)
{
+ const char *progname = getprogname();
+
(void)fprintf(stderr,
-"usage: %s [-46AadefginpRtvV] [-o outfile] [-P port] [-r retry]\n"
+"usage: %s [-46AadefginpRtvV] [-N netrc] [-o outfile] [-P port] [-r retry]\n"
" [-T dir,max[,inc][[user@]host [port]]] [host:path[/]]\n"
" [file:///file] [ftp://[user[:pass]@]host[:port]/path[/]]\n"
" [http://[user[:pass]@]host[:port]/path] [...]\n"
-" %s -u url file [...]\n", __progname, __progname);
+" %s -u url file [...]\n", progname, progname);
exit(1);
}
diff --git a/contrib/lukemftp/src/ruserpass.c b/contrib/lukemftp/src/ruserpass.c
index 1b2bf843d274..0eadfc85c7ca 100644
--- a/contrib/lukemftp/src/ruserpass.c
+++ b/contrib/lukemftp/src/ruserpass.c
@@ -1,4 +1,4 @@
-/* $NetBSD: ruserpass.c,v 1.27 2000/07/18 06:47:02 lukem Exp $ */
+/* $NetBSD: ruserpass.c,v 1.28 2000/11/15 00:11:04 lukem Exp $ */
/*
* Copyright (c) 1985, 1993, 1994
@@ -66,25 +66,19 @@ static struct toktab {
int
ruserpass(const char *host, const char **aname, const char **apass,
- const char **aacct)
+ const char **aacct)
{
- char *hdir, buf[BUFSIZ], *tmp;
+ char *tmp;
char myname[MAXHOSTNAMELEN + 1], *mydomain;
int t, i, c, usedefault = 0;
struct stat stb;
- hdir = getenv("HOME");
- if (hdir == NULL)
- hdir = ".";
- if (strlcpy(buf, hdir, sizeof(buf)) >= sizeof(buf) ||
- strlcat(buf, "/.netrc", sizeof(buf)) >= sizeof(buf)) {
- warnx("%s/.netrc: %s", hdir, strerror(ENAMETOOLONG));
+ if (netrc[0] == '\0')
return (0);
- }
- cfile = fopen(buf, "r");
+ cfile = fopen(netrc, "r");
if (cfile == NULL) {
if (errno != ENOENT)
- warn("%s", buf);
+ warn("%s", netrc);
return (0);
}
if (gethostname(myname, sizeof(myname)) < 0)
diff --git a/contrib/lukemftp/src/util.c b/contrib/lukemftp/src/util.c
index d1ce22646b28..aa4f73a04f50 100644
--- a/contrib/lukemftp/src/util.c
+++ b/contrib/lukemftp/src/util.c
@@ -1,7 +1,7 @@
-/* $NetBSD: util.c,v 1.102 2000/09/08 11:54:53 lukem Exp $ */
+/* $NetBSD: util.c,v 1.107 2002/06/05 10:20:50 lukem Exp $ */
/*-
- * Copyright (c) 1997-2000 The NetBSD Foundation, Inc.
+ * Copyright (c) 1997-2002 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
@@ -340,7 +340,6 @@ ftp_login(const char *host, const char *user, const char *pass)
{
char tmp[80];
const char *acct;
- struct passwd *pw;
int n, aflag, rval, freeuser, freepass, freeacct;
acct = NULL;
@@ -371,12 +370,8 @@ ftp_login(const char *host, const char *user, const char *pass)
}
while (user == NULL) {
- const char *myname = getlogin();
-
- if (myname == NULL && (pw = getpwuid(getuid())) != NULL)
- myname = pw->pw_name;
- if (myname)
- fprintf(ttyout, "Name (%s:%s): ", host, myname);
+ if (localname)
+ fprintf(ttyout, "Name (%s:%s): ", host, localname);
else
fprintf(ttyout, "Name (%s): ", host);
*tmp = '\0';
@@ -389,7 +384,7 @@ ftp_login(const char *host, const char *user, const char *pass)
tmp[strlen(tmp) - 1] = '\0';
freeuser = 0;
if (*tmp == '\0')
- user = myname;
+ user = localname;
else
user = tmp;
}
@@ -502,7 +497,7 @@ remglob(char *argv[], int doswitch, char **errbuf)
static char buf[MAXPATHLEN];
static FILE *ftemp = NULL;
static char **args;
- int oldverbose, oldhash, fd, len;
+ int oldverbose, oldhash, oldprogress, fd, len;
char *cp, *mode;
if (!mflag || !connected) {
@@ -536,7 +531,9 @@ remglob(char *argv[], int doswitch, char **errbuf)
oldverbose = verbose;
verbose = (errbuf != NULL) ? -1 : 0;
oldhash = hash;
+ oldprogress = progress;
hash = 0;
+ progress = 0;
if (doswitch)
pswitch(!proxy);
for (mode = "w"; *++argv != NULL; mode = "a")
@@ -549,6 +546,7 @@ remglob(char *argv[], int doswitch, char **errbuf)
pswitch(!proxy);
verbose = oldverbose;
hash = oldhash;
+ progress = oldprogress;
ftemp = fopen(temp, "r");
(void)unlink(temp);
if (ftemp == NULL) {
@@ -872,9 +870,9 @@ progressmeter(int flag)
lastsize = restart_point;
}
#ifndef NO_PROGRESS
- len = 0;
- if (!progress || filesize <= 0)
+ if (!progress)
return;
+ len = 0;
/*
* print progress bar only if we are foreground process.
@@ -891,20 +889,23 @@ progressmeter(int flag)
wait.tv_sec = 0;
}
- ratio = (int)((double)cursize * 100.0 / (double)filesize);
- ratio = MAX(ratio, 0);
- ratio = MIN(ratio, 100);
- len += snprintf(buf + len, BUFLEFT, "\r%3d%% ", ratio);
+ len += snprintf(buf + len, BUFLEFT, "\r");
+ if (filesize > 0) {
+ ratio = (int)((double)cursize * 100.0 / (double)filesize);
+ ratio = MAX(ratio, 0);
+ ratio = MIN(ratio, 100);
+ len += snprintf(buf + len, BUFLEFT, "%3d%% ", ratio);
/*
* calculate the length of the `*' bar, ensuring that
* the number of stars won't exceed the buffer size
*/
- barlength = MIN(sizeof(buf) - 1, ttywidth) - BAROVERHEAD;
- if (barlength > 0) {
- i = barlength * ratio / 100;
- len += snprintf(buf + len, BUFLEFT,
- "|%.*s%*s|", i, stars, barlength - i, "");
+ barlength = MIN(sizeof(buf) - 1, ttywidth) - BAROVERHEAD;
+ if (barlength > 0) {
+ i = barlength * ratio / 100;
+ len += snprintf(buf + len, BUFLEFT,
+ "|%.*s%*s|", i, stars, barlength - i, "");
+ }
}
abbrevsize = cursize;
@@ -932,24 +933,39 @@ progressmeter(int flag)
(int)((bytespersec % 1024) * 100 / 1024),
prefixes[i]);
- if (bytes <= 0 || elapsed <= 0.0 || cursize > filesize) {
- len += snprintf(buf + len, BUFLEFT, " --:-- ETA");
- } else if (wait.tv_sec >= STALLTIME) {
- len += snprintf(buf + len, BUFLEFT, " - stalled -");
- } else {
- remaining = (int)
- ((filesize - restart_point) / (bytes / elapsed) - elapsed);
- if (remaining >= 100 * SECSPERHOUR)
+ if (filesize > 0) {
+ if (bytes <= 0 || elapsed <= 0.0 || cursize > filesize) {
len += snprintf(buf + len, BUFLEFT, " --:-- ETA");
- else {
- i = remaining / SECSPERHOUR;
+ } else if (flag == 1) {
+ i = elapsed / SECSPERHOUR;
if (i)
len += snprintf(buf + len, BUFLEFT, "%2d:", i);
else
len += snprintf(buf + len, BUFLEFT, " ");
- i = remaining % SECSPERHOUR;
+ i = (int)elapsed % SECSPERHOUR;
len += snprintf(buf + len, BUFLEFT,
- "%02d:%02d ETA", i / 60, i % 60);
+ "%02d:%02d ", i / 60, i % 60);
+ } else if (wait.tv_sec >= STALLTIME) {
+ len += snprintf(buf + len, BUFLEFT, " - stalled -");
+ } else {
+ remaining = (int)
+ ((filesize - restart_point) / (bytes / elapsed) -
+ elapsed);
+ if (remaining >= 100 * SECSPERHOUR)
+ len += snprintf(buf + len, BUFLEFT,
+ " --:-- ETA");
+ else {
+ i = remaining / SECSPERHOUR;
+ if (i)
+ len += snprintf(buf + len, BUFLEFT,
+ "%2d:", i);
+ else
+ len += snprintf(buf + len, BUFLEFT,
+ " ");
+ i = remaining % SECSPERHOUR;
+ len += snprintf(buf + len, BUFLEFT,
+ "%02d:%02d ETA", i / 60, i % 60);
+ }
}
}
if (flag == 1)
@@ -1166,7 +1182,7 @@ controlediting(void)
HistEvent ev;
int editmode;
- el = el_init(__progname, stdin, ttyout, stderr);
+ el = el_init(getprogname(), stdin, ttyout, stderr);
/* init editline */
hist = history_init(); /* init the builtin history */
history(hist, &ev, H_SETSIZE, 100);/* remember 100 events */
diff --git a/contrib/lukemftp/src/version.h b/contrib/lukemftp/src/version.h
index 91c93098d57e..a47540d86b02 100644
--- a/contrib/lukemftp/src/version.h
+++ b/contrib/lukemftp/src/version.h
@@ -1,6 +1,6 @@
-/* $NetBSD: version.h,v 1.21 2000/09/28 12:29:24 lukem Exp $ */
+/* $NetBSD: version.h,v 1.29 2002/06/05 10:20:51 lukem Exp $ */
/*-
- * Copyright (c) 1999, 2000 The NetBSD Foundation, Inc.
+ * Copyright (c) 1999-2002 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
@@ -40,5 +40,5 @@
#endif
#ifndef FTP_VERSION
-#define FTP_VERSION "20000928"
+#define FTP_VERSION "20020605"
#endif