diff options
Diffstat (limited to 'contrib/lukemftp/diffout')
-rw-r--r-- | contrib/lukemftp/diffout | 3500 |
1 files changed, 0 insertions, 3500 deletions
diff --git a/contrib/lukemftp/diffout b/contrib/lukemftp/diffout deleted file mode 100644 index 932f748..0000000 --- a/contrib/lukemftp/diffout +++ /dev/null @@ -1,3500 +0,0 @@ -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 |