freebsd-dev/contrib/lukemftp/diffout

3501 lines
122 KiB
Plaintext
Raw Normal View History

diff -Nru src/CVS/Entries /home/spock/ftp/CVS/Entries
--- src/CVS/Entries Thu Jan 30 11:00:13 2003
+++ /home/spock/ftp/CVS/Entries Thu Jun 12 02:02:10 2003
@@ -1,16 +1,17 @@
-/Makefile.in/1.1.1.1/Thu Jul 19 16:26:12 2001//
-/cmds.c/1.1.1.2/Sat Jun 15 09:40:32 2002//
-/cmdtab.c/1.1.1.2/Sat Jun 15 09:40:33 2002//
-/complete.c/1.1.1.1/Thu Jul 19 16:26:13 2001//
-/domacro.c/1.1.1.2/Sat Jun 15 09:40:33 2002//
-/extern.h/1.1.1.2/Sat Jun 15 09:40:33 2002//
-/fetch.c/1.1.1.3/Sat Jun 15 09:40:34 2002//
-/ftp.1/1.1.1.3/Sat Jun 15 09:40:35 2002//
-/ftp.c/1.1.1.3/Sat Jun 15 09:40:36 2002//
-/ftp.cat1/1.1.1.1/Sat Jun 15 09:40:31 2002//
-/ftp_var.h/1.1.1.3/Sat Jun 15 09:40:36 2002//
-/main.c/1.1.1.3/Sat Jun 15 09:40:36 2002//
-/ruserpass.c/1.1.1.2/Sat Jun 15 09:40:36 2002//
-/util.c/1.1.1.2/Sat Jun 15 09:40:37 2002//
-/version.h/1.1.1.2/Sat Jun 15 09:40:37 2002//
+/Makefile/1.26/Tue Jan 21 16:08:06 2003//
+/cmds.c/1.100/Sat Nov 30 03:10:55 2002//
+/cmdtab.c/1.40/Mon Jul 29 04:24:47 2002//
+/complete.c/1.38/Mon May 1 10:35:17 2000//
+/domacro.c/1.19/Fri Feb 1 05:04:43 2002//
+/extern.h/1.61/Tue Jan 21 16:08:07 2003//
+/fetch.c/1.141/Wed May 14 14:31:00 2003//
+/ftp.1/1.94/Wed May 14 14:31:00 2003//
+/ftp.c/1.120/Wed Jun 5 10:20:49 2002//
+/ftp_var.h/1.64/Tue Jan 21 16:08:07 2003//
+/main.c/1.84/Wed May 14 14:31:00 2003//
+/progressbar.c/1.3/Fri Feb 28 09:53:49 2003//
+/progressbar.h/1.3/Fri Feb 28 09:53:49 2003//
+/ruserpass.c/1.28/Wed Nov 15 00:11:04 2000//
+/util.c/1.111/Fri Feb 28 09:54:51 2003//
+/version.h/1.30/Fri Feb 28 09:54:20 2003//
D
diff -Nru src/CVS/Repository /home/spock/ftp/CVS/Repository
--- src/CVS/Repository Thu Jan 30 11:00:13 2003
+++ /home/spock/ftp/CVS/Repository Thu Jun 12 02:02:10 2003
@@ -1 +1 @@
-src/contrib/lukemftp/src
+src/usr.bin/ftp
diff -Nru src/CVS/Root /home/spock/ftp/CVS/Root
--- src/CVS/Root Thu Jan 30 11:00:13 2003
+++ /home/spock/ftp/CVS/Root Thu Jun 12 02:02:09 2003
@@ -1 +1 @@
-spock@current:/cvs/ncvs
+:pserver:anoncvs@anoncvs.netbsd.org:/cvsroot
diff -Nru src/Makefile /home/spock/ftp/Makefile
--- src/Makefile Wed Dec 31 19:00:00 1969
+++ /home/spock/ftp/Makefile Thu Jun 12 02:02:10 2003
@@ -0,0 +1,26 @@
+# $NetBSD: Makefile,v 1.26 2003/01/21 16:08:06 jhawk Exp $
+# from: @(#)Makefile 8.2 (Berkeley) 4/3/94
+
+PROG= ftp
+SRCS= cmds.c cmdtab.c complete.c domacro.c fetch.c ftp.c main.c \
+ progressbar.c ruserpass.c util.c
+
+# Uncomment the following to provide defaults for gate-ftp operation
+#
+#CPPFLAGS+=-DGATE_SERVER=\"ftp-gw.host\" # -DGATE_PORT=21
+
+.if defined(SMALLPROG)
+CPPFLAGS+=-DNO_EDITCOMPLETE -DNO_ABOUT
+.else
+LDADD+= -ledit -ltermcap
+DPADD+= ${LIBEDIT} ${LIBTERMCAP}
+.endif
+
+.if !defined(SMALLPROG) || defined(SMALLPROG_INET6)
+CPPFLAGS+= -DINET6
+.endif
+
+cmds.o fetch.o: version.h
+main.o: ftp_var.h
+
+.include <bsd.prog.mk>
diff -Nru src/Makefile.in /home/spock/ftp/Makefile.in
--- src/Makefile.in Thu Jul 19 12:26:12 2001
+++ /home/spock/ftp/Makefile.in Wed Dec 31 19:00:00 1969
@@ -1,43 +0,0 @@
-#
-# $Id: Makefile.in,v 1.8 2000/08/08 07:04:27 lukem Exp $
-#
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-SHELL = /bin/sh
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-bindir = @bindir@
-mandir = @mandir@
-transform = @program_transform_name@
-
-mandircat1 = ${mandir}/cat1
-
-CC = @CC@
-CFLAGS = -I${srcdir} -I${srcdir}/.. -I. -I.. @INCLUDES@ @CFLAGS@
-LIBS = @LIBS@
-LDFLAGS = @LDFLAGS@
-
-INSTALL = @INSTALL@
-
-PROG = ftp
-OBJS = cmds.o cmdtab.o complete.o domacro.o fetch.o ftp.o main.o \
- ruserpass.o util.o
-
-all: ${PROG}
-
-install: all
- -mkdir -p ${bindir}
- ${INSTALL} -m 555 ${PROG} ${bindir}/`echo ${PROG}|sed '$(transform)'`
- -mkdir -p ${mandircat1}
- ${INSTALL} -m 444 ${srcdir}/${PROG}.cat1 ${mandircat1}/`echo ${PROG}|sed '$(transform)'`.1
-
-${PROG}: ${OBJS} @LIBDEPENDS@
- ${CC} ${CFLAGS} ${LDFLAGS} -o ${PROG} ${OBJS} ${LIBS}
-
-clean:
- rm -f core ${PROG} ${OBJS}
-
-distclean: clean
- rm -f Makefile
diff -Nru src/cmds.c /home/spock/ftp/cmds.c
--- src/cmds.c Sat Jun 15 05:40:32 2002
+++ /home/spock/ftp/cmds.c Thu Jun 12 02:02:10 2003
@@ -1,4 +1,4 @@
-/* $NetBSD: cmds.c,v 1.98 2002/06/05 10:20:46 lukem Exp $ */
+/* $NetBSD: cmds.c,v 1.100 2002/11/30 03:10:55 lukem Exp $ */
/*-
* Copyright (c) 1996-2002 The NetBSD Foundation, Inc.
@@ -102,11 +102,35 @@
* SUCH DAMAGE.
*/
+#include <sys/cdefs.h>
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)cmds.c 8.6 (Berkeley) 10/9/94";
+#else
+__RCSID("$NetBSD: cmds.c,v 1.100 2002/11/30 03:10:55 lukem Exp $");
+#endif
+#endif /* not lint */
+
/*
* FTP User Program -- Command Routines.
*/
-
-#include "lukemftp.h"
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <arpa/ftp.h>
+
+#include <ctype.h>
+#include <err.h>
+#include <glob.h>
+#include <limits.h>
+#include <netdb.h>
+#include <paths.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
#include "ftp_var.h"
#include "version.h"
@@ -1008,7 +1032,7 @@
gatemode = 0;
else {
if (argc == 3)
- gateport = strdup(argv[2]);
+ gateport = xstrdup(argv[2]);
(void)strlcpy(gsbuf, argv[1], sizeof(gsbuf));
gateserver = gsbuf;
gatemode = 1;
diff -Nru src/cmdtab.c /home/spock/ftp/cmdtab.c
--- src/cmdtab.c Sat Jun 15 05:40:33 2002
+++ /home/spock/ftp/cmdtab.c Thu Jun 12 02:02:10 2003
@@ -1,4 +1,4 @@
-/* $NetBSD: cmdtab.c,v 1.39 2000/11/15 00:10:59 lukem Exp $ */
+/* $NetBSD: cmdtab.c,v 1.40 2002/07/29 04:24:47 lukem Exp $ */
/*-
* Copyright (c) 1996-2000 The NetBSD Foundation, Inc.
@@ -69,8 +69,16 @@
* SUCH DAMAGE.
*/
-#include "lukemftp.h"
+#include <sys/cdefs.h>
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)cmdtab.c 8.4 (Berkeley) 10/9/94";
+#else
+__RCSID("$NetBSD: cmdtab.c,v 1.40 2002/07/29 04:24:47 lukem Exp $");
+#endif
+#endif /* not lint */
+#include <stdio.h>
#include "ftp_var.h"
/*
@@ -123,7 +131,7 @@
char ntranshelp[] = "set translation table for default file name mapping";
char optshelp[] = "show or set options for remote commands";
char pagehelp[] = "view a remote file through your pager";
-char passivehelp[] = "enter passive transfer mode";
+char passivehelp[] = "toggle use of passive transfer mode";
char plshelp[] = "list contents of remote path through your pager";
char pmlsdhelp[] = "list contents of remote directory in a machine "
"parsable form through your pager";
diff -Nru src/complete.c /home/spock/ftp/complete.c
--- src/complete.c Thu Jul 19 12:26:13 2001
+++ /home/spock/ftp/complete.c Thu Jun 12 02:02:10 2003
@@ -36,11 +36,23 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#include <sys/cdefs.h>
+#ifndef lint
+__RCSID("$NetBSD: complete.c,v 1.38 2000/05/01 10:35:17 lukem Exp $");
+#endif /* not lint */
+
/*
* FTP user program - command and file completion routines
*/
-#include "lukemftp.h"
+#include <sys/stat.h>
+
+#include <ctype.h>
+#include <err.h>
+#include <dirent.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
#include "ftp_var.h"
diff -Nru src/domacro.c /home/spock/ftp/domacro.c
--- src/domacro.c Sat Jun 15 05:40:33 2002
+++ /home/spock/ftp/domacro.c Thu Jun 12 02:02:10 2003
@@ -33,7 +33,18 @@
* SUCH DAMAGE.
*/
-#include "lukemftp.h"
+#include <sys/cdefs.h>
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)domacro.c 8.3 (Berkeley) 4/2/94";
+#else
+__RCSID("$NetBSD: domacro.c,v 1.19 2002/02/01 05:04:43 itojun Exp $");
+#endif
+#endif /* not lint */
+
+#include <ctype.h>
+#include <stdio.h>
+#include <string.h>
#include "ftp_var.h"
diff -Nru src/extern.h /home/spock/ftp/extern.h
--- src/extern.h Sat Jun 15 05:40:33 2002
+++ /home/spock/ftp/extern.h Thu Jun 12 02:02:10 2003
@@ -1,7 +1,7 @@
-/* $NetBSD: extern.h,v 1.60 2000/10/11 14:46:03 is Exp $ */
+/* $NetBSD: extern.h,v 1.61 2003/01/21 16:08:07 jhawk Exp $ */
/*-
- * Copyright (c) 1996-2000 The NetBSD Foundation, Inc.
+ * Copyright (c) 1996-2003 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
@@ -110,7 +110,6 @@
void abortxfer(int);
void account(int, char **);
void ai_unmapped(struct addrinfo *);
-void alarmtimer(int);
int another(int *, char ***, const char *);
int auto_fetch(int, char **);
int auto_put(int, char **, const char *);
@@ -123,7 +122,7 @@
void cmdtimeout(int);
void cmdscanner(void);
int command(const char *, ...)
- ;
+ __attribute__((__format__(__printf__, 1, 2)));
#ifndef NO_EDITCOMPLETE
unsigned char complete(EditLine *, int);
void controlediting(void);
@@ -183,14 +182,11 @@
void page(int, char **);
int parseport(const char *, int);
int parserate(int, char **, int);
-void progressmeter(int);
char *prompt(void);
void proxabort(int);
void proxtrans(const char *, const char *, const char *);
void psabort(int);
-void psummary(int);
void pswitch(int);
-void ptransfer(int);
void put(int, char **);
void pwd(int, char **);
void quit(int, char **);
@@ -263,5 +259,3 @@
StringList *xsl_init(void);
void xsl_add(StringList *, char *);
char *xstrdup(const char *);
-sigfunc xsignal(int, sigfunc);
-sigfunc xsignal_restart(int, sigfunc, int);
diff -Nru src/fetch.c /home/spock/ftp/fetch.c
--- src/fetch.c Sun Feb 16 14:45:52 2003
+++ /home/spock/ftp/fetch.c Thu Jun 12 02:02:11 2003
@@ -1,7 +1,7 @@
-/* $NetBSD: fetch.c,v 1.136 2002/06/05 10:20:48 lukem Exp $ */
+/* $NetBSD: fetch.c,v 1.141 2003/05/14 14:31:00 wiz Exp $ */
/*-
- * Copyright (c) 1997-2002 The NetBSD Foundation, Inc.
+ * Copyright (c) 1997-2003 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
@@ -39,11 +39,36 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#include <sys/cdefs.h>
+#ifndef lint
+__RCSID("$NetBSD: fetch.c,v 1.141 2003/05/14 14:31:00 wiz Exp $");
+#endif /* not lint */
+
/*
* FTP User Program -- Command line file retrieval
*/
-#include "lukemftp.h"
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+
+#include <netinet/in.h>
+
+#include <arpa/ftp.h>
+#include <arpa/inet.h>
+
+#include <ctype.h>
+#include <err.h>
+#include <errno.h>
+#include <netdb.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <time.h>
#include "ftp_var.h"
#include "version.h"
@@ -155,7 +180,7 @@
*response = (char *)xmalloc(rlen);
(void)strlcpy(*response, scheme, rlen);
len = strlcat(*response, " ", rlen);
- base64_encode(clear, clen, *response + len);
+ base64_encode(clear, clen, (u_char *)*response + len);
memset(clear, 0, clen);
rval = 0;
@@ -235,12 +260,12 @@
* XXX: this is not totally RFC 1738 compliant; <path> will have the
* leading `/' unless it's an ftp:// URL, as this makes things easier
* for file:// and http:// URLs. ftp:// URLs have the `/' between the
- * host and the url-path removed, but any additional leading slashes
- * in the url-path are retained (because they imply that we should
+ * host and the URL-path removed, but any additional leading slashes
+ * in the URL-path are retained (because they imply that we should
* later do "CWD" with a null argument).
*
* Examples:
- * input url output path
+ * input URL output path
* --------- -----------
* "ftp://host" NULL
* "http://host/" NULL
@@ -484,7 +509,8 @@
rval = fetch_ftp(url);
goto cleanup_fetch_url;
}
- warnx("Invalid URL (no file after directory) `%s'", url);
+ warnx("no file after directory (you must specify an "
+ "output file) `%s'", url);
goto cleanup_fetch_url;
} else {
if (debug)
@@ -1372,7 +1398,7 @@
dir ? dir : "<null>", file ? file : "<null>");
dirhasglob = filehasglob = 0;
- if (doglob && (urltype == CLASSIC_URL_T || urltype == FTP_URL_T)) {
+ if (doglob && urltype == CLASSIC_URL_T) {
if (! EMPTYSTRING(dir) && strpbrk(dir, "*?[]{}") != NULL)
dirhasglob = 1;
if (! EMPTYSTRING(file) && strpbrk(file, "*?[]{}") != NULL)
@@ -1741,7 +1767,7 @@
}
}
if (debug)
- fprintf(ttyout, "auto_put: url `%s' argv[2] `%s'\n",
+ fprintf(ttyout, "auto_put: URL `%s' argv[2] `%s'\n",
path, uargv[2] ? uargv[2] : "<null>");
/* connect and cwd */
diff -Nru src/ftp.1 /home/spock/ftp/ftp.1
--- src/ftp.1 Sat Jun 15 05:40:35 2002
+++ /home/spock/ftp/ftp.1 Thu Jun 12 02:02:11 2003
@@ -1,6 +1,6 @@
-.\" $NetBSD: ftp.1,v 1.83 2002/06/05 10:20:48 lukem Exp $
+.\" $NetBSD: ftp.1,v 1.94 2003/05/14 14:31:00 wiz Exp $
.\"
-.\" Copyright (c) 1996-2002 The NetBSD Foundation, Inc.
+.\" Copyright (c) 1996-2003 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 May 18, 2002
+.Dd January 20, 2003
.Dt FTP 1
.Os
.Sh NAME
@@ -76,7 +76,7 @@
.Nd
Internet file transfer program
.Sh SYNOPSIS
-.Nm ""
+.Nm
.Op Fl 46AadefginpRtvV
.Bk -words
.Op Fl N Ar netrc
@@ -88,46 +88,81 @@
.Op Fl P Ar port
.Ek
.Bk -words
+.Op Fl q Ar quittime
+.Ek
+.Bk -words
.Op Fl r Ar retry
.Ek
.Bk -words
+.\" [-T dir,max[,inc]]
.Oo
-.Fl T
+.Fl T Xo
.Sm off
-.Xo
.Ar dir ,
.Ar max
.Op , Ar inc
-.Xc
.Sm on
+.Xc
.Oc
.Ek
.Bk -words
+.\" [[user@]host [port]]
.Oo
-[\fIuser\fR@]\fIhost\fR
+.Oo Ar user Ns Li \&@ Oc Ns Ar host
.Op Ar port
.Oc
.Ek
.Bk -words
-[\fIuser\fR@]\fIhost\fR:[\fIpath\fR][/]
+.\" [[user@]host:[path][/]]
+.Sm off
+.Oo
+.Op Ar user Li \&@
+.Ar host Li \&:
+.Op Ar path
+.Op Li /
+.Oc
+.Sm on
.Ek
.Bk -words
-.Op file:///\fIpath\fR
+.\" [file:///path]
+.Sm off
+.Oo
+.Li file:/// Ar path
+.Oc
+.Sm on
.Ek
.Bk -words
-.Op ftp://[\fIuser\fR[:\fIpassword\fR]@]\fIhost\fR[:\fIport\fR]/\fIpath\fR[/]
+.\" [ftp://[user[:password]@]host[:port]/path[/]]
+.Sm off
+.Oo
+.Li ftp://
+.Oo Ar user
+.Op Li \&: Ar password
+.Li \&@ Oc
+.Ar host Oo Li \&: Ar port Oc
+.Li / Ar path
+.Op Li /
+.Op Li ;type= Ar X
+.Oc
+.Sm on
.Ek
.Bk -words
-.Op http://[\fIuser\fR[:\fIpassword\fR]@]\fIhost\fR[:\fIport\fR]/\fIpath\fR
+.\" [http://[user[:password]@]host[:port]/path]
+.Sm off
+.Oo
+.Li http://
+.Oo Ar user
+.Op Li \&: Ar password
+.Li \&@ Oc
+.Ar host Oo Li \&: Ar port Oc
+.Li / Ar path
+.Oc
+.Sm on
.Ek
.Op Ar \&.\&.\&.
-.Nm ""
-.Fl u Ar url
-.\".Ar ftp://[\fIuser\fR[:\fIpassword\fR]@]\fIhost\fR[:\fIport\fR]/\fIpath\fR[/[file]]
-.\"|
-.\".Ar [\fIuser\fR@]\fIhost\fR:[\fIpath\fR][/[\fIfile\fR]]
+.Nm
.Bk -words
-file
+.Fl u Ar URL Ar file
.Ek
.Op Ar \&.\&.\&.
.Sh DESCRIPTION
@@ -243,6 +278,10 @@
Retry the connection attempt if it failed, pausing for
.Ar wait
seconds.
+.It Fl q Ar quittime
+Quit if the connection has stalled for
+.Ar quittime
+seconds.
.It Fl R
Restart all non-proxied auto-fetches.
.It Fl t
@@ -266,11 +305,11 @@
Refer to
.Ic rate
for more information.
-.It Fl u Ar url file Op \&.\&.\&.
+.It Fl u Ar URL file Op \&.\&.\&.
Upload files on the command line to
-.Ar url
+.Ar URL
where
-.Ar url
+.Ar URL
is one of the ftp URL types as supported by auto-fetch
(with an optional target filename for single file uploads), and
.Ar file
@@ -869,7 +908,7 @@
.Tn FTP
server at that port.
If the
-.Ic auto-login
+.Ic "set auto-login"
option is on (default),
.Nm
will also attempt to automatically log the user in to
@@ -882,10 +921,10 @@
and display with the program specified by the
.Ic "set pager"
option.
-.It Ic passive Op Ic auto
+.It Ic passive Op Cm auto
Toggle passive mode (if no arguments are given).
If
-.Ic auto
+.Cm auto
is given, act as if
.Ev FTPMODE
is set to
@@ -896,14 +935,17 @@
.Dv PASV
command for all data connections instead of a
.Dv PORT
-command. The
+command.
+The
.Dv PASV
command requests that the remote server open a port for the data connection
-and return the address of that port. The remote server listens on that
-port and the client connects to it. When using the more traditional
+and return the address of that port.
+The remote server listens on that port and the client connects to it.
+When using the more traditional
.Dv PORT
command, the client listens on a port and sends that address to the remote
-server, who connects back to it. Passive mode is useful when using
+server, who connects back to it.
+Passive mode is useful when using
.Nm
through a gateway router or host that controls the directionality of
traffic.
@@ -965,34 +1007,34 @@
.Pp
When prompting is on, the following commands are available at a prompt:
.Bl -tag -width 2n -offset indent
-.It Ic a
+.It Cm a
Answer
.Sq yes
to the current file, and automatically answer
.Sq yes
to any remaining files for the current command.
-.It Ic n
+.It Cm n
Answer
.Sq no ,
and do not transfer the file.
-.It Ic p
+.It Cm p
Answer
.Sq yes
to the current file, and turn off prompt mode
(as is
.Dq prompt off
had been given).
-.It Ic q
+.It Cm q
Terminate the current operation.
-.It Ic y
+.It Cm y
Answer
.Sq yes ,
and transfer the file.
-.It Ic ?
+.It Cm ?
Display a help message.
.El
.Pp
-Any other reponse will answer
+Any other response will answer
.Sq yes
to the current file.
.It Ic proxy Ar ftp-command
@@ -1072,11 +1114,11 @@
.Ar direction
may be one of:
.Bl -tag -width "all" -offset indent -compact
-.It Ic all
+.It Cm all
Both directions.
-.It Ic get
+.It Cm get
Incoming transfers.
-.It Ic put
+.It Cm put
Outgoing transfers.
.El
.Pp
@@ -1240,7 +1282,7 @@
implementations which do ignore
.Dv PORT
commands but, incorrectly, indicate they've been accepted.
-.It Ic set Op Ar "option value"
+.It Ic set Op Ar option Ar value
Set
.Ar option
to
@@ -1252,25 +1294,25 @@
are not given, display all of the options and their values.
The currently supported options are:
.Bl -tag -width "http_proxy" -offset indent
-.It anonpass
+.It Cm anonpass
Defaults to
.Ev $FTPANONPASS
-.It ftp_proxy
+.It Cm ftp_proxy
Defaults to
.Ev $ftp_proxy .
-.It http_proxy
+.It Cm http_proxy
Defaults to
.Ev $http_proxy .
-.It no_proxy
+.It Cm no_proxy
Defaults to
.Ev $no_proxy .
-.It pager
+.It Cm pager
Defaults to
.Ev $PAGER .
-.It prompt
+.It Cm prompt
Defaults to
.Ev $FTPPROMPT .
-.It rprompt
+.It Cm rprompt
Defaults to
.Ev $FTPRPROMPT .
.El
@@ -1415,13 +1457,14 @@
interpretation of the argument.
Supported suffixes are:
.Bl -tag -width 3n -offset indent -compact
-.It b
-Causes no modification. (Optional)
-.It k
+.It Li b
+Causes no modification.
+(Optional)
+.It Li k
Kilo; multiply the argument by 1024
-.It m
+.It Li m
Mega; multiply the argument by 1048576
-.It g
+.It Li g
Giga; multiply the argument by 1073741824
.El
.Pp
@@ -1447,7 +1490,15 @@
.Pp
The following formats are valid syntax for an auto-fetch element:
.Bl -tag -width "FOO "
-.It [user@]host:[path][/]
+.\" [user@]host:[path][/]
+.It Xo
+.Sm off
+.Op Ar user Li \&@
+.Ar host Li \&:
+.Op Ar path
+.Op Li /
+.Sm on
+.Xc
.Dq Classic
.Tn FTP
format.
@@ -1471,7 +1522,19 @@
in the current directory.
Otherwise, the full remote name is used as the local name,
relative to the local root directory.
-.It ftp://[user[:password]@]host[:port]/path[/][;type=X]
+.\" ftp://[user[:password]@]host[:port]/path[/][;type=X]
+.It Xo
+.Sm off
+.Li ftp://
+.Oo Ar user
+.Op Li \&: Ar password
+.Li \&@ Oc
+.Ar host Oo Li \&: Ar port Oc
+.Li / Ar path
+.Op Li /
+.Op Li ;type= Ar X
+.Sm on
+.Xc
An
.Tn FTP
URL, retrieved using the
@@ -1493,15 +1556,94 @@
.Ar password
if supplied, otherwise prompt the user for one.
.Pp
+If a suffix of
+.Sq ;type=A
+or
+.Sq ;type=I
+is supplied, then the transfer type will take place as
+ascii or binary (respectively).
+The default transfer type is binary.
+.Pp
In order to be compliant with
.Cm RFC 1738 ,
.Nm
-strips the leading
-.Sq /
-from
+interprets the
+.Ar path
+part of an
+.Dq ftp://
+auto-fetch URL as follows:
+.Bl -bullet
+.It
+The
+.Sq Li /
+immediately after the
+.Ar host Ns Oo Li \&: Ns Ar port Oc
+is interpreted as a separator before the
+.Ar path ,
+and not as part of the
+.Ar path
+itself.
+.It
+The
+.Ar path
+is interpreted as a
+.So Li / Sc Ns -separated
+list of name components.
+For all but the last such component,
+.Nm
+performs the equivalent of a
+.Ic cd
+command.
+For the last path component,
+.Nm
+performs the equivalent of a
+.Ic get
+command.
+.It
+Empty name components,
+which result from
+.Sq Li //
+within the
+.Ar path ,
+or from an extra
+.Sq Li /
+at the beginning of the
.Ar path ,
-resulting in a transfer relative from the default login directory of
-the user.
+will cause the equivalent of a
+.Ic cd
+command without a directory name.
+This is unlikely to be useful.
+.It
+Any
+.Sq Li \&% Ns Ar XX
+codes within the path components are decoded, with
+.Ar XX
+representing a character code in hexadecimal.
+This decoding takes place after the
+.Ar path
+has been split into components,
+but before each component is used in the equivalent of a
+.Ic cd
+or
+.Ic get
+command.
+Some often-used codes are
+.Sq Li \&%2F
+(which represents
+.Sq Li / )
+and
+.Sq Li \&%7E
+(which represents
+.Sq Li ~ ) .
+.El
+.Pp
+The above interpretation has the following consequences:
+.Bl -bullet
+.It
+The path is interpreted relative to the
+default login directory of the specified user or of the
+.Sq anonymous
+user.
If the
.Pa /
directory is required, use a leading path of
@@ -1519,15 +1661,57 @@
.Sq mypass ,
use
.Dq ftp://myname:mypass@localhost/%2fetc/motd
-.Pp
-If a suffix of
-.Sq ;type=A
-or
-.Sq ;type=I
-is supplied, then the transfer type will take place as
-ascii or binary (respectively).
-The default transfer type is binary.
-.It http://[user[:password]@]host[:port]/path
+.It
+The exact
+.Ic cd
+and
+.Ic get
+commands can be controlled by careful choice of
+where to use
+.Sq /
+and where to use
+.Sq %2F
+(or
+.Sq %2f ) .
+For example, the following URLs correspond to the
+equivalents of the indicated commands:
+.Bl -tag -width "ftp://host/%2Fdir1%2Fdir2%2Ffile"
+.It ftp://host/dir1/dir2/file
+.Dq "cd dir1" ,
+.Dq "cd dir2" ,
+.Dq "get file" .
+.It ftp://host/%2Fdir1/dir2/file
+.Dq "cd /dir1" ,
+.Dq "cd dir2" ,
+.Dq "get file" .
+.It ftp://host/dir1%2Fdir2/file
+.Dq "cd dir1/dir2" ,
+.Dq "get file" .
+.It ftp://host/%2Fdir1%2Fdir2/file
+.Dq "cd /dir1/dir2" ,
+.Dq "get file" .
+.It ftp://host/dir1%2Fdir2%2Ffile
+.Dq "get dir1/dir2/file" .
+.It ftp://host/%2Fdir1%2Fdir2%2Ffile
+.Dq "get /dir1/dir2/file" .
+.El
+.It
+You must have appropriate access permission for each of the
+intermediate directories that is used in the equivalent of a
+.Ic cd
+command.
+.El
+.\" http://[user[:password]@]host[:port]/path
+.It Xo
+.Sm off
+.Li http://
+.Oo Ar user
+.Op Li \&: Ar password
+.Li \&@ Oc
+.Ar host Oo Li \&: Ar port Oc
+.Li / Ar path
+.Sm on
+.Xc
An
.Tn HTTP
URL, retrieved using the
@@ -1540,16 +1724,22 @@
proxy server.
If
.Tn HTTP
-authorisation is required to retrieve
+authorization is required to retrieve
.Ar path ,
and
.Sq user
(and optionally
.Sq password )
is in the URL, use them for the first attempt to authenticate.
-.It file:///path
+.\" file:///path
+.It Xo
+.Sm off
+.Li file:/// Ar path
+.Sm on
+.Xc
A local URL, copied from
-.Ar /path .
+.Pa / Ns Ar path
+on the local host.
.El
.Pp
Unless noted otherwise above, and
@@ -1736,7 +1926,7 @@
.Nm
supports only the default values for the remaining
file transfer parameters:
-.Ic mode ,
+.Ic mode ,
.Ic form ,
and
.Ic struct .
@@ -1841,6 +2031,14 @@
.Ic init
is defined, it is automatically executed as the last step in the
auto-login process.
+For example,
+.Bd -literal -offset indent
+default
+macdef init
+epsv4 off
+.Ed
+.Pp
+followed by a blank line.
.El
.Sh COMMAND LINE EDITING
.Nm
@@ -1888,9 +2086,20 @@
The following formatting sequences are replaced by the given
information:
.Bl -tag -width "%% " -offset indent
-.It %/
+.It Li \&%/
The current remote working directory.
-.It %c[[0]\fIn\fR], %.[[0]\fIn\fR]
+.\" %c[[0]n], %.[[0]n]
+.It Xo
+.Sm off
+.Li \&%c
+.Op Oo Li 0 Oc Ar n
+.Sm on
+.No ,
+.Sm off
+.Li \&%.
+.Op Oo Li 0 Oc Ar n
+.Sm on
+.Xc
The trailing component of the current remote working directory, or
.Em n
trailing components if a digit
@@ -1902,21 +2111,28 @@
.Sq 0 ,
the number of skipped components precede the trailing component(s) in
the format
-.Dq /\fI\*[Lt]skipped\*[Gt]\fRtrailing
+.\" ``/<number>trailing''
+.Do
+.Sm off
+.Li / Li \*[Lt] Va number Li \*[Gt]
+.Va trailing
+.Sm on
+.Dc
(for
-.Sq %c )
+.Sq \&%c )
or
-.Dq ...trailing
+.\" ``...trailing''
+.Dq Li \&... Ns Va trailing
(for
-.Sq %. ) .
-.It %M
+.Sq \&%. ) .
+.It Li \&%M
The remote host name.
-.It %m
+.It Li \&%m
The remote host name, up to the first
.Sq \&. .
-.It %n
+.It Li \&%n
The remote user name.
-.It %%
+.It Li \&%%
A single
.Sq % .
.El
@@ -1934,15 +2150,15 @@
Overrides the default operation mode.
Support values are:
.Bl -tag -width "passive"
-.It active
+.It Cm active
active mode
.Tn FTP
only
-.It auto
+.It Cm auto
automatic determination of passive or active (this is the default)
-.It gate
+.It Cm gate
gate-ftp mode
-.It passive
+.It Cm passive
passive mode
.Tn FTP
only
@@ -2028,6 +2244,21 @@
Each entry may have an optional trailing ":port", which restricts
the matching to connections to that port.
.El
+.Sh EXTENDED PASSIVE MODE AND FIREWALLS
+Some firewall configurations do not allow
+.Nm
+to use extended passive mode.
+If you find that even a simple
+.Ic ls
+appears to hang after printing a message such as this:
+.Pp
+.Dl 229 Entering Extended Passive Mode (|||58551|)
+.Pp
+then you will need to disable extended passive mode with
+.Ic epsv4 off .
+See the above section
+.Sx The .netrc File
+for an example of how to make this automatic.
.Sh SEE ALSO
.Xr getservbyname 3 ,
.Xr editrc 5 ,
@@ -2061,7 +2292,9 @@
were implemented in
.Nx 1.3
and later releases
-by Luke Mewburn \*[Lt]lukem@netbsd.org\*[Gt].
+by
+.An Luke Mewburn
+.Aq lukem@NetBSD.org .
.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 -Nru src/ftp.c /home/spock/ftp/ftp.c
--- src/ftp.c Sat Jun 15 05:40:36 2002
+++ /home/spock/ftp/ftp.c Thu Jun 12 02:02:11 2003
@@ -98,9 +98,40 @@
* SUCH DAMAGE.
*/
-#include "lukemftp.h"
+#include <sys/cdefs.h>
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)ftp.c 8.6 (Berkeley) 10/27/94";
+#else
+__RCSID("$NetBSD: ftp.c,v 1.120 2002/06/05 10:20:49 lukem Exp $");
+#endif
+#endif /* not lint */
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/socket.h>
+#include <sys/time.h>
+
+#include <netinet/in.h>
+#include <netinet/in_systm.h>
+#include <netinet/ip.h>
+#include <arpa/inet.h>
+#include <arpa/ftp.h>
#include <arpa/telnet.h>
+
+#include <ctype.h>
+#include <err.h>
+#include <errno.h>
+#include <netdb.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+#include <stdarg.h>
+#ifndef USE_SELECT
+#include <poll.h>
+#endif
#include "ftp_var.h"
diff -Nru src/ftp.cat1 /home/spock/ftp/ftp.cat1
--- src/ftp.cat1 Sat Jun 15 05:40:31 2002
+++ /home/spock/ftp/ftp.cat1 Wed Dec 31 19:00:00 1969
@@ -1,1055 +0,0 @@
-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 -Nru src/ftp_var.h /home/spock/ftp/ftp_var.h
--- src/ftp_var.h Sat Jun 15 05:40:36 2002
+++ /home/spock/ftp/ftp_var.h Thu Jun 12 02:02:11 2003
@@ -1,7 +1,7 @@
-/* $NetBSD: ftp_var.h,v 1.62 2001/12/26 09:40:16 lukem Exp $ */
+/* $NetBSD: ftp_var.h,v 1.64 2003/01/21 16:08:07 jhawk Exp $ */
/*-
- * Copyright (c) 1996-2001 The NetBSD Foundation, Inc.
+ * Copyright (c) 1996-2003 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
@@ -111,14 +111,20 @@
#define NO_PROGRESS
#endif
+#include <sys/param.h>
+
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include <setjmp.h>
+#include <stringlist.h>
+
#ifndef NO_EDITCOMPLETE
#include <histedit.h>
#endif /* !NO_EDITCOMPLETE */
-typedef void (*sigfunc)(int);
-
#include "extern.h"
-
+#include "progressbar.h"
/*
* Format of command table.
@@ -175,7 +181,6 @@
#define HASHBYTES 1024 /* default mark for `hash' command */
#define DEFAULTINCR 1024 /* default increment for `rate' command */
-#define STALLTIME 5 /* # of seconds of no xfer before "stalling" */
#define FTP_PORT 21 /* default if ! getservbyname("ftp/tcp") */
#define HTTP_PORT 80 /* default if ! getservbyname("http/tcp") */
@@ -204,9 +209,7 @@
GLOBAL int hash; /* print # for each buffer transferred */
GLOBAL int mark; /* number of bytes between hashes */
GLOBAL int sendport; /* use PORT/LPRT cmd for each data connection */
-GLOBAL int verbose; /* print messages coming back from server */
GLOBAL int connected; /* 1 = connected to server, -1 = logged in */
-GLOBAL int fromatty; /* input is from a terminal */
GLOBAL int interactive; /* interactively prompt on m* cmds */
GLOBAL int confirmrest; /* confirm rest of current m* cmd */
GLOBAL int debug; /* debugging level */
@@ -223,7 +226,6 @@
GLOBAL int ntflag; /* use ntin ntout tables for name translation */
GLOBAL int mapflag; /* use mapin mapout templates on file names */
GLOBAL int preserve; /* preserve modification time on files */
-GLOBAL int progress; /* display transfer progress bar */
GLOBAL int code; /* return/reply code for ftp command */
GLOBAL int crflag; /* if 1, strip car. rets. on ascii gets */
GLOBAL int passivemode; /* passive mode enabled */
@@ -252,9 +254,7 @@
GLOBAL int rate_put; /* maximum put xfer rate */
GLOBAL int rate_put_incr; /* increment for put xfer rate */
GLOBAL int retry_connect; /* seconds between retrying connection */
-GLOBAL int ttywidth; /* width of tty */
GLOBAL char *tmpdir; /* temporary directory */
-GLOBAL FILE *ttyout; /* stdout, or stderr if retrieving to stdout */
GLOBAL int epsv4; /* use EPSV/EPRT on IPv4 connections */
GLOBAL int epsv4bad; /* EPSV doesn't work on the current server */
GLOBAL int editing; /* command line editing enabled */
@@ -268,10 +268,7 @@
GLOBAL size_t cursor_argo; /* offset of cursor in margv[cursor_argc] */
#endif /* !NO_EDITCOMPLETE */
-GLOBAL off_t bytes; /* current # of bytes read */
-GLOBAL off_t filesize; /* size of file being transferred */
GLOBAL char *direction; /* direction transfer is occurring */
-GLOBAL off_t restart_point; /* offset to restart transfer */
GLOBAL char *hostname; /* name of host connected to */
GLOBAL int unix_server; /* server is unix, can use binary for ascii */
@@ -287,8 +284,6 @@
GLOBAL char *outfile; /* filename to output URLs to */
GLOBAL int restartautofetch; /* restart auto-fetch */
-GLOBAL sigjmp_buf toplevel; /* non-local goto stuff for cmd scanner */
-
GLOBAL char line[FTPBUFLEN]; /* input line buffer */
GLOBAL char *stringbase; /* current scan point in line buffer */
GLOBAL char argbuf[FTPBUFLEN]; /* argument storage buffer */
@@ -336,29 +331,7 @@
#endif
#ifdef NO_LONG_LONG
-# define LLF "%ld"
-# define LLFP(x) "%" x "ld"
-# define LLT long
-# define ULLF "%lu"
-# define ULLFP(x) "%" x "lu"
-# 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
-# define ULLF "%llu"
-# define ULLFP(x) "%" x "llu"
-# define ULLT unsigned long long
# define STRTOLL(x,y,z) strtoll(x,y,z)
-#endif
#endif
diff -Nru src/main.c /home/spock/ftp/main.c
--- src/main.c Sat Jun 15 05:40:36 2002
+++ /home/spock/ftp/main.c Thu Jun 12 02:02:11 2003
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.82 2002/06/05 13:51:54 lukem Exp $ */
+/* $NetBSD: main.c,v 1.84 2003/05/14 14:31:00 wiz Exp $ */
/*-
* Copyright (c) 1996-2002 The NetBSD Foundation, Inc.
@@ -98,11 +98,36 @@
* SUCH DAMAGE.
*/
+#include <sys/cdefs.h>
+#ifndef lint
+__COPYRIGHT("@(#) Copyright (c) 1985, 1989, 1993, 1994\n\
+ The Regents of the University of California. All rights reserved.\n");
+#endif /* not lint */
+
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)main.c 8.6 (Berkeley) 10/9/94";
+#else
+__RCSID("$NetBSD: main.c,v 1.84 2003/05/14 14:31:00 wiz Exp $");
+#endif
+#endif /* not lint */
+
/*
* FTP User Program -- Command Interface.
*/
+#include <sys/types.h>
+#include <sys/socket.h>
-#include "lukemftp.h"
+#include <err.h>
+#include <errno.h>
+#include <netdb.h>
+#include <paths.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <locale.h>
#define GLOBAL /* force GLOBAL decls in ftp_var.h to be declared */
#include "ftp_var.h"
@@ -123,9 +148,7 @@
char *cp, *ep, *anonuser, *anonpass, *upload_path;
int dumbterm, s, len, isupload;
-#if 0 /* XXX */
setlocale(LC_ALL, "");
-#endif
setprogname(argv[0]);
ftpport = "ftp";
@@ -258,7 +281,7 @@
}
}
- while ((ch = getopt(argc, argv, "46AadefginN:o:pP:r:RtT:u:vV")) != -1) {
+ while ((ch = getopt(argc, argv, "46AadefginN:o:pP:q:r:RtT:u:vV")) != -1) {
switch (ch) {
case '4':
family = AF_INET;
@@ -330,6 +353,12 @@
ftpport = optarg;
break;
+ case 'q':
+ quit_time = strtol(optarg, &ep, 10);
+ if (quit_time < 1 || *ep != '\0')
+ errx(1, "bad quit value: %s", optarg);
+ break;
+
case 'r':
retry_connect = strtol(optarg, &ep, 10);
if (retry_connect < 1 || *ep != '\0')
@@ -1003,6 +1032,6 @@
" [-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 -Nru src/progressbar.c /home/spock/ftp/progressbar.c
--- src/progressbar.c Wed Dec 31 19:00:00 1969
+++ /home/spock/ftp/progressbar.c Thu Jun 12 02:02:11 2003
@@ -0,0 +1,460 @@
+/* $NetBSD: progressbar.c,v 1.3 2003/02/28 09:53:49 lukem Exp $ */
+
+/*-
+ * Copyright (c) 1997-2003 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Luke Mewburn.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
+ * NASA Ames Research Center.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the NetBSD
+ * Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+__RCSID("$NetBSD: progressbar.c,v 1.3 2003/02/28 09:53:49 lukem Exp $");
+#endif /* not lint */
+
+/*
+ * FTP User Program -- Misc support routines
+ */
+#include <sys/types.h>
+#include <sys/param.h>
+
+#include <err.h>
+#include <errno.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <tzfile.h>
+#include <unistd.h>
+
+#include "progressbar.h"
+
+#if !defined(NO_PROGRESS)
+/*
+ * return non-zero if we're the current foreground process
+ */
+int
+foregroundproc(void)
+{
+ static pid_t pgrp = -1;
+
+ if (pgrp == -1)
+ pgrp = getpgrp();
+
+ return (tcgetpgrp(fileno(ttyout)) == pgrp);
+}
+#endif /* !defined(NO_PROGRESS) */
+
+
+#ifndef NO_PROGRESS
+static void updateprogressmeter(int);
+
+/*
+ * SIGALRM handler to update the progress meter
+ */
+static void
+updateprogressmeter(int dummy)
+{
+ int oerrno = errno;
+
+ progressmeter(0);
+ errno = oerrno;
+}
+#endif /* NO_PROGRESS */
+
+
+/*
+ * List of order of magnitude prefixes.
+ * The last is `P', as 2^64 = 16384 Petabytes
+ */
+static const char prefixes[] = " KMGTP";
+
+/*
+ * Display a transfer progress bar if progress is non-zero.
+ * SIGALRM is hijacked for use by this function.
+ * - Before the transfer, set filesize to size of file (or -1 if unknown),
+ * and call with flag = -1. This starts the once per second timer,
+ * and a call to updateprogressmeter() upon SIGALRM.
+ * - During the transfer, updateprogressmeter will call progressmeter
+ * with flag = 0
+ * - After the transfer, call with flag = 1
+ */
+static struct timeval start;
+static struct timeval lastupdate;
+
+#define BUFLEFT (sizeof(buf) - len)
+
+void
+progressmeter(int flag)
+{
+ static off_t lastsize;
+ off_t cursize;
+ struct timeval now, wait;
+#ifndef NO_PROGRESS
+ struct timeval td;
+ off_t abbrevsize, bytespersec;
+ double elapsed;
+ int ratio, barlength, i, len, remaining;
+
+ /*
+ * Work variables for progress bar.
+ *
+ * XXX: if the format of the progress bar changes
+ * (especially the number of characters in the
+ * `static' portion of it), be sure to update
+ * these appropriately.
+ */
+ char buf[256]; /* workspace for progress bar */
+#define BAROVERHEAD 43 /* non `*' portion of progress bar */
+ /*
+ * stars should contain at least
+ * sizeof(buf) - BAROVERHEAD entries
+ */
+ static const char stars[] =
+"*****************************************************************************"
+"*****************************************************************************"
+"*****************************************************************************";
+
+#endif
+
+ if (flag == -1) {
+ (void)gettimeofday(&start, NULL);
+ lastupdate = start;
+ lastsize = restart_point;
+ }
+
+ (void)gettimeofday(&now, NULL);
+ cursize = bytes + restart_point;
+ timersub(&now, &lastupdate, &wait);
+ if (cursize > lastsize) {
+ lastupdate = now;
+ lastsize = cursize;
+ wait.tv_sec = 0;
+ } else {
+#ifndef STANDALONE_PROGRESS
+ if (quit_time > 0 && wait.tv_sec > quit_time) {
+ len = snprintf(buf, sizeof(buf), "\r\n%s: "
+ "transfer aborted because stalled for %lu sec.\r\n",
+ getprogname(), (unsigned long)wait.tv_sec);
+ (void)write(fileno(ttyout), buf, len);
+ (void)xsignal(SIGALRM, SIG_DFL);
+ alarmtimer(0);
+ siglongjmp(toplevel, 1);
+ }
+#endif /* !STANDALONE_PROGRESS */
+ }
+ /*
+ * Always set the handler even if we are not the foreground process.
+ */
+#ifdef STANDALONE_PROGRESS
+ if (progress) {
+#else
+ if (quit_time > 0 || progress) {
+#endif /* !STANDALONE_PROGRESS */
+ if (flag == -1) {
+ (void)xsignal_restart(SIGALRM, updateprogressmeter, 1);
+ alarmtimer(1); /* set alarm timer for 1 Hz */
+ } else if (flag == 1) {
+ (void)xsignal(SIGALRM, SIG_DFL);
+ alarmtimer(0);
+ }
+ }
+#ifndef NO_PROGRESS
+ if (!progress)
+ return;
+ len = 0;
+
+ /*
+ * print progress bar only if we are foreground process.
+ */
+ if (! foregroundproc())
+ return;
+
+ 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, "");
+ }
+ }
+
+ abbrevsize = cursize;
+ for (i = 0; abbrevsize >= 100000 && i < sizeof(prefixes); i++)
+ abbrevsize >>= 10;
+ len += snprintf(buf + len, BUFLEFT, " " LLFP("5") " %c%c ",
+ (LLT)abbrevsize,
+ prefixes[i],
+ i == 0 ? ' ' : 'B');
+
+ timersub(&now, &start, &td);
+ elapsed = td.tv_sec + (td.tv_usec / 1000000.0);
+
+ bytespersec = 0;
+ if (bytes > 0) {
+ bytespersec = bytes;
+ if (elapsed > 0.0)
+ bytespersec /= elapsed;
+ }
+ for (i = 1; bytespersec >= 1024000 && i < sizeof(prefixes); i++)
+ bytespersec >>= 10;
+ len += snprintf(buf + len, BUFLEFT,
+ " " LLFP("3") ".%02d %cB/s ",
+ (LLT)(bytespersec / 1024),
+ (int)((bytespersec % 1024) * 100 / 1024),
+ prefixes[i]);
+
+ if (filesize > 0) {
+ 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)
+ 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)
+ len += snprintf(buf + len, BUFLEFT, "\n");
+ (void)write(fileno(ttyout), buf, len);
+
+#endif /* !NO_PROGRESS */
+}
+
+#ifndef STANDALONE_PROGRESS
+/*
+ * Display transfer statistics.
+ * Requires start to be initialised by progressmeter(-1),
+ * direction to be defined by xfer routines, and filesize and bytes
+ * to be updated by xfer routines
+ * If siginfo is nonzero, an ETA is displayed, and the output goes to stderr
+ * instead of ttyout.
+ */
+void
+ptransfer(int siginfo)
+{
+ struct timeval now, td, wait;
+ double elapsed;
+ off_t bytespersec;
+ int remaining, hh, i, len;
+
+ char buf[256]; /* Work variable for transfer status. */
+
+ if (!verbose && !progress && !siginfo)
+ return;
+
+ (void)gettimeofday(&now, NULL);
+ timersub(&now, &start, &td);
+ elapsed = td.tv_sec + (td.tv_usec / 1000000.0);
+ bytespersec = 0;
+ if (bytes > 0) {
+ bytespersec = bytes;
+ if (elapsed > 0.0)
+ bytespersec /= elapsed;
+ }
+ len = 0;
+ len += snprintf(buf + len, BUFLEFT, LLF " byte%s %s in ",
+ (LLT)bytes, bytes == 1 ? "" : "s", direction);
+ remaining = (int)elapsed;
+ if (remaining > SECSPERDAY) {
+ int days;
+
+ days = remaining / SECSPERDAY;
+ remaining %= SECSPERDAY;
+ len += snprintf(buf + len, BUFLEFT,
+ "%d day%s ", days, days == 1 ? "" : "s");
+ }
+ hh = remaining / SECSPERHOUR;
+ remaining %= SECSPERHOUR;
+ if (hh)
+ len += snprintf(buf + len, BUFLEFT, "%2d:", hh);
+ len += snprintf(buf + len, BUFLEFT,
+ "%02d:%02d ", remaining / 60, remaining % 60);
+
+ for (i = 1; bytespersec >= 1024000 && i < sizeof(prefixes); i++)
+ bytespersec >>= 10;
+ len += snprintf(buf + len, BUFLEFT, "(" LLF ".%02d %cB/s)",
+ (LLT)(bytespersec / 1024),
+ (int)((bytespersec % 1024) * 100 / 1024),
+ prefixes[i]);
+
+ if (siginfo && bytes > 0 && elapsed > 0.0 && filesize >= 0
+ && bytes + restart_point <= filesize) {
+ remaining = (int)((filesize - restart_point) /
+ (bytes / elapsed) - elapsed);
+ hh = remaining / SECSPERHOUR;
+ remaining %= SECSPERHOUR;
+ len += snprintf(buf + len, BUFLEFT, " ETA: ");
+ if (hh)
+ len += snprintf(buf + len, BUFLEFT, "%2d:", hh);
+ len += snprintf(buf + len, BUFLEFT, "%02d:%02d",
+ remaining / 60, remaining % 60);
+ timersub(&now, &lastupdate, &wait);
+ if (wait.tv_sec >= STALLTIME)
+ len += snprintf(buf + len, BUFLEFT, " (stalled)");
+ }
+ len += snprintf(buf + len, BUFLEFT, "\n");
+ (void)write(siginfo ? STDERR_FILENO : fileno(ttyout), buf, len);
+}
+
+/*
+ * SIG{INFO,QUIT} handler to print transfer stats if a transfer is in progress
+ */
+void
+psummary(int notused)
+{
+ int oerrno = errno;
+
+ if (bytes > 0) {
+ if (fromatty)
+ write(fileno(ttyout), "\n", 1);
+ ptransfer(1);
+ }
+ errno = oerrno;
+}
+#endif /* !STANDALONE_PROGRESS */
+
+
+/*
+ * Set the SIGALRM interval timer for wait seconds, 0 to disable.
+ */
+void
+alarmtimer(int wait)
+{
+ struct itimerval itv;
+
+ itv.it_value.tv_sec = wait;
+ itv.it_value.tv_usec = 0;
+ itv.it_interval = itv.it_value;
+ setitimer(ITIMER_REAL, &itv, NULL);
+}
+
+
+/*
+ * Install a POSIX signal handler, allowing the invoker to set whether
+ * the signal should be restartable or not
+ */
+sigfunc
+xsignal_restart(int sig, sigfunc func, int restartable)
+{
+ struct sigaction act, oact;
+ act.sa_handler = func;
+
+ sigemptyset(&act.sa_mask);
+#if defined(SA_RESTART) /* 4.4BSD, Posix(?), SVR4 */
+ act.sa_flags = restartable ? SA_RESTART : 0;
+#elif defined(SA_INTERRUPT) /* SunOS 4.x */
+ act.sa_flags = restartable ? 0 : SA_INTERRUPT;
+#else
+#error "system must have SA_RESTART or SA_INTERRUPT"
+#endif
+ if (sigaction(sig, &act, &oact) < 0)
+ return (SIG_ERR);
+ return (oact.sa_handler);
+}
+
+/*
+ * Install a signal handler with the `restartable' flag set dependent upon
+ * which signal is being set. (This is a wrapper to xsignal_restart())
+ */
+sigfunc
+xsignal(int sig, sigfunc func)
+{
+ int restartable;
+
+ /*
+ * Some signals print output or change the state of the process.
+ * There should be restartable, so that reads and writes are
+ * not affected. Some signals should cause program flow to change;
+ * these signals should not be restartable, so that the system call
+ * will return with EINTR, and the program will go do something
+ * different. If the signal handler calls longjmp() or siglongjmp(),
+ * it doesn't matter if it's restartable.
+ */
+
+ switch(sig) {
+#ifdef SIGINFO
+ case SIGINFO:
+#endif
+ case SIGQUIT:
+ case SIGUSR1:
+ case SIGUSR2:
+ case SIGWINCH:
+ restartable = 1;
+ break;
+
+ case SIGALRM:
+ case SIGINT:
+ case SIGPIPE:
+ restartable = 0;
+ break;
+
+ default:
+ /*
+ * This is unpleasant, but I don't know what would be better.
+ * Right now, this "can't happen"
+ */
+ errx(1, "xsignal_restart called with signal %d", sig);
+ }
+
+ return(xsignal_restart(sig, func, restartable));
+}
diff -Nru src/progressbar.h /home/spock/ftp/progressbar.h
--- src/progressbar.h Wed Dec 31 19:00:00 1969
+++ /home/spock/ftp/progressbar.h Thu Jun 12 02:02:11 2003
@@ -0,0 +1,99 @@
+/* $NetBSD: progressbar.h,v 1.3 2003/02/28 09:53:49 lukem Exp $ */
+
+/*-
+ * Copyright (c) 1996-2003 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Luke Mewburn.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the NetBSD
+ * Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef STANDALONE_PROGRESS
+#include <setjmp.h>
+#endif /* !STANDALONE_PROGRESS */
+
+#ifndef GLOBAL
+#define GLOBAL extern
+#endif
+
+
+#define STALLTIME 5 /* # of seconds of no xfer before "stalling" */
+
+typedef void (*sigfunc)(int);
+
+
+GLOBAL FILE *ttyout; /* stdout, or stderr if retrieving to stdout */
+
+GLOBAL int progress; /* display transfer progress bar */
+GLOBAL int ttywidth; /* width of tty */
+
+GLOBAL off_t bytes; /* current # of bytes read */
+GLOBAL off_t filesize; /* size of file being transferred */
+GLOBAL off_t restart_point; /* offset to restart transfer */
+
+
+#ifndef STANDALONE_PROGRESS
+GLOBAL int fromatty; /* input is from a terminal */
+GLOBAL int verbose; /* print messages coming back from server */
+GLOBAL int quit_time; /* maximum time to wait if stalled */
+
+GLOBAL char *direction; /* direction transfer is occurring */
+
+GLOBAL sigjmp_buf toplevel; /* non-local goto stuff for cmd scanner */
+#endif /* !STANDALONE_PROGRESS */
+
+int foregroundproc(void);
+void alarmtimer(int);
+void progressmeter(int);
+sigfunc xsignal(int, sigfunc);
+sigfunc xsignal_restart(int, sigfunc, int);
+
+#ifndef STANDALONE_PROGRESS
+void psummary(int);
+void ptransfer(int);
+#endif /* !STANDALONE_PROGRESS */
+
+
+#ifdef NO_LONG_LONG
+# define LLF "%ld"
+# define LLFP(x) "%" x "ld"
+# define LLT long
+# define ULLF "%lu"
+# define ULLFP(x) "%" x "lu"
+# define ULLT unsigned long
+#else
+# define LLF "%lld"
+# define LLFP(x) "%" x "lld"
+# define LLT long long
+# define ULLF "%llu"
+# define ULLFP(x) "%" x "llu"
+# define ULLT unsigned long long
+#endif
diff -Nru src/ruserpass.c /home/spock/ftp/ruserpass.c
--- src/ruserpass.c Sat Jun 15 05:40:36 2002
+++ /home/spock/ftp/ruserpass.c Thu Jun 12 02:02:11 2003
@@ -33,7 +33,26 @@
* SUCH DAMAGE.
*/
-#include "lukemftp.h"
+#include <sys/cdefs.h>
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)ruserpass.c 8.4 (Berkeley) 4/27/95";
+#else
+__RCSID("$NetBSD: ruserpass.c,v 1.28 2000/11/15 00:11:04 lukem Exp $");
+#endif
+#endif /* not lint */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <ctype.h>
+#include <err.h>
+#include <errno.h>
+#include <netdb.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
#include "ftp_var.h"
diff -Nru src/util.c /home/spock/ftp/util.c
--- src/util.c Sat Jun 15 05:40:37 2002
+++ /home/spock/ftp/util.c Thu Jun 12 02:02:11 2003
@@ -1,7 +1,7 @@
-/* $NetBSD: util.c,v 1.107 2002/06/05 10:20:50 lukem Exp $ */
+/* $NetBSD: util.c,v 1.111 2003/02/28 09:54:51 lukem Exp $ */
/*-
- * Copyright (c) 1997-2002 The NetBSD Foundation, Inc.
+ * Copyright (c) 1997-2003 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
@@ -73,11 +73,36 @@
* SUCH DAMAGE.
*/
+#include <sys/cdefs.h>
+#ifndef lint
+__RCSID("$NetBSD: util.c,v 1.111 2003/02/28 09:54:51 lukem Exp $");
+#endif /* not lint */
+
/*
* FTP User Program -- Misc support routines
*/
-
-#include "lukemftp.h"
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+#include <sys/time.h>
+#include <netinet/in.h>
+#include <arpa/ftp.h>
+
+#include <ctype.h>
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <glob.h>
+#include <signal.h>
+#include <limits.h>
+#include <netdb.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <termios.h>
+#include <time.h>
+#include <tzfile.h>
+#include <unistd.h>
#include "ftp_var.h"
@@ -775,303 +800,6 @@
code = ocode;
}
-#ifndef NO_PROGRESS
-
-/*
- * return non-zero if we're the current foreground process
- */
-int
-foregroundproc(void)
-{
- static pid_t pgrp = -1;
-
- if (pgrp == -1)
-#if GETPGRP_VOID
- pgrp = getpgrp();
-#else /* ! GETPGRP_VOID */
- pgrp = getpgrp(0);
-#endif /* ! GETPGRP_VOID */
-
- return (tcgetpgrp(fileno(ttyout)) == pgrp);
-}
-
-
-static void updateprogressmeter(int);
-
-/*
- * SIGALRM handler to update the progress meter
- */
-static void
-updateprogressmeter(int dummy)
-{
- int oerrno = errno;
-
- progressmeter(0);
- errno = oerrno;
-}
-#endif /* NO_PROGRESS */
-
-
-/*
- * List of order of magnitude prefixes.
- * The last is `P', as 2^64 = 16384 Petabytes
- */
-static const char prefixes[] = " KMGTP";
-
-/*
- * Display a transfer progress bar if progress is non-zero.
- * SIGALRM is hijacked for use by this function.
- * - Before the transfer, set filesize to size of file (or -1 if unknown),
- * and call with flag = -1. This starts the once per second timer,
- * and a call to updateprogressmeter() upon SIGALRM.
- * - During the transfer, updateprogressmeter will call progressmeter
- * with flag = 0
- * - After the transfer, call with flag = 1
- */
-static struct timeval start;
-static struct timeval lastupdate;
-
-#define BUFLEFT (sizeof(buf) - len)
-
-void
-progressmeter(int flag)
-{
- static off_t lastsize;
-#ifndef NO_PROGRESS
- struct timeval now, td, wait;
- off_t cursize, abbrevsize, bytespersec;
- double elapsed;
- int ratio, barlength, i, len, remaining;
-
- /*
- * Work variables for progress bar.
- *
- * XXX: if the format of the progress bar changes
- * (especially the number of characters in the
- * `static' portion of it), be sure to update
- * these appropriately.
- */
- char buf[256]; /* workspace for progress bar */
-#define BAROVERHEAD 43 /* non `*' portion of progress bar */
- /*
- * stars should contain at least
- * sizeof(buf) - BAROVERHEAD entries
- */
- const char stars[] =
-"*****************************************************************************"
-"*****************************************************************************"
-"*****************************************************************************";
-
-#endif
-
- if (flag == -1) {
- (void)gettimeofday(&start, NULL);
- lastupdate = start;
- lastsize = restart_point;
- }
-#ifndef NO_PROGRESS
- if (!progress)
- return;
- len = 0;
-
- /*
- * print progress bar only if we are foreground process.
- */
- if (! foregroundproc())
- return;
-
- (void)gettimeofday(&now, NULL);
- cursize = bytes + restart_point;
- timersub(&now, &lastupdate, &wait);
- if (cursize > lastsize) {
- lastupdate = now;
- lastsize = cursize;
- wait.tv_sec = 0;
- }
-
- 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, "");
- }
- }
-
- abbrevsize = cursize;
- for (i = 0; abbrevsize >= 100000 && i < sizeof(prefixes); i++)
- abbrevsize >>= 10;
- len += snprintf(buf + len, BUFLEFT, " " LLFP("5") " %c%c ",
- (LLT)abbrevsize,
- prefixes[i],
- i == 0 ? ' ' : 'B');
-
- timersub(&now, &start, &td);
- elapsed = td.tv_sec + (td.tv_usec / 1000000.0);
-
- bytespersec = 0;
- if (bytes > 0) {
- bytespersec = bytes;
- if (elapsed > 0.0)
- bytespersec /= elapsed;
- }
- for (i = 1; bytespersec >= 1024000 && i < sizeof(prefixes); i++)
- bytespersec >>= 10;
- len += snprintf(buf + len, BUFLEFT,
- " " LLFP("3") ".%02d %cB/s ",
- (LLT)(bytespersec / 1024),
- (int)((bytespersec % 1024) * 100 / 1024),
- prefixes[i]);
-
- if (filesize > 0) {
- if (bytes <= 0 || elapsed <= 0.0 || cursize > filesize) {
- len += snprintf(buf + len, BUFLEFT, " --:-- ETA");
- } else if (flag == 1) {
- i = elapsed / SECSPERHOUR;
- if (i)
- len += snprintf(buf + len, BUFLEFT, "%2d:", i);
- else
- len += snprintf(buf + len, BUFLEFT, " ");
- i = (int)elapsed % SECSPERHOUR;
- len += snprintf(buf + len, BUFLEFT,
- "%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)
- len += snprintf(buf + len, BUFLEFT, "\n");
- (void)write(fileno(ttyout), buf, len);
-
- if (flag == -1) {
- (void)xsignal_restart(SIGALRM, updateprogressmeter, 1);
- alarmtimer(1); /* set alarm timer for 1 Hz */
- } else if (flag == 1) {
- (void)xsignal(SIGALRM, SIG_DFL);
- alarmtimer(0);
- }
-#endif /* !NO_PROGRESS */
-}
-
-/*
- * Display transfer statistics.
- * Requires start to be initialised by progressmeter(-1),
- * direction to be defined by xfer routines, and filesize and bytes
- * to be updated by xfer routines
- * If siginfo is nonzero, an ETA is displayed, and the output goes to stderr
- * instead of ttyout.
- */
-void
-ptransfer(int siginfo)
-{
- struct timeval now, td, wait;
- double elapsed;
- off_t bytespersec;
- int remaining, hh, i, len;
-
- char buf[256]; /* Work variable for transfer status. */
-
- if (!verbose && !progress && !siginfo)
- return;
-
- (void)gettimeofday(&now, NULL);
- timersub(&now, &start, &td);
- elapsed = td.tv_sec + (td.tv_usec / 1000000.0);
- bytespersec = 0;
- if (bytes > 0) {
- bytespersec = bytes;
- if (elapsed > 0.0)
- bytespersec /= elapsed;
- }
- len = 0;
- len += snprintf(buf + len, BUFLEFT, LLF " byte%s %s in ",
- (LLT)bytes, bytes == 1 ? "" : "s", direction);
- remaining = (int)elapsed;
- if (remaining > SECSPERDAY) {
- int days;
-
- days = remaining / SECSPERDAY;
- remaining %= SECSPERDAY;
- len += snprintf(buf + len, BUFLEFT,
- "%d day%s ", days, days == 1 ? "" : "s");
- }
- hh = remaining / SECSPERHOUR;
- remaining %= SECSPERHOUR;
- if (hh)
- len += snprintf(buf + len, BUFLEFT, "%2d:", hh);
- len += snprintf(buf + len, BUFLEFT,
- "%02d:%02d ", remaining / 60, remaining % 60);
-
- for (i = 1; bytespersec >= 1024000 && i < sizeof(prefixes); i++)
- bytespersec >>= 10;
- len += snprintf(buf + len, BUFLEFT, "(" LLF ".%02d %cB/s)",
- (LLT)(bytespersec / 1024),
- (int)((bytespersec % 1024) * 100 / 1024),
- prefixes[i]);
-
- if (siginfo && bytes > 0 && elapsed > 0.0 && filesize >= 0
- && bytes + restart_point <= filesize) {
- remaining = (int)((filesize - restart_point) /
- (bytes / elapsed) - elapsed);
- hh = remaining / SECSPERHOUR;
- remaining %= SECSPERHOUR;
- len += snprintf(buf + len, BUFLEFT, " ETA: ");
- if (hh)
- len += snprintf(buf + len, BUFLEFT, "%2d:", hh);
- len += snprintf(buf + len, BUFLEFT, "%02d:%02d",
- remaining / 60, remaining % 60);
- timersub(&now, &lastupdate, &wait);
- if (wait.tv_sec >= STALLTIME)
- len += snprintf(buf + len, BUFLEFT, " (stalled)");
- }
- len += snprintf(buf + len, BUFLEFT, "\n");
- (void)write(siginfo ? STDERR_FILENO : fileno(ttyout), buf, len);
-}
-
-/*
- * SIG{INFO,QUIT} handler to print transfer stats if a transfer is in progress
- */
-void
-psummary(int notused)
-{
- int oerrno = errno;
-
- if (bytes > 0) {
- if (fromatty)
- write(fileno(ttyout), "\n", 1);
- ptransfer(1);
- }
- errno = oerrno;
-}
/*
* List words in stringlist, vertically arranged
@@ -1158,20 +886,6 @@
/*
- * Set the SIGALRM interval timer for wait seconds, 0 to disable.
- */
-void
-alarmtimer(int wait)
-{
- struct itimerval itv;
-
- itv.it_value.tv_sec = wait;
- itv.it_value.tv_usec = 0;
- itv.it_interval = itv.it_value;
- setitimer(ITIMER_REAL, &itv, NULL);
-}
-
-/*
* Setup or cleanup EditLine structures
*/
#ifndef NO_EDITCOMPLETE
@@ -1552,85 +1266,4 @@
if (s == NULL)
err(1, "Unable to allocate memory for string copy");
return (s);
-}
-
-/*
- * Install a POSIX signal handler, allowing the invoker to set whether
- * the signal should be restartable or not
- */
-sigfunc
-xsignal_restart(int sig, sigfunc func, int restartable)
-{
-#ifdef ultrix /* XXX: this is lame - how do we test sigvec vs. sigaction? */
- struct sigvec vec, ovec;
-
- vec.sv_handler = func;
- sigemptyset(&vec.sv_mask);
- vec.sv_flags = 0;
- if (sigvec(sig, &vec, &ovec) < 0)
- return (SIG_ERR);
- return (ovec.sv_handler);
-#else /* ! ultrix */
- struct sigaction act, oact;
- act.sa_handler = func;
-
- sigemptyset(&act.sa_mask);
-#if defined(SA_RESTART) /* 4.4BSD, Posix(?), SVR4 */
- act.sa_flags = restartable ? SA_RESTART : 0;
-#elif defined(SA_INTERRUPT) /* SunOS 4.x */
- act.sa_flags = restartable ? 0 : SA_INTERRUPT;
-#else
-#error "system must have SA_RESTART or SA_INTERRUPT"
-#endif
- if (sigaction(sig, &act, &oact) < 0)
- return (SIG_ERR);
- return (oact.sa_handler);
-#endif /* ! ultrix */
-}
-
-/*
- * Install a signal handler with the `restartable' flag set dependent upon
- * which signal is being set. (This is a wrapper to xsignal_restart())
- */
-sigfunc
-xsignal(int sig, sigfunc func)
-{
- int restartable;
-
- /*
- * Some signals print output or change the state of the process.
- * There should be restartable, so that reads and writes are
- * not affected. Some signals should cause program flow to change;
- * these signals should not be restartable, so that the system call
- * will return with EINTR, and the program will go do something
- * different. If the signal handler calls longjmp() or siglongjmp(),
- * it doesn't matter if it's restartable.
- */
-
- switch(sig) {
-#ifdef SIGINFO
- case SIGINFO:
-#endif
- case SIGQUIT:
- case SIGUSR1:
- case SIGUSR2:
- case SIGWINCH:
- restartable = 1;
- break;
-
- case SIGALRM:
- case SIGINT:
- case SIGPIPE:
- restartable = 0;
- break;
-
- default:
- /*
- * This is unpleasant, but I don't know what would be better.
- * Right now, this "can't happen"
- */
- errx(1, "xsignal_restart called with signal %d", sig);
- }
-
- return(xsignal_restart(sig, func, restartable));
}
diff -Nru src/version.h /home/spock/ftp/version.h
--- src/version.h Sat Jun 15 05:40:37 2002
+++ /home/spock/ftp/version.h Thu Jun 12 02:02:11 2003
@@ -1,6 +1,6 @@
-/* $NetBSD: version.h,v 1.29 2002/06/05 10:20:51 lukem Exp $ */
+/* $NetBSD: version.h,v 1.30 2003/02/28 09:54:20 lukem Exp $ */
/*-
- * Copyright (c) 1999-2002 The NetBSD Foundation, Inc.
+ * Copyright (c) 1999-2003 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 "20020605"
+#define FTP_VERSION "20030228"
#endif