aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey A. Chernov <ache@FreeBSD.org>1994-12-24 01:01:48 +0000
committerAndrey A. Chernov <ache@FreeBSD.org>1994-12-24 01:01:48 +0000
commit9b786fc227877597fd802e51e7f2e7cc25849685 (patch)
tree3f2632c3d965e0d55b021b32bf8c8bee171a2249
parent5d9b1b20cbb0bf76d66eaef20b9d67e57b0ebae1 (diff)
downloadsrc-9b786fc227877597fd802e51e7f2e7cc25849685.tar.gz
src-9b786fc227877597fd802e51e7f2e7cc25849685.zip
Notes
Notes: svn path=/vendor/ncftp/dist/; revision=5216 svn path=/vendor/ncftp/1.9.0/; revision=5218; tag=vendor/ncftp/1.9.0
-rw-r--r--usr.bin/ncftp/cmds.c11
-rw-r--r--usr.bin/ncftp/cmds.h2
-rw-r--r--usr.bin/ncftp/cmdtab.c5
-rw-r--r--usr.bin/ncftp/defaults.h4
-rw-r--r--usr.bin/ncftp/ftp.c69
-rw-r--r--usr.bin/ncftp/main.c6
-rw-r--r--usr.bin/ncftp/patchlevel.h16
-rw-r--r--usr.bin/ncftp/set.c3
-rw-r--r--usr.bin/ncftp/tips.c8
9 files changed, 72 insertions, 52 deletions
diff --git a/usr.bin/ncftp/cmds.c b/usr.bin/ncftp/cmds.c
index d576803ea19f..564c79910ea1 100644
--- a/usr.bin/ncftp/cmds.c
+++ b/usr.bin/ncftp/cmds.c
@@ -36,14 +36,12 @@
#include "copyright.h"
/* cmds.c globals */
-#ifdef PASSIVEMODE
-int passivemode; /* no reverse FTP connections */
-#endif
int curtype; /* file transfer type */
char *typeabbrs = "abiet";
str32 curtypename; /* name of file transfer type */
int verbose; /* verbosity level of output */
int mprompt; /* interactively prompt on m* cmds */
+int passivemode; /* no reverse FTP connections */
int debug; /* debugging level */
int options; /* used during socket creation */
int macnum; /* number of defined macros */
@@ -52,7 +50,9 @@ int creating = 0;
struct macel macros[MAXMACROS];
char *macbuf; /* holds ALL macros */
int doingInitMacro = 0; /* TRUE if executing "init" macro. */
+static char pad1a[8] = "Pad 1a";
jmp_buf jabort;
+static char pad1b[8] = "Pad 1b";
char *mname; /* name of current m* command */
int activemcmd; /* flag: if != 0, then active multi command */
int warnNoLSFlagsWithWildcards = 0;
@@ -2059,9 +2059,6 @@ int show_version(int argc, char **argv)
#ifdef NET_ERRNO_H
DStrs[nDStrs++] = "NET_ERRNO_H";
#endif
-#ifdef PASSIVEMODE
- DStrs[nDStrs++] = "PASSIVEMODE";
-#endif
/* DONE with #ifdefs for now! */
@@ -2215,14 +2212,12 @@ int unimpl(int argc, char **argv)
return (NOERR);
} /* unimpl */
-#ifdef PASSIVEMODE
int setpassive(int argc, char **argv)
{
passivemode = !passivemode;
printf( "Passive mode %s.\n", (passivemode ? "ON" : "OFF") );
return NOERR;
}
-#endif
/* eof cmds.c */
diff --git a/usr.bin/ncftp/cmds.h b/usr.bin/ncftp/cmds.h
index 11dff6acc06d..0f8bce0b65fe 100644
--- a/usr.bin/ncftp/cmds.h
+++ b/usr.bin/ncftp/cmds.h
@@ -121,9 +121,7 @@ int unimpl(int argc, char **argv);
long GetDateSizeFromLSLine(char *fName, unsigned long *mod_time);
long GetDateAndSize(char *fName, unsigned long *mod_time);
int SetTypeByNumber(int i);
-#ifdef PASSIVEMODE
int setpassive(int argc, char **argv);
-#endif
/* In util.c: */
diff --git a/usr.bin/ncftp/cmdtab.c b/usr.bin/ncftp/cmdtab.c
index d4e161f3fcc5..86d4a5fce9b7 100644
--- a/usr.bin/ncftp/cmdtab.c
+++ b/usr.bin/ncftp/cmdtab.c
@@ -90,10 +90,7 @@ Examples:\n\
#define PAGEHELP "view a file on the remote host with your $PAGER"
#define PAGEUSAGE REMOTEFILE
-#ifdef PASSIVEMODE
#define PASSIVEHELP "enter passive transfer mode"
-#endif
-
#define PDIRUSAGE " [flags] [remote-files]"
@@ -191,9 +188,7 @@ struct cmd cmdtab[] = {
{ "ntrans", 0, 1, unimpl, UNIMPLHELP, UNIMPLUSAGE },
{ "open", 0, 0, cmdOpen, OPENHELP, OPENUSAGE },
{ "p", 1, 1, get, PAGEHELP, PAGEUSAGE },
-#ifdef PASSIVEMODE
{ "passive", 0, 0, setpassive, PASSIVEHELP, EMPTYSTR },
-#endif
{ "page", 1, 0, get, PAGEHELP, PAGEUSAGE },
{ "pdir", 1, 0, ls,
"view a remote directory listing (long mode) with your $PAGER",
diff --git a/usr.bin/ncftp/defaults.h b/usr.bin/ncftp/defaults.h
index f3fbb0814cda..5ce57784a43b 100644
--- a/usr.bin/ncftp/defaults.h
+++ b/usr.bin/ncftp/defaults.h
@@ -44,10 +44,6 @@
#define dMPROMPT 0
#endif
-#ifndef PASSIVEMODE
-#define PASSIVEMODE 1
-#endif
-
/* If passive FTP can be used, this specifies whether it is turned on
* by default. If not, we have passive mode available, but are using
* Port ftp by default.
diff --git a/usr.bin/ncftp/ftp.c b/usr.bin/ncftp/ftp.c
index fe35d1a6272f..ecb2136280d2 100644
--- a/usr.bin/ncftp/ftp.c
+++ b/usr.bin/ncftp/ftp.c
@@ -64,10 +64,15 @@ int abrtflag = 0;
struct sockaddr_in myctladdr;
FILE *cin = NULL, *cout = NULL;
char *reply_string = NULL;
-jmp_buf sendabort, recvabort;
+static char pad3a[8] = "Pad 3a"; /* For SunOS :-( */
+jmp_buf sendabort;
+static char pad3b[8] = "Pad 3b";
+jmp_buf recvabort;
+static char pad3c[8] = "Pad 3c";
int progress_meter = dPROGRESS;
int cur_progress_meter;
int sendport = -1; /* use PORT cmd for each data connection */
+int using_pasv;
int code; /* return/reply code for ftp command */
string indataline;
int cpend; /* flag: if != 0, then pending server reply */
@@ -99,9 +104,7 @@ extern struct userinfo uinfo;
extern struct macel macros[];
extern struct lslist *lshead, *lstail;
extern int is_ls;
-#ifdef PASSIVEMODE
extern int passivemode;
-#endif
#ifdef GATEWAY
extern string gateway;
@@ -244,6 +247,7 @@ int hookup(char *host, unsigned int port)
#endif /* SO_OOBINLINE */
hErr = 0;
+ using_pasv = passivemode; /* Re-init for each new connection. */
goto done;
bad:
@@ -564,6 +568,8 @@ int getreply(int expecteof)
} /* end for(;;) #2 */
*cp = '\0';
+ dbprintf("rsp: %s", reply_string);
+
switch (verbose) {
case V_QUIET:
/* Don't print anything. */
@@ -1693,31 +1699,20 @@ int initconn(void)
int on = 1, rval;
string str;
Sig_t oldintr;
-#ifdef PASSIVEMODE
+ char *cp;
int a1, a2, a3, a4, p1, p2;
unsigned char n[6];
-#endif
oldintr = Signal(SIGINT, SIG_IGN);
-#ifdef PASSIVEMODE
- if (passivemode) {
- data = socket(AF_INET, SOCK_STREAM, 0);
- if (data < 0) {
- PERROR("initconn", "socket");
- rval = 1;
- goto Return;
- }
- if (options & SO_DEBUG &&
- setsockopt(data, SOL_SOCKET, SO_DEBUG, (char *)&on, sizeof(on)) < 0 ) {
- PERROR("initconn", "setscokopt (ignored)");
- }
+ if (using_pasv) {
result = command("PASV");
if (result != COMPLETE) {
printf("Passive mode refused.\n");
- rval = 1;
- goto Return;
+ using_pasv = 0;
+ goto TryPort;
}
+
/*
* What we've got here is a string of comma separated one-byte
* unsigned integer values. The first four are the IP address,
@@ -1725,12 +1720,28 @@ int initconn(void)
* LSB of the port address. Extract this data and prepare a
* 'data_addr' (struct sockaddr_in).
*/
- if (sscanf(reply_string+27, "%d,%d,%d,%d,%d,%d",
+ for (cp = reply_string + 4; *cp != '\0'; cp++)
+ if (isdigit(*cp))
+ break;
+
+ if (sscanf(cp, "%d,%d,%d,%d,%d,%d",
&a1, &a2, &a3, &a4, &p1, &p2) != 6) {
printf("Cannot parse PASV response: %s\n", reply_string);
+ using_pasv = 0;
+ goto TryPort;
+ }
+
+ data = socket(AF_INET, SOCK_STREAM, 0);
+ if (data < 0) {
+ PERROR("initconn", "socket");
rval = 1;
goto Return;
}
+ if (options & SO_DEBUG &&
+ setsockopt(data, SOL_SOCKET, SO_DEBUG, (char *)&on, sizeof(on)) < 0 ) {
+ PERROR("initconn", "setscokopt (ignored)");
+ }
+
n[0] = (unsigned char) a1;
n[1] = (unsigned char) a2;
n[2] = (unsigned char) a3;
@@ -1743,6 +1754,14 @@ int initconn(void)
bcopy( (void *)&n[4], (void *)&data_addr.sin_port, 2 );
if (Connect( data, &data_addr, sizeof(data_addr) ) < 0 ) {
+ if (errno == ECONNREFUSED) {
+ dbprintf("Could not connect to port specified by server;\n");
+ dbprintf("Falling back to PORT mode.\n");
+ close(data);
+ data = -1;
+ using_pasv = 0;
+ goto TryPort;
+ }
PERROR("initconn", "connect");
rval = 1;
goto Return;
@@ -1750,7 +1769,9 @@ int initconn(void)
rval = 0;
goto Return;
}
-#endif
+
+TryPort:
+ rval = 0;
noport:
data_addr = myctladdr;
@@ -1765,11 +1786,13 @@ noport:
sendport = 1;
rval = 1; goto Return;
}
+
if (!sendport)
if (setsockopt(data, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof (on)) < 0) {
PERROR("initconn", "setsockopt (reuse address)");
goto bad;
}
+
#ifdef SOCKS
if (Rbind(data, (struct sockaddr *)&data_addr, sizeof (data_addr), hisctladdr.sin_addr.s_addr) < 0) {
#else
@@ -1859,10 +1882,8 @@ dataconn(char *mode)
#ifdef SOCKS
s = Raccept(data, (struct sockaddr *) &from, &fromlen);
#else
-#ifdef PASSIVEMODE
- if (passivemode)
+ if (using_pasv)
return( fdopen( data, mode ));
-#endif
s = Accept(data, &from, &fromlen);
#endif
if (s < 0) {
diff --git a/usr.bin/ncftp/main.c b/usr.bin/ncftp/main.c
index 9fdfc06ec0a5..1d1ed62de147 100644
--- a/usr.bin/ncftp/main.c
+++ b/usr.bin/ncftp/main.c
@@ -2,7 +2,7 @@
#define _main_c_
-#define FTP_VERSION "1.8.7 (December 11, 1994)"
+#define FTP_VERSION "1.9.0 (December 22, 1994)"
/* #define BETA 1 */ /* If defined, it prints a little warning message. */
@@ -46,7 +46,9 @@ int toatty; /* output is to a terminal */
int doing_script; /* is a file being <redirected to me? */
char *altarg; /* argv[1] with no shell-like preprocessing */
struct servent serv; /* service spec for tcp/ftp */
+static char pad2a[8] = "Pad 2a"; /* SunOS overwrites jmp_bufs... */
jmp_buf toplevel; /* non-local goto stuff for cmd scanner */
+static char pad2b[8] = "Pad 2b";
char *line; /* input line buffer */
char *stringbase; /* current scan point in line buffer */
char *argbuf; /* argument storage buffer */
@@ -391,7 +393,7 @@ For testing purposes only. Do not re-distribute or subject to novice users."
(void) Signal(SIGPIPE, lostpeer);
}
for (;;) {
- if (cmdscanner(top))
+ if (cmdscanner(top) && !fromatty)
exit(1);
top = 1;
}
diff --git a/usr.bin/ncftp/patchlevel.h b/usr.bin/ncftp/patchlevel.h
index 3b2259fd606f..28600409dcba 100644
--- a/usr.bin/ncftp/patchlevel.h
+++ b/usr.bin/ncftp/patchlevel.h
@@ -1,6 +1,18 @@
+v1.9.0 - December 22, 1994. The program won't exit from the interactive shell
+ if it's working from a tty. For example, it won't exit if you do an mget
+ on a pattern that won't match anything. Added padding around jmp_buf's
+ for SunOS. SunOS needs sigjmp_buf's, but plenty of OS's don't support
+ sigjmp_buf's yet. Fixed the tips to reflect the new archive site.
+
+v1.8.9 - December 20, 1994. Can now set "passive" user variable, or use
+ passive command to toggle PASV/PORT ftp. Debug mode now prints remote
+ responses. Can now get around buggy FTP servers like boombox.micro.umn.edu,
+ that give back invalid port numbers to PASV.
+
+v1.8.8 - December 19, 1994. Now falls back to port FTP if passive FTP fails.
+
v1.8.7 - December 11, 1994. Tweaks for FreeBSD. Passive mode enabled and
- turned on by default. This should be the last version of ncftp before
- version 2.
+ turned on by default.
v1.8.6 - October 30, 1994. Tweaks for Solaris in sys.h.
diff --git a/usr.bin/ncftp/set.c b/usr.bin/ncftp/set.c
index 14d87150520f..b071df2cacdb 100644
--- a/usr.bin/ncftp/set.c
+++ b/usr.bin/ncftp/set.c
@@ -47,7 +47,7 @@ extern FILE *logf;
extern longstring rcname, logfname, lcwd;
extern int auto_binary, ansi_escapes, debug;
extern int mprompt, remote_is_unix, verbose;
-extern int startup_msg, anon_open;
+extern int startup_msg, anon_open, passivemode;
#ifndef NO_TIPS
extern int tips;
#endif
@@ -77,6 +77,7 @@ struct var vars[] = {
VARENTRY("logsize", LONG, 0, &logsize, NULL),
VARENTRY("mprompt", BOOL, 0, &mprompt, NULL),
VARENTRY("netrc", -STR, 0, rcname, NULL),
+ VARENTRY("passive", BOOL, 0, &passivemode, NULL),
VARENTRY("pager", STR, 0, pager + 1, set_pager),
VARENTRY("prompt", STR, 0, prompt, set_prompt),
VARENTRY("progress-reports",INT, 0, &progress_meter,NULL),
diff --git a/usr.bin/ncftp/tips.c b/usr.bin/ncftp/tips.c
index 5f7267164d99..30330b6138c7 100644
--- a/usr.bin/ncftp/tips.c
+++ b/usr.bin/ncftp/tips.c
@@ -89,8 +89,8 @@ static char *tiplist[] = {
and/or use EMACS-style (or maybe VI-style) commands to edit the line.",
#endif
- "You can get the newest version of NcFTP from cse.unl.edu, in the\n\
- /pub/mgleason/ncftp directory, AFTER business hours.",
+ "You can get the newest version of NcFTP from ftp.cs.unl.edu, in the\n\
+ /pub/ncftp directory, AFTER business hours.",
"The type of progress-meter that will be used depends if the remote host\n\
supports the SIZE command, and whether your terminal is capable of ANSI\n\
@@ -105,8 +105,8 @@ static char *tiplist[] = {
the rc file, while still letting you use sitename abbreviations.",
"You can use World Wide Web style paths instead of colon-mode paths.\n\
- For example, if the colon-mode path was 'cse.unl.edu:pub/mgleason/ncftp',\n\
- the WWW-style path would be 'ftp://cse.unl.edu/pub/mgleason/ncftp'.",
+ For example, if the colon-mode path was 'ftp.cs.unl.edu:pub/ncftp',\n\
+ the WWW-style path would be 'ftp://ftp.cs.unl.edu/pub/ncftp'.",
"Sick and tired of these tips? Put '#unset tips' in your .ncftprc."
};