mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-25 11:37:56 +00:00
1796d6118b
header file differences between FBSD and NBSD. Like lukemftpd, the portable version of lukemftp lags too far behind CVS. This import includes several big fixes plus a cleaned up manpage.
3501 lines
122 KiB
Plaintext
3501 lines
122 KiB
Plaintext
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
|