- add "-s src_addr" option to allow setting of the source IP address;
- fix two minor bugs; - slightly cleanup manpage.
This commit is contained in:
parent
cce2eb6a97
commit
f62092b8c3
@ -1,4 +1,4 @@
|
||||
# $Id: Makefile,v 1.7 1997/10/05 09:39:55 jkh Exp $
|
||||
# $Id: Makefile,v 1.8 1997/12/13 20:38:12 pst Exp $
|
||||
# $NetBSD: Makefile,v 1.15 1997/10/18 15:31:20 lukem Exp $
|
||||
# from: @(#)Makefile 8.2 (Berkeley) 4/3/94
|
||||
|
||||
@ -9,7 +9,6 @@
|
||||
PROG= ftp
|
||||
SRCS= cmds.c cmdtab.c complete.c domacro.c fetch.c ftp.c main.c ruserpass.c \
|
||||
util.c
|
||||
CFLAGS+=-I${.CURDIR}/../../contrib-crypto/telnet
|
||||
|
||||
LDADD+= -ledit -ltermcap
|
||||
DPADD+= ${LIBEDIT} ${LIBTERMCAP}
|
||||
|
@ -38,7 +38,7 @@
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#ifndef lint
|
||||
__RCSID("$Id: fetch.c,v 1.4 1997/12/16 08:22:35 ache Exp $");
|
||||
__RCSID("$Id: fetch.c,v 1.5 1997/12/16 08:58:15 ache Exp $");
|
||||
__RCSID_SOURCE("$NetBSD: fetch.c,v 1.16.2.1 1997/11/18 01:00:22 mellon Exp $");
|
||||
#endif /* not lint */
|
||||
|
||||
@ -223,6 +223,12 @@ url_get(origline, proxyenv)
|
||||
goto cleanup_url_get;
|
||||
}
|
||||
|
||||
if (dobind && bind(s, (struct sockaddr *)&bindto,
|
||||
sizeof(bindto)) == -1) {
|
||||
warn("Can't bind to %s", inet_ntoa(bindto.sin_addr));
|
||||
goto cleanup_url_get;
|
||||
}
|
||||
|
||||
if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
|
||||
warn("Can't connect to %s", host);
|
||||
goto cleanup_url_get;
|
||||
|
@ -1,4 +1,4 @@
|
||||
.\" $Id: ftp.1,v 1.7 1997/12/13 20:38:17 pst Exp $
|
||||
.\" $Id: ftp.1,v 1.8 1998/03/01 18:58:03 steve Exp $
|
||||
.\" $NetBSD: ftp.1,v 1.21 1997/06/10 21:59:58 lukem Exp $
|
||||
.\"
|
||||
.\" Copyright (c) 1985, 1989, 1990, 1993
|
||||
@ -44,18 +44,9 @@
|
||||
file transfer program
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Op Fl a
|
||||
.Op Fl d
|
||||
.Op Fl e
|
||||
.Op Fl g
|
||||
.Op Fl i
|
||||
.Op Fl n
|
||||
.Op Fl U
|
||||
.Op Fl p
|
||||
.Op Fl adeginptUvV
|
||||
.Op Fl P Ar port
|
||||
.Op Fl t
|
||||
.Op Fl v
|
||||
.Op Fl V
|
||||
.Op Fl s Ar src_addr
|
||||
.Op Ar host Op Ar port
|
||||
.Nm ftp
|
||||
ftp://[\fIuser\fR:\fIpassword\fR@]\fIhost\fR[:\fIport\fR]/\fIfile\fR[/]
|
||||
@ -80,7 +71,7 @@ below for more information.
|
||||
.Pp
|
||||
Options may be specified at the command line, or to the
|
||||
command interpreter.
|
||||
.Bl -tag -width "port "
|
||||
.Bl -tag -width Fl
|
||||
.It Fl a
|
||||
Causes
|
||||
.Nm
|
||||
@ -91,8 +82,6 @@ Enables debugging.
|
||||
Disables command line editing.
|
||||
.It Fl g
|
||||
Disables file name globbing.
|
||||
.It Fl U
|
||||
Disable data port range restrictions.
|
||||
.It Fl i
|
||||
Turns off interactive prompting during
|
||||
multiple file transfers.
|
||||
@ -114,15 +103,21 @@ will prompt for the remote machine login name (default is the user
|
||||
identity on the local machine), and, if necessary, prompt for a password
|
||||
and an account with which to login.
|
||||
.It Fl p
|
||||
Enable passive mode operation for use behind connection filtering firewalls.
|
||||
Enables passive mode operation for use behind connection filtering firewalls.
|
||||
Using the
|
||||
.Nm pftp
|
||||
command has the same effect.
|
||||
.It Fl P Ar port
|
||||
Sets the port number to
|
||||
.Ar port .
|
||||
.It Fl s Ar src_addr
|
||||
Sets the local IP address for all connections to
|
||||
.Ar src_addr ,
|
||||
which can be an IP address or a host name.
|
||||
.It Fl t
|
||||
Enables packet tracing.
|
||||
.It Fl U
|
||||
Disable data port range restrictions.
|
||||
.It Fl v
|
||||
Enable verbose mode.
|
||||
This is the default if input is from a terminal.
|
||||
@ -184,7 +179,7 @@ setting.
|
||||
File transfer uses the current settings for
|
||||
.Ic type ,
|
||||
.Ic format ,
|
||||
.Ic mode ,
|
||||
.Ic mode
|
||||
and
|
||||
.Ic structure .
|
||||
.It Ic ascii
|
||||
@ -262,7 +257,7 @@ on the remote machine.
|
||||
Toggle debugging mode.
|
||||
If an optional
|
||||
.Ar debug-value
|
||||
is specified it is used to set the debugging level.
|
||||
is specified, it is used to set the debugging level.
|
||||
When debugging is on,
|
||||
.Nm
|
||||
prints each command sent to the remote machine, preceded
|
||||
@ -322,14 +317,14 @@ file name is not specified, it is given the same
|
||||
name it has on the remote machine, subject to
|
||||
alteration by the current
|
||||
.Ic case ,
|
||||
.Ic ntrans ,
|
||||
.Ic ntrans
|
||||
and
|
||||
.Ic nmap
|
||||
settings.
|
||||
The current settings for
|
||||
.Ic type ,
|
||||
.Ic form ,
|
||||
.Ic mode ,
|
||||
.Ic mode
|
||||
and
|
||||
.Ic structure
|
||||
are used while transferring the file.
|
||||
@ -479,7 +474,7 @@ See
|
||||
for details on the filename expansion.
|
||||
Resulting file names will then be processed according to
|
||||
.Ic case ,
|
||||
.Ic ntrans ,
|
||||
.Ic ntrans
|
||||
and
|
||||
.Ic nmap
|
||||
settings.
|
||||
@ -611,7 +606,7 @@ Spaces may be included in
|
||||
.Ar outpattern ,
|
||||
as in the example: `nmap $1 sed "s/ *$//" > $1' .
|
||||
Use the `\e' character to prevent special treatment
|
||||
of the `$','[',']', and `,' characters.
|
||||
of the `$','[',']' and `,' characters.
|
||||
.It Ic ntrans Op Ar inchars Op Ar outchars
|
||||
Set or unset the filename character translation mechanism.
|
||||
If no arguments are specified, the filename character
|
||||
@ -759,7 +754,7 @@ and
|
||||
transfer files from the host on the primary control connection
|
||||
to the host on the secondary control connection, and
|
||||
.Ic put ,
|
||||
.Ic mput ,
|
||||
.Ic mput
|
||||
and
|
||||
.Ic append
|
||||
transfer files from the host on the secondary control connection
|
||||
@ -782,7 +777,7 @@ File transfer uses the
|
||||
current settings for
|
||||
.Ic type ,
|
||||
.Ic format ,
|
||||
.Ic mode ,
|
||||
.Ic mode
|
||||
and
|
||||
.Ic structure .
|
||||
.It Ic pwd
|
||||
@ -859,7 +854,7 @@ to the client host on a separate data port. In previous versions, that
|
||||
remote port fell in the range 1024..4999. However, most firewall setups
|
||||
filter that range of TCP ports because other services reside there.
|
||||
The default behavior now is for the client to request that the server
|
||||
connect back to the client using the port range 40000..44999. Firewall
|
||||
connect back to the client using the port range 49152..65535. Firewall
|
||||
administrators can chose to allow TCP connections in that range, if they
|
||||
deem it to not be a security risk.
|
||||
.It Ic rmdir Ar directory-name
|
||||
@ -1153,7 +1148,9 @@ must be quoted; e.g.
|
||||
A particularly
|
||||
useful example of this mechanism is: \*(Lqdir \&|more\*(Rq.
|
||||
.It
|
||||
Failing the above checks, if ``globbing'' is enabled,
|
||||
Failing the above checks, if
|
||||
.Dq globbing
|
||||
is enabled,
|
||||
local file names are expanded
|
||||
according to the rules used in the
|
||||
.Xr csh 1 ;
|
||||
@ -1162,7 +1159,7 @@ c.f. the
|
||||
command.
|
||||
If the
|
||||
.Nm
|
||||
command expects a single local file (.e.g.
|
||||
command expects a single local file (e.g.
|
||||
.Ic put ) ,
|
||||
only the first filename generated by the "globbing" operation is used.
|
||||
.It
|
||||
@ -1201,7 +1198,7 @@ affect a file transfer.
|
||||
The
|
||||
.Ic type
|
||||
may be one of \*(Lqascii\*(Rq, \*(Lqimage\*(Rq (binary),
|
||||
\*(Lqebcdic\*(Rq, and \*(Lqlocal byte size\*(Rq (for
|
||||
\*(Lqebcdic\*(Rq and \*(Lqlocal byte size\*(Rq (for
|
||||
.Tn PDP Ns -10's
|
||||
and
|
||||
.Tn PDP Ns -20's
|
||||
@ -1216,7 +1213,7 @@ mode transfers.
|
||||
supports only the default values for the remaining
|
||||
file transfer parameters:
|
||||
.Ic mode ,
|
||||
.Ic form ,
|
||||
.Ic form
|
||||
and
|
||||
.Ic struct .
|
||||
.Sh THE .netrc FILE
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: ftp.c,v 1.14 1998/07/26 18:49:36 imp Exp $ */
|
||||
/* $Id: ftp.c,v 1.15 1998/12/09 20:49:20 eivind Exp $ */
|
||||
/* $NetBSD: ftp.c,v 1.29.2.1 1997/11/18 01:01:04 mellon Exp $ */
|
||||
|
||||
/*
|
||||
@ -39,7 +39,7 @@
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)ftp.c 8.6 (Berkeley) 10/27/94";
|
||||
#else
|
||||
__RCSID("$Id: ftp.c,v 1.14 1998/07/26 18:49:36 imp Exp $");
|
||||
__RCSID("$Id: ftp.c,v 1.15 1998/12/09 20:49:20 eivind Exp $");
|
||||
__RCSID_SOURCE("$NetBSD: ftp.c,v 1.29.2.1 1997/11/18 01:01:04 mellon Exp $");
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
@ -110,34 +110,30 @@ hookup(host, port)
|
||||
}
|
||||
hostnamebuf[sizeof(hostnamebuf) - 1] = '\0';
|
||||
hostname = hostnamebuf;
|
||||
s = socket(hisctladdr.sin_family, SOCK_STREAM, 0);
|
||||
if (s < 0) {
|
||||
warn("socket");
|
||||
code = -1;
|
||||
return (0);
|
||||
}
|
||||
hisctladdr.sin_port = port;
|
||||
while (connect(s, (struct sockaddr *)&hisctladdr,
|
||||
sizeof(hisctladdr)) < 0) {
|
||||
if (hp && hp->h_addr_list[1]) {
|
||||
int oerrno = errno;
|
||||
char *ia;
|
||||
|
||||
ia = inet_ntoa(hisctladdr.sin_addr);
|
||||
errno = oerrno;
|
||||
warn("connect to address %s", ia);
|
||||
hp->h_addr_list++;
|
||||
while (1) {
|
||||
if ((s = socket(hisctladdr.sin_family, SOCK_STREAM, 0)) == -1) {
|
||||
warn("socket");
|
||||
code = -1;
|
||||
return (0);
|
||||
}
|
||||
if (dobind && bind(s, (struct sockaddr *)&bindto,
|
||||
sizeof(bindto)) == -1) {
|
||||
warn("bind");
|
||||
code = -1;
|
||||
goto bad;
|
||||
}
|
||||
if (connect(s, (struct sockaddr *)&hisctladdr,
|
||||
sizeof(hisctladdr)) == 0)
|
||||
break;
|
||||
if (hp && *++hp->h_addr_list) {
|
||||
warnc(errno, "connect to address %s",
|
||||
inet_ntoa(hisctladdr.sin_addr));
|
||||
memcpy(&hisctladdr.sin_addr, hp->h_addr_list[0],
|
||||
MIN(hp->h_length,sizeof(hisctladdr.sin_addr)));
|
||||
printf("Trying %s...\n",
|
||||
inet_ntoa(hisctladdr.sin_addr));
|
||||
(void)close(s);
|
||||
s = socket(hisctladdr.sin_family, SOCK_STREAM, 0);
|
||||
if (s < 0) {
|
||||
warn("socket");
|
||||
code = -1;
|
||||
return (0);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
warn("connect");
|
||||
@ -1093,6 +1089,11 @@ initconn()
|
||||
warn("socket");
|
||||
return (1);
|
||||
}
|
||||
if (dobind && bind(data, (struct sockaddr *)&bindto,
|
||||
sizeof(bindto)) == -1) {
|
||||
warn("bind");
|
||||
goto bad;
|
||||
}
|
||||
if ((options & SO_DEBUG) &&
|
||||
setsockopt(data, SOL_SOCKET, SO_DEBUG, (char *)&on,
|
||||
sizeof(on)) < 0)
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id$ */
|
||||
/* $Id: ftp_var.h,v 1.6 1997/12/13 20:38:18 pst Exp $ */
|
||||
/* $NetBSD: ftp_var.h,v 1.20.2.1 1997/11/18 01:01:37 mellon Exp $ */
|
||||
|
||||
/*
|
||||
@ -43,6 +43,7 @@
|
||||
#include <sys/param.h>
|
||||
#include <setjmp.h>
|
||||
#include <stringlist.h>
|
||||
#include <netinet/in.h>
|
||||
|
||||
#ifndef SMALL
|
||||
#include <histedit.h>
|
||||
@ -141,6 +142,9 @@ u_int16_t ftpport; /* port number to use for ftp connections */
|
||||
u_int16_t httpport; /* port number to use for http connections */
|
||||
u_int16_t gateport; /* port number to use for gateftp connections */
|
||||
|
||||
int dobind; /* bind to specific address */
|
||||
struct sockaddr_in bindto; /* address to bind to */
|
||||
|
||||
jmp_buf toplevel; /* non-local goto stuff for cmd scanner */
|
||||
|
||||
char line[FTPBUFLEN]; /* input line buffer */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: main.c,v 1.16 1997/12/13 20:38:19 pst Exp $ */
|
||||
/* $Id: main.c,v 1.17 1999/06/07 16:35:15 des Exp $ */
|
||||
/* $NetBSD: main.c,v 1.26 1997/10/14 16:31:22 christos Exp $ */
|
||||
|
||||
/*
|
||||
@ -44,7 +44,7 @@ __COPYRIGHT("@(#) Copyright (c) 1985, 1989, 1993, 1994\n\
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)main.c 8.6 (Berkeley) 10/9/94";
|
||||
#else
|
||||
__RCSID("$Id: main.c,v 1.16 1997/12/13 20:38:19 pst Exp $");
|
||||
__RCSID("$Id: main.c,v 1.17 1999/06/07 16:35:15 des Exp $");
|
||||
__RCSID_SOURCE("$NetBSD: main.c,v 1.26 1997/10/14 16:31:22 christos Exp $");
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
@ -54,6 +54,8 @@ __RCSID_SOURCE("$NetBSD: main.c,v 1.26 1997/10/14 16:31:22 christos Exp $");
|
||||
*/
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include <err.h>
|
||||
#include <locale.h>
|
||||
@ -80,6 +82,7 @@ main(argc, argv)
|
||||
struct passwd *pw = NULL;
|
||||
char *cp, *ep, homedir[MAXPATHLEN], *s;
|
||||
int dumbterm;
|
||||
char *src_addr = NULL;
|
||||
|
||||
(void) setlocale(LC_ALL, "");
|
||||
|
||||
@ -166,7 +169,7 @@ main(argc, argv)
|
||||
if (isatty(fileno(stdout)) && !dumbterm)
|
||||
progress = 1; /* progress bar on if tty is usable */
|
||||
|
||||
while ((ch = getopt(argc, argv, "adeginpP:tvVU")) != -1) {
|
||||
while ((ch = getopt(argc, argv, "adeginpP:s:tUvV")) != -1) {
|
||||
switch (ch) {
|
||||
case 'a':
|
||||
anonftp = 1;
|
||||
@ -207,10 +210,19 @@ main(argc, argv)
|
||||
ftpport = htons(port);
|
||||
break;
|
||||
|
||||
case 's':
|
||||
dobind = 1;
|
||||
src_addr = optarg;
|
||||
break;
|
||||
|
||||
case 't':
|
||||
trace = 1;
|
||||
break;
|
||||
|
||||
case 'U':
|
||||
restricted_data_ports = 0;
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
verbose = 1;
|
||||
break;
|
||||
@ -219,10 +231,6 @@ main(argc, argv)
|
||||
verbose = 0;
|
||||
break;
|
||||
|
||||
case 'U':
|
||||
restricted_data_ports = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
usage();
|
||||
}
|
||||
@ -234,6 +242,21 @@ main(argc, argv)
|
||||
proxy = 0; /* proxy not active */
|
||||
crflag = 1; /* strip c.r. on ascii gets */
|
||||
sendport = -1; /* not using ports */
|
||||
|
||||
if (dobind) {
|
||||
memset((void *)&bindto, 0, sizeof(bindto));
|
||||
if (inet_aton(src_addr, &bindto.sin_addr) == 1)
|
||||
bindto.sin_family = AF_INET;
|
||||
else {
|
||||
struct hostent *hp = gethostbyname(src_addr);
|
||||
if (hp == NULL)
|
||||
errx(1, "%s: %s", src_addr, hstrerror(h_errno));
|
||||
bindto.sin_family = hp->h_addrtype;
|
||||
memcpy(&bindto.sin_addr, hp->h_addr_list[0],
|
||||
MIN(hp->h_length,sizeof(bindto.sin_addr)));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Set up the home directory in case we're globbing.
|
||||
*/
|
||||
@ -263,18 +286,21 @@ main(argc, argv)
|
||||
if (rval >= 0) /* -1 == connected and cd-ed */
|
||||
exit(rval);
|
||||
} else {
|
||||
char *xargv[5];
|
||||
char *xargv[4], **xargp = xargv;
|
||||
|
||||
#ifdef __GNUC__ /* XXX: to shut up gcc warnings */
|
||||
(void)&xargp;
|
||||
#endif
|
||||
if (setjmp(toplevel))
|
||||
exit(0);
|
||||
(void)signal(SIGINT, (sig_t)intr);
|
||||
(void)signal(SIGPIPE, (sig_t)lostpeer);
|
||||
xargv[0] = __progname;
|
||||
xargv[1] = argv[0];
|
||||
xargv[2] = argv[1];
|
||||
xargv[3] = argv[2];
|
||||
xargv[4] = NULL;
|
||||
setpeer(argc+1, xargv);
|
||||
*xargp++ = __progname;
|
||||
*xargp++ = argv[0]; /* host */
|
||||
if (argc > 1)
|
||||
*xargp++ = argv[1]; /* port */
|
||||
*xargp = NULL;
|
||||
setpeer(xargp-xargv, xargv);
|
||||
}
|
||||
}
|
||||
#ifndef SMALL
|
||||
@ -688,7 +714,7 @@ void
|
||||
usage()
|
||||
{
|
||||
(void)fprintf(stderr,
|
||||
"usage: %s [-adeginptvV] [host [port]]\n"
|
||||
"usage: %s [-adeginptUvV] [-P port] [-s src_addr] [host [port]]\n"
|
||||
" %s host:path[/]\n"
|
||||
" %s ftp://host[:port]/path[/]\n"
|
||||
" %s http://host[:port]/file\n",
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: util.c,v 1.5 1998/02/03 20:53:25 pst Exp $ */
|
||||
/* $Id: util.c,v 1.6 1998/07/19 00:01:24 jmz Exp $ */
|
||||
/* $NetBSD: util.c,v 1.16.2.1 1997/11/18 01:02:33 mellon Exp $ */
|
||||
|
||||
/*
|
||||
@ -36,7 +36,7 @@
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#ifndef lint
|
||||
__RCSID("$Id: util.c,v 1.5 1998/02/03 20:53:25 pst Exp $");
|
||||
__RCSID("$Id: util.c,v 1.6 1998/07/19 00:01:24 jmz Exp $");
|
||||
__RCSID_SOURCE("$NetBSD: util.c,v 1.16.2.1 1997/11/18 01:02:33 mellon Exp $");
|
||||
#endif /* not lint */
|
||||
|
||||
@ -101,7 +101,7 @@ setpeer(argc, argv)
|
||||
|
||||
nport = strtol(argv[2], &ep, 10);
|
||||
if (nport < 1 || nport > 0xffff || *ep != '\0') {
|
||||
printf("%s: bad port number '%s'.\n", argv[1], argv[2]);
|
||||
printf("%s: bad port number '%s'.\n", argv[0], argv[2]);
|
||||
printf("usage: %s host-name [port]\n", argv[0]);
|
||||
code = -1;
|
||||
return;
|
||||
|
Loading…
x
Reference in New Issue
Block a user