Merge tnftp-20100108 from the vendor branch into head.

PR:		bin/112288 bin/120256 bin/129014 bin/145528
MFC after:	1 month
This commit is contained in:
gavin 2011-06-20 08:00:32 +00:00
commit 53f276e3d4
74 changed files with 5416 additions and 36575 deletions

View File

@ -1,47 +0,0 @@
Copyright 1999, 2000 Luke Mewburn <lukem@netbsd.org>. All rights reserved.
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 Luke Mewburn.
4. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
This product also contains software developed by other people, and you
are advised to read the various source files to read the full details
of the other licenses. Those licenses also require the following
acknowledgements:
This product includes software developed by the NetBSD Foundation,
Inc. and its contributors. Those contributors include:
- Jaromir Dolecek
- Klaus Klein
- Luke Mewburn
- Jason R. Thorpe of the Numerical Aerospace Simulation
Facility, NASA Ames Research Center.
This product includes software developed by the University of
California, Berkeley and its contributors. Those contributors include:
- Christos Zoulas of Cornell University.
- Guido van Rossum.
This product includes software developed by Christos Zoulas.

File diff suppressed because it is too large Load Diff

View File

@ -1,64 +0,0 @@
diff -ru src.orig/cmds.c src/cmds.c
--- src.orig/cmds.c Sun Jun 15 22:11:43 2003
+++ src/cmds.c Sun Jun 15 21:46:37 2003
@@ -131,6 +131,7 @@
#include <string.h>
#include <time.h>
#include <unistd.h>
+#include <libutil.h>
#include "ftp_var.h"
#include "version.h"
diff -ru src.orig/fetch.c src/fetch.c
--- src.orig/fetch.c Sun Jun 15 22:11:43 2003
+++ src/fetch.c Sun Jun 15 21:46:53 2003
@@ -69,6 +69,7 @@
#include <string.h>
#include <unistd.h>
#include <time.h>
+#include <libutil.h>
#include "ftp_var.h"
#include "version.h"
Only in src: ftp.cat1
diff -ru src.orig/progressbar.c src/progressbar.c
--- src.orig/progressbar.c Sun Jun 15 22:11:43 2003
+++ src/progressbar.c Sun Jun 15 21:50:48 2003
@@ -50,6 +50,7 @@
*/
#include <sys/types.h>
#include <sys/param.h>
+#include <sys/time.h>
#include <err.h>
#include <errno.h>
@@ -57,10 +58,12 @@
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
-#include <tzfile.h>
#include <unistd.h>
#include "progressbar.h"
+
+#define SECSPERHOUR (60 * 60)
+#define SECSPERDAY ((long)60 * 60 * 24)
#if !defined(NO_PROGRESS)
/*
diff -ru src.orig/util.c src/util.c
--- src.orig/util.c Sun Jun 15 22:11:44 2003
+++ src/util.c Sun Jun 15 21:51:31 2003
@@ -101,10 +101,11 @@
#include <string.h>
#include <termios.h>
#include <time.h>
-#include <tzfile.h>
#include <unistd.h>
#include "ftp_var.h"
+
+#define TM_YEAR_BASE 1900
/*
* Connect to peer server and auto-login, if possible.

View File

@ -1,211 +0,0 @@
INSTALLATION INTRODUCTION
-------------------------
This file describes how to compile and install lukemftp on your
system.
============================================
= =
= NOTE: You will need an ANSI C compiler. =
= =
============================================
For most systems, execute the following to compile and install
lukemftp:
./configure
make
make install
A preformatted manual page (src/ftp.cat1) is also installed. If
you wish to install the source (src/ftp.1), ensure that your system
has up-to-date mandoc macros. groff ships with this macro suite,
but it has bugs. Try:
ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/share/tmac/
for a more recent version.
CONFIGURATION OPTIONS
---------------------
lukemftp is configured using an `autoconf' generated `configure'
script. `configure' supports the following options:
* The standard `autoconf configure' options, including:
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[same as prefix]
--srcdir=DIR find the sources in DIR [configure dir or ..]
BSD or GNU make may be required for this to work.
* Specific options:
--enable-editcomplete Turn on command line editing and completion.
--disable-editcomplete Turn off command line editing and completion
[default: enabled].
--enable-ipv6 Enable IPv6 support (if your OS supports it)
--disable-ipv6 Disable IPv6 support (even if your OS supports it.)
[default: enabled].
--with-socks Compile with SOCKS firewall traversal support.
--with-socks5[=PATH] Compile with SOCKS5 firewall traversal support.
--with-socks4[=PATH] Compile with SOCKS4 firewall traversal support.
The following environment variables can be set to override various
compiler related settings.
CC=compiler specify name of the C compiler (default: gcc or cc)
CFLAGS=flags specify flags to C compiler (default: -O -g or just -O)
LDFLAGS=flags specify flags to linker (default: none)
This can be achieved with:
env CC="compiler" CFLAGS="flags" LDFLAGS="flags" ./configure
============================================
= =
= NOTE: You will need an ANSI C compiler. =
= =
============================================
PLATFORM SPECIFIC NOTES
-----------------------
The following platforms & compilers have been tested:
- AIX 4.1.5:
- AIX 4.2.1:
- AIX 4.3.3:
- Compiler: xlc -qlanglvl=ansi
version: xlC 3.1.4.10 -- C for AIX Compiler
version: ibmcxx.cmp 3.6.6.6 -- IBM C and C++ Compilers
Configure with:
env CC="xlc" CFLAGS="-qlanglvl=ansi" ./configure
- BSD/OS 4.0.1 (x86)
- BSD/OS 4.1 (x86)
- BSD/OS 4.1 (sparc)
- BSD/OS 4.2 (x86)
- Compiler: /bin/cc
version: gcc 2.7.2.1
version: gcc version 2.95.2 19991024
- Digital UNIX 4.0b
- Digital UNIX 4.0d
- Digital UNIX 4.0f
- Compiler: cc -std
version: DEC C V5.2-036 on Digital UNIX V4.0 (Rev. 564)
version: DEC C V5.9-005 on Digital UNIX V4.0 (Rev. 1229)
Configure with
env CC="cc -std" ./configure
- Compiler: gcc
version: 2.95.1
- Digital UNIX 5.0
- Compiler: cc
version: Compaq C V6.1-011 on Digital UNIX V5.0 (Rev. 910)
- FreeBSD 3.4 (i386):
- FreeBSD 3.5 (i386):
- FreeBSD 4.1 (i386):
- Compiler: cc
version: gcc version 2.7.2.3
version: gcc version 2.95.2 19991024
- HP/UX 10.20:
- HP/UX 11.00:
- Compiler: /opt/ansic/bin/cc -Ae
version: A.10.32.03
Configure with
env CC="cc -Ae" ./configure
To generate code that will run on old architectures you
may need to add "+DAportable" to CC.
- IRIX 6.5.4
- IRIX 6.5.8
Compiler: /bin/cc
version: MIPSpro Compilers: Version 7.2.1
Compiler:
version: gcc version 2.95.2
- HP/UX 11.00:
- HP/UX 11.00 64 bit:
- Compiler: /opt/ansic/bin/cc -Ae
version: A.11.01.00
Configure with
env CC="cc -Ae" ./configure
- NetBSD 1.3.3 (i386)
Compiler: /usr/bin/cc
Compiler: /usr/bin/cc
Ignore warnings about ``passing arg 3 of `tputs' from
incompatible pointer type''.
- RedHat Linux 5.1 (?? i386)
- RedHat Linux 5.2 (?? i386)
- RedHat Linux 6.0 (Linux 2.2.10 i686)
- RedHat Linux 6.1 (Linux 2.2.5-15 i686)
- RedHat Linux 6.2 (Linux 2.2.16-3smp i686)
- Compiler: cc
version: egcs-1.1.2
- Slackware (Linux 2.0.35 i686)
- Compiler: cc
version: 2.7.2.3
- Solaris 2.6 (sparc)
- Solaris 7 (sparc)
- Compiler: /opt/SUNWspro/bin/cc
version: WorkShop Compilers 5.0
- Compiler: gcc
version: egcs-1.1.2
=============
= OLD NOTES =
=============
XXX: clean up to match reality
------------------------------
- RedHat Linux 5.0 (i386)
Compiler: cc
- Solaris 2.5 (sparc)
- Solaris 7 (x86)
Compiler: /opt/SUNWspro/bin/cc
version: SC3.0 15 Dec 1993
version: WorkShop Compilers 5.0
Compiler: gcc
version: egcs-1.1.2
version: gcc 2.8.1
version: gcc 2.95.1
- Solaris 7 (sparc) 64 bit
Compiler: /opt/SUNWspro/bin/cc -xarch=v9
version: WorkShop Compilers 5.0
- SunOS 4
Compiler: gcc -lresolv
version:
- SuSE Linux
Compiler: gcc
version:
/usr/bin/ftp on SuSE Linux 6.4 is this ftp client.
May need `gcc -L/usr/lib/termcap' if tgetent() et al aren't found.
- Ultrix 4.5
Compiler: cc
version: MIPS C Compiler 3.0
Compiler: gcc
version: 2.7.2.2

View File

@ -1,33 +0,0 @@
# $Id: Makefile.in,v 1.6 1999/11/13 01:18:22 lukem Exp $
#
srcdir = @srcdir@
VPATH = @srcdir@
SHELL = /bin/sh
@SET_MAKE@
SUBDIRS = libedit libukem src
all: ftp
ftp: @LIBEDIT@ @LIBUKEM@
( cd src; ${MAKE} )
libedit.a:
( cd libedit; ${MAKE} )
libukem.a:
( cd libukem; ${MAKE} )
install clean:
@for i in ${SUBDIRS}; do \
( echo "$@ ===> $$i" ; cd $$i ; ${MAKE} $@ ); \
done
distclean: clean
@for i in ${SUBDIRS}; do \
( echo "$@ ===> $$i" ; cd $$i ; ${MAKE} $@ ); \
done
rm -f Makefile config.cache config.log config.status config.h

View File

@ -1,84 +0,0 @@
This is a brief description of the new features and fixes added to
lukemftp-1.5 since the release of lukemftp-1.4. As always, the manual
page (src/ftp.cat1) is the place to look for complete descriptions.
* Add new commands:
features list remote features supported by servers
mlsd machine parseable directory listing
mlst machine parseable file listing
remopts set options on remote features
These require support in the remote server for the ftp extensions
described in RFC 2389 and draft-ietf-ftpext-mlst-11.
* Fix support for the --program-prefix and --program-suffix configure
options.
---
This is a brief description of the new features and fixes added to
lukemftp-1.4 since the release of lukemftp-1.3. As always, the manual
page (src/ftp.cat1) is the place to look for complete descriptions.
* Fix compilation problems on various non 4.4BSD derived platforms which
support IPv6, and on Linux systems which have strdup() as a macro.
* During auto-fetch, don't attempt to autologin a second time if the first
time failed.
---
This is a brief description of the new features and fixes added to
lukemftp-1.3 since the release of lukemftp-1.2. As always, the manual
page (src/ftp.cat1) is the place to look for complete descriptions.
* The `ls' command now uses the `LIST' directive instead of `NLST',
in order to be compatible with RFC959.
* Add fget command, which reads a list of filenames to retrieve from
the given file.
* Add support for uploading files on the command-line with `ftp -u'.
* Various fixes to the IPv6 support.
---
This is a brief description of the new features and fixes added to
lukemftp-1.2 since the release of lukemftp-1.1. As always, the manual
page (src/ftp.cat1) is the place to look for complete descriptions.
* During remote completion, only send ``NLST'' instead of ``NLST .''
when reading the list of files from the remote server; some servers
don't like the trailing `.'.
* Support a leading ``[user@]'' for ``[user@]host[:][path]'' auto-fetches
and ``[user@]host'' connections.
* Always compile in support for setting the type of service on transfers.
Should speed up transfers on Linux systems.
* Improve performance of non-rate-limited transfers.
* Work around ftp servers that aren't Y2K compliant in returning the
modification time of a file.
* Update the libedit library to support automatic and magic margins,
allowing ftp's rprompt to move an extra character to the right.
---
This is a brief description of the new features and fixes added to
lukemftp-1.1 since the release of lukemftp-1.0. As always, the manual
page (src/ftp.cat1) is the place to look for complete descriptions.
* Implemented `set prompt' and `set rprompt', which allow you to
configure the prompt and right side prompt (respectively).
Some tcsh(1) style `%' escapes are supported, including
%. %c %/ %m %M %n
* Implemented restarting of file:/// and non-proxied http:// URLs
(using -R)
* Correctly parse remote ports given as numbers that don't appear in
the services(5) database.
* Prevent a couple of minor memory leaks
* Add missing compilation setting for SOCKS

View File

@ -1,61 +0,0 @@
WHAT IS LUKEMFTP?
-----------------
`lukemftp' is what many users affectionately call the enhanced ftp
client in NetBSD (http://www.netbsd.org). The `lukem' comes from
the account name of the NetBSD developer who wrote most of the
enhancements: Luke Mewburn <lukem@netbsd.org>.
This package is a `port' of the NetBSD ftp client to other systems.
The enhancements over the standard ftp client in 4.4BSD (and
derivatives) include:
* command-line editing within ftp
* command-line fetching of URLS, including support for:
- http proxies (c.f: $http_proxy, $ftp_proxy)
- authentication
* configurable prompt
* context sensitive command and filename completion
* dynamic progress bar
* feature negotiation extensions from RFC 2389
(c.f: `feat' and `remopts')
* extensions to ftp from the IETF ftpext working group
(c.f: `mlsd' and `mlst')
* IPv6 support (from the WIDE project)
* modification time preservation
* paging of local and remote files, and of directory listings
(c.f: `lpage', `page', `pdir')
* passive mode support, with fallback to active mode
* retrieval of filenames listed in a given file (c.f: `fget')
* `set option' override of ftp environment variables
* socks4/socks5 support
* TIS Firewall Toolkit gate ftp proxy support (c.f: `gate')
* transfer-rate throttling (c.f: `-T', `rate')
* uploading of files on the command line (c.f: `-u')
INSTALLATION
------------
Refer to `INSTALL' for more information on how to compile and install
lukemftp.
FEEDBACK / BUG REPORTS
----------------------
Please email feedback back to the maintainer: <lukem@netbsd.org>.
COPYRIGHT
---------
lukemftp is covered by a BSD-style copyright notice. Please refer to
the file `COPYING' for more information.
AVAILABILITY
------------
The primary ftp site for lukemftp is:
ftp://ftp.netbsd.org/pub/NetBSD/misc/lukemftp/

View File

@ -1,30 +0,0 @@
Whilst a lot of the work in lukemftp (both the original sources in NetBSD
and this port) was done by me (Luke Mewburn), it would not be as useable
without the enhancements, fixes, or input from the following people:
Brian Stark <bstark1990@netscape.net>
Chris G. Demetriou <cgd@netbsd.org>
Christos Zoulas <christos@netbsd.org>
Dan Winship <danw@mit.edu>
Darren Reed <darrenr@pobox.com>
David Carrel <carrel@netbsd.org>
Giles Lean <giles@nemeton.com.au>
Havard Eidnes <Havard.Eidnes@runit.sintef.no>
ITOH Yasufumi <itohy@netbsd.org>
Jason R. Thorpe <thorpej@netbsd.org>
John Hawkinson <jhawk@mit.edu>
Joseph S. Myers <jsm28@cam.ac.uk>
Jun-ichiro itojun Hagino <itojun@netbsd.org>
Kimmo Suominen <kim@tac.nyc.ny.us>
Klaus Klein <kleink@netbsd.org>
Luke Mewburn <lukem@netbsd.org>
Marc Horowitz <marc@mit.edu>
Matthew R. Green <mrg@eterna.com.au>
Matthias Pfaller <leo@dachau.marco.de>
Matthias Scheler <tron@zhadum.de>
Michael L. Hitch <osymh@terra.oscs.montana.edu>
Scott Aaron Bamford <sab@ansic.net>
Simon Burge <simonb@thistledown.com.au>
Todd C. Miller <Todd.Miller@courtesan.com>
Apologies to anyone I've missed.

View File

@ -1,92 +0,0 @@
/* $Id: acconfig.h,v 1.9 2002/06/10 01:27:13 lukem Exp $ */
@TOP@
@BOTTOM@
/* Define if your compiler supports `long long' */
#undef HAVE_LONG_LONG
/* Define if *printf() uses %qd to print `long long' (otherwise uses %lld) */
#undef HAVE_PRINTF_QD
/* Define if in_port_t exists */
#undef HAVE_IN_PORT_T
/* Define if sa_family_t exists in <sys/socket.h> */
#undef HAVE_SA_FAMILY_T
/* Define if struct sockaddr.sa_len exists (implies sockaddr_in.sin_len, etc) */
#undef HAVE_SOCKADDR_SA_LEN
/* Define if socklen_t exists */
#undef HAVE_SOCKLEN_T
/* Define if AF_INET6 exists in <sys/socket.h> */
#undef HAVE_AF_INET6
/* Define if `struct sockaddr_in6' exists in <netinet/in.h> */
#undef HAVE_SOCKADDR_IN6
/* Define if `struct addrinfo' exists in <netdb.h> */
#undef HAVE_ADDRINFO
/*
* Define if <netdb.h> contains AI_NUMERICHOST et al.
* Systems which only implement RFC2133 will need this.
*/
#undef HAVE_RFC2553_NETDB
/* Define if `struct direct' has a d_namlen element */
#undef HAVE_D_NAMLEN
/* Define if h_errno exists in <netdb.h> */
#undef HAVE_H_ERRNO_D
/* Define if fclose() is declared in <stdio.h> */
#undef HAVE_FCLOSE_D
/* Define if getpass() is declared in <stdlib.h> or <unistd.h> */
#undef HAVE_GETPASS_D
/* Define if optarg is declared in <stdlib.h> or <unistd.h> */
#undef HAVE_OPTARG_D
/* Define if optind is declared in <stdlib.h> or <unistd.h> */
#undef HAVE_OPTIND_D
/* Define if pclose() is declared in <stdio.h> */
#undef HAVE_PCLOSE_D
/* Define if `long long' is supported and sizeof(off_t) >= 8 */
#undef HAVE_QUAD_SUPPORT
/* Define if strptime() is declared in <time.h> */
#undef HAVE_STRPTIME_D
/*
* Define this if compiling with SOCKS (the firewall traversal library).
* Also, you must define connect, getsockname, bind, accept, listen, and
* select to their R-versions.
*/
#undef SOCKS
#undef SOCKS4
#undef SOCKS5
#undef connect
#undef getsockname
#undef bind
#undef accept
#undef listen
#undef select
#undef dup
#undef dup2
#undef fclose
#undef gethostbyname
#undef getpeername
#undef read
#undef recv
#undef recvfrom
#undef rresvport
#undef send
#undef sendto
#undef shutdown
#undef write

View File

@ -1,257 +0,0 @@
dnl $Id: aclocal.m4,v 1.5 1999/11/13 10:50:39 lukem Exp $
dnl
dnl
dnl AC_MSG_TRY_COMPILE
dnl
dnl Written by Luke Mewburn <lukem@netbsd.org>
dnl
dnl Usage:
dnl AC_MSG_TRY_COMPILE(Message, CacheVar, Includes, Code,
dnl ActionPass [,ActionFail] )
dnl
dnl effectively does:
dnl AC_CACHE_CHECK(Message, CacheVar,
dnl AC_TRY_COMPILE(Includes, Code, CacheVar = yes, CacheVar = no)
dnl if CacheVar == yes
dnl AC_MESSAGE_RESULT(yes)
dnl ActionPass
dnl else
dnl AC_MESSAGE_RESULT(no)
dnl ActionFail
dnl )
dnl
AC_DEFUN(AC_MSG_TRY_COMPILE, [
AC_CACHE_CHECK($1, $2, [
AC_TRY_COMPILE([ $3 ], [ $4; ], [ $2=yes ], [ $2=no ])
])
if test "x[$]$2" = "xyes"; then
$5
else
$6
:
fi
])
dnl
dnl AC_MSG_TRY_LINK
dnl
dnl Usage:
dnl AC_MSG_TRY_LINK(Message, CacheVar, Includes, Code,
dnl ActionPass [,ActionFail] )
dnl
dnl as AC_MSG_TRY_COMPILE, but uses AC_TRY_LINK instead of AC_TRY_COMPILE
dnl
AC_DEFUN(AC_MSG_TRY_LINK, [
AC_CACHE_CHECK($1, $2, [
AC_TRY_LINK([ $3 ], [ $4; ], [ $2=yes ], [ $2=no ])
])
if test "x[$]$2" = "xyes"; then
$5
else
$6
:
fi
])
dnl
dnl AC_LIBRARY_NET: #Id: net.m4,v 1.5 1997/11/09 21:36:54 jhawk Exp #
dnl
dnl Written by John Hawkinson <jhawk@mit.edu>. This code is in the Public
dnl Domain.
dnl
dnl This test is for network applications that need socket() and
dnl gethostbyname() -ish functions. Under Solaris, those applications need to
dnl link with "-lsocket -lnsl". Under IRIX, they should *not* link with
dnl "-lsocket" because libsocket.a breaks a number of things (for instance:
dnl gethostbyname() under IRIX 5.2, and snoop sockets under most versions of
dnl IRIX).
dnl
dnl Unfortunately, many application developers are not aware of this, and
dnl mistakenly write tests that cause -lsocket to be used under IRIX. It is
dnl also easy to write tests that cause -lnsl to be used under operating
dnl systems where neither are necessary (or useful), such as SunOS 4.1.4, which
dnl uses -lnsl for TLI.
dnl
dnl This test exists so that every application developer does not test this in
dnl a different, and subtly broken fashion.
dnl
dnl It has been argued that this test should be broken up into two seperate
dnl tests, one for the resolver libraries, and one for the libraries necessary
dnl for using Sockets API. Unfortunately, the two are carefully intertwined and
dnl allowing the autoconf user to use them independantly potentially results in
dnl unfortunate ordering dependancies -- as such, such component macros would
dnl have to carefully use indirection and be aware if the other components were
dnl executed. Since other autoconf macros do not go to this trouble, and almost
dnl no applications use sockets without the resolver, this complexity has not
dnl been implemented.
dnl
dnl The check for libresolv is in case you are attempting to link statically
dnl and happen to have a libresolv.a lying around (and no libnsl.a).
dnl
AC_DEFUN(AC_LIBRARY_NET, [
# Most operating systems have gethostbyname() in the default searched
# libraries (i.e. libc):
AC_CHECK_FUNC(gethostbyname, ,
# Some OSes (eg. Solaris) place it in libnsl:
AC_CHECK_LIB(nsl, gethostbyname, ,
# Some strange OSes (SINIX) have it in libsocket:
AC_CHECK_LIB(socket, gethostbyname, ,
# Unfortunately libsocket sometimes depends on libnsl.
# AC_CHECK_LIB's API is essentially broken so the following
# ugliness is necessary:
AC_CHECK_LIB(socket, gethostbyname,
LIBS="-lsocket -lnsl $LIBS",
AC_CHECK_LIB(resolv, gethostbyname),
-lnsl)
)
)
)
AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, ,
AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", , -lnsl)))
])
dnl Checks for SOCKS firewall support.
dnl
dnl Written by Matthew R. Green <mrg@eterna.com.au>
dnl
AC_DEFUN(AC_LIBRARY_SOCKS, [
AC_MSG_CHECKING(whether to support SOCKS)
AC_ARG_WITH(socks,
[ --with-socks Compile with SOCKS firewall traversal support.],
[
case "$withval" in
no)
AC_MSG_RESULT(no)
;;
yes)
AC_MSG_RESULT(yes)
AC_CHECK_LIB(socks5, SOCKSconnect, [
socks=5
LIBS="-lsocks5 $LIBS"], [
AC_CHECK_LIB(socks, Rconnect, [
socks=4
LIBS="-lsocks $LIBS"], [
AC_MSG_ERROR(Could not find socks library. You must first install socks.) ] ) ] )
;;
esac
],
AC_MSG_RESULT(no)
)
if test "x$socks" = "x"; then
AC_MSG_CHECKING(whether to support SOCKS5)
AC_ARG_WITH(socks5,
[ --with-socks5[=PATH] Compile with SOCKS5 firewall traversal support.],
[
case "$withval" in
no)
AC_MSG_RESULT(no)
;;
*)
AC_MSG_RESULT(yes)
socks=5
if test "x$withval" = "xyes"; then
withval="-lsocks5"
else
if test -d "$withval"; then
if test -d "$withval/include"; then
CFLAGS="$CFLAGS -I$withval/include"
else
CFLAGS="$CFLAGS -I$withval"
fi
if test -d "$withval/lib"; then
withval="-L$withval/lib -lsocks5"
else
withval="-L$withval -lsocks5"
fi
fi
fi
LIBS="$withval $LIBS"
# If Socks was compiled with Kerberos support, we will need
# to link against kerberos libraries. Temporarily append
# to LIBS. This is harmless if there is no kerberos support.
TMPLIBS="$LIBS"
LIBS="$LIBS $KERBEROS_LIBS"
AC_TRY_LINK([],
[ SOCKSconnect(); ],
[],
[ AC_MSG_ERROR(Could not find the $withval library. You must first install socks5.) ])
LIBS="$TMPLIBS"
;;
esac
],
AC_MSG_RESULT(no)
)
fi
if test "x$socks" = "x"; then
AC_MSG_CHECKING(whether to support SOCKS4)
AC_ARG_WITH(socks4,
[ --with-socks4[=PATH] Compile with SOCKS4 firewall traversal support.],
[
case "$withval" in
no)
AC_MSG_RESULT(no)
;;
*)
AC_MSG_RESULT(yes)
socks=4
if test "x$withval" = "xyes"; then
withval="-lsocks"
else
if test -d "$withval"; then
withval="-L$withval -lsocks"
fi
fi
LIBS="$withval $LIBS"
AC_TRY_LINK([],
[ Rconnect(); ],
[],
[ AC_MSG_ERROR(Could not find the $withval library. You must first install socks.) ])
;;
esac
],
AC_MSG_RESULT(no)
)
fi
if test "x$socks" = "x4"; then
AC_DEFINE(SOCKS)
AC_DEFINE(SOCKS4)
AC_DEFINE(connect, Rconnect)
AC_DEFINE(getsockname, Rgetsockname)
AC_DEFINE(bind, Rbind)
AC_DEFINE(accept, Raccept)
AC_DEFINE(listen, Rlisten)
AC_DEFINE(select, Rselect)
fi
if test "x$socks" = "x5"; then
AC_DEFINE(SOCKS)
AC_DEFINE(SOCKS5)
AC_DEFINE(connect,SOCKSconnect)
AC_DEFINE(getsockname,SOCKSgetsockname)
AC_DEFINE(getpeername,SOCKSgetpeername)
AC_DEFINE(bind,SOCKSbind)
AC_DEFINE(accept,SOCKSaccept)
AC_DEFINE(listen,SOCKSlisten)
AC_DEFINE(select,SOCKSselect)
AC_DEFINE(recvfrom,SOCKSrecvfrom)
AC_DEFINE(sendto,SOCKSsendto)
AC_DEFINE(recv,SOCKSrecv)
AC_DEFINE(send,SOCKSsend)
AC_DEFINE(read,SOCKSread)
AC_DEFINE(write,SOCKSwrite)
AC_DEFINE(rresvport,SOCKSrresvport)
AC_DEFINE(shutdown,SOCKSshutdown)
AC_DEFINE(listen,SOCKSlisten)
AC_DEFINE(close,SOCKSclose)
AC_DEFINE(dup,SOCKSdup)
AC_DEFINE(dup2,SOCKSdup2)
AC_DEFINE(fclose,SOCKSfclose)
AC_DEFINE(gethostbyname,SOCKSgethostbyname)
fi
])

View File

@ -1,275 +0,0 @@
/* config.h.in. Generated automatically from configure.in by autoheader. */
/* $Id: config.h.in,v 1.28 2002/06/10 08:10:33 lukem Exp $ */
/* Define if on AIX 3.
System headers sometimes define this.
We just want to avoid a redefinition error message. */
#ifndef _ALL_SOURCE
#undef _ALL_SOURCE
#endif
/* Define if the closedir function returns void instead of int. */
#undef CLOSEDIR_VOID
/* Define if the `getpgrp' function takes no argument. */
#undef GETPGRP_VOID
/* Define if your C compiler doesn't accept -c and -o together. */
#undef NO_MINUS_C_MINUS_O
/* Define if your Fortran 77 compiler doesn't accept -c and -o together. */
#undef F77_NO_MINUS_C_MINUS_O
/* Define to `long' if <sys/types.h> doesn't define. */
#undef off_t
/* Define to the type of arg1 for select(). */
#undef SELECT_TYPE_ARG1
/* Define to the type of args 2, 3 and 4 for select(). */
#undef SELECT_TYPE_ARG234
/* Define to the type of arg5 for select(). */
#undef SELECT_TYPE_ARG5
/* Define if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Define if you can safely include both <sys/time.h> and <time.h>. */
#undef TIME_WITH_SYS_TIME
/* Define if the closedir function returns void instead of int. */
#undef VOID_CLOSEDIR
/* The number of bytes in a off_t. */
#undef SIZEOF_OFF_T
/* Define if you have the err function. */
#undef HAVE_ERR
/* Define if you have the fgetln function. */
#undef HAVE_FGETLN
/* Define if you have the fparseln function. */
#undef HAVE_FPARSELN
/* Define if you have the fseeko function. */
#undef HAVE_FSEEKO
/* Define if you have the getaddrinfo function. */
#undef HAVE_GETADDRINFO
/* Define if you have the gethostbyname2 function. */
#undef HAVE_GETHOSTBYNAME2
/* Define if you have the getnameinfo function. */
#undef HAVE_GETNAMEINFO
/* Define if you have the getpassphrase function. */
#undef HAVE_GETPASSPHRASE
/* Define if you have the getpgrp function. */
#undef HAVE_GETPGRP
/* Define if you have the inet_ntop function. */
#undef HAVE_INET_NTOP
/* Define if you have the inet_pton function. */
#undef HAVE_INET_PTON
/* Define if you have the memmove function. */
#undef HAVE_MEMMOVE
/* Define if you have the mkstemp function. */
#undef HAVE_MKSTEMP
/* Define if you have the poll function. */
#undef HAVE_POLL
/* Define if you have the select function. */
#undef HAVE_SELECT
/* Define if you have the setprogname function. */
#undef HAVE_SETPROGNAME
/* Define if you have the sl_init function. */
#undef HAVE_SL_INIT
/* Define if you have the snprintf function. */
#undef HAVE_SNPRINTF
/* Define if you have the strdup function. */
#undef HAVE_STRDUP
/* Define if you have the strerror function. */
#undef HAVE_STRERROR
/* Define if you have the strlcat function. */
#undef HAVE_STRLCAT
/* Define if you have the strlcpy function. */
#undef HAVE_STRLCPY
/* Define if you have the strptime function. */
#undef HAVE_STRPTIME
/* Define if you have the strsep function. */
#undef HAVE_STRSEP
/* Define if you have the strtoll function. */
#undef HAVE_STRTOLL
/* Define if you have the strunvis function. */
#undef HAVE_STRUNVIS
/* Define if you have the strvis function. */
#undef HAVE_STRVIS
/* Define if you have the timegm function. */
#undef HAVE_TIMEGM
/* Define if you have the usleep function. */
#undef HAVE_USLEEP
/* Define if you have the <arpa/nameser.h> header file. */
#undef HAVE_ARPA_NAMESER_H
/* Define if you have the <dirent.h> header file. */
#undef HAVE_DIRENT_H
/* Define if you have the <err.h> header file. */
#undef HAVE_ERR_H
/* Define if you have the <libutil.h> header file. */
#undef HAVE_LIBUTIL_H
/* Define if you have the <ndir.h> header file. */
#undef HAVE_NDIR_H
/* Define if you have the <paths.h> header file. */
#undef HAVE_PATHS_H
/* Define if you have the <poll.h> header file. */
#undef HAVE_POLL_H
/* Define if you have the <regex.h> header file. */
#undef HAVE_REGEX_H
/* Define if you have the <sys/dir.h> header file. */
#undef HAVE_SYS_DIR_H
/* Define if you have the <sys/ndir.h> header file. */
#undef HAVE_SYS_NDIR_H
/* Define if you have the <sys/poll.h> header file. */
#undef HAVE_SYS_POLL_H
/* Define if you have the <termcap.h> header file. */
#undef HAVE_TERMCAP_H
/* Define if you have the <util.h> header file. */
#undef HAVE_UTIL_H
/* Define if you have the <vis.h> header file. */
#undef HAVE_VIS_H
/* Define if you have the nsl library (-lnsl). */
#undef HAVE_LIBNSL
/* Define if you have the socket library (-lsocket). */
#undef HAVE_LIBSOCKET
/* Define if you have the tinfo library (-ltinfo). */
#undef HAVE_LIBTINFO
/* Define if you have the util library (-lutil). */
#undef HAVE_LIBUTIL
/* Define if your compiler supports `long long' */
#undef HAVE_LONG_LONG
/* Define if *printf() uses %qd to print `long long' (otherwise uses %lld) */
#undef HAVE_PRINTF_QD
/* Define if in_port_t exists */
#undef HAVE_IN_PORT_T
/* Define if sa_family_t exists in <sys/socket.h> */
#undef HAVE_SA_FAMILY_T
/* Define if struct sockaddr.sa_len exists (implies sockaddr_in.sin_len, etc) */
#undef HAVE_SOCKADDR_SA_LEN
/* Define if socklen_t exists */
#undef HAVE_SOCKLEN_T
/* Define if AF_INET6 exists in <sys/socket.h> */
#undef HAVE_AF_INET6
/* Define if `struct sockaddr_in6' exists in <netinet/in.h> */
#undef HAVE_SOCKADDR_IN6
/* Define if `struct addrinfo' exists in <netdb.h> */
#undef HAVE_ADDRINFO
/*
* Define if <netdb.h> contains AI_NUMERICHOST et al.
* Systems which only implement RFC2133 will need this.
*/
#undef HAVE_RFC2553_NETDB
/* Define if `struct direct' has a d_namlen element */
#undef HAVE_D_NAMLEN
/* Define if h_errno exists in <netdb.h> */
#undef HAVE_H_ERRNO_D
/* Define if fclose() is declared in <stdio.h> */
#undef HAVE_FCLOSE_D
/* Define if getpass() is declared in <stdlib.h> or <unistd.h> */
#undef HAVE_GETPASS_D
/* Define if optarg is declared in <stdlib.h> or <unistd.h> */
#undef HAVE_OPTARG_D
/* Define if optind is declared in <stdlib.h> or <unistd.h> */
#undef HAVE_OPTIND_D
/* Define if pclose() is declared in <stdio.h> */
#undef HAVE_PCLOSE_D
/* Define if `long long' is supported and sizeof(off_t) >= 8 */
#undef HAVE_QUAD_SUPPORT
/* Define if strptime() is declared in <time.h> */
#undef HAVE_STRPTIME_D
/*
* Define this if compiling with SOCKS (the firewall traversal library).
* Also, you must define connect, getsockname, bind, accept, listen, and
* select to their R-versions.
*/
#undef SOCKS
#undef SOCKS4
#undef SOCKS5
#undef connect
#undef getsockname
#undef bind
#undef accept
#undef listen
#undef select
#undef dup
#undef dup2
#undef fclose
#undef gethostbyname
#undef getpeername
#undef read
#undef recv
#undef recvfrom
#undef rresvport
#undef send
#undef sendto
#undef shutdown
#undef write

File diff suppressed because it is too large Load Diff

View File

@ -1,307 +0,0 @@
dnl $Id: configure.in,v 1.37 2002/06/10 08:08:53 lukem Exp $
dnl
dnl configure.in --
dnl process this file with autoconf to produce a configure script.
dnl
AC_REVISION($Revision: 1.37 $)dnl
AC_INIT(lukemftp.h)
dnl Arguments for which features are included
dnl
AC_ARG_PROGRAM
AC_ARG_ENABLE(editcomplete, [\
--enable-editcomplete Turn on command line editing and completion.
--disable-editcomplete Turn off command line editing and completion
[default: enabled].],
opt_editcomplete=$enableval,
opt_editcomplete=yes)
AC_ARG_ENABLE(ipv6, [\
--enable-ipv6 Enable IPv6 support (if your OS supports it).
--disable-ipv6 Disable IPv6 support (even if your OS supports it)
[default: enabled].],
opt_ipv6=$enableval,
opt_ipv6=yes)
dnl Checks for programs.
dnl
AC_PROG_MAKE_SET
AC_PROG_CC
AC_PROG_AWK
AC_PROG_INSTALL
AC_PROG_RANLIB
AC_CHECK_PROGS(AR, ar)
AC_AIX
dnl Checks for libraries.
dnl
AC_CHECK_LIB(util, fparseln)
if test $opt_editcomplete = yes; then
AC_CHECK_LIB(tinfo, tgetent, ,
AC_CHECK_LIB(termcap, tgetent, ,
AC_CHECK_LIB(curses, tgetent, ,
AC_CHECK_LIB(ncurses, tgetent))))
AC_SEARCH_LIBS(el_init, edit, have_libedit=yes, have_libedit=no)
fi
AC_LIBRARY_NET
AC_LIBRARY_SOCKS
if test -n "$socks"; then
if test $opt_ipv6 = yes; then
echo "IPv6 is incompatible with socks, disabling IPv6 support"
opt_ipv6=no
fi
fi
dnl Checks for header files.
dnl
AC_CONFIG_HEADER(config.h)
AC_HEADER_DIRENT
AC_HEADER_STDC
AC_CHECK_HEADERS(arpa/nameser.h err.h regex.h paths.h poll.h sys/poll.h \
termcap.h util.h libutil.h vis.h)
dnl Checks for typedefs, structures, and compiler characteristics.
dnl
AC_HEADER_TIME
AC_TYPE_OFF_T
AC_CHECK_SIZEOF(off_t, 0)
AC_MSG_TRY_LINK(for long long, ftp_cv_HAVE_LONG_LONG, [
#include <sys/types.h>] , [
long long X = 2, Y = 1, Z;
Z = X / Y; ], [
AC_DEFINE(HAVE_LONG_LONG, 1)
have_long_long=yes], [have_long_long=no])
AC_MSG_TRY_COMPILE(for in_port_t, ftp_cv_HAVE_IN_PORT_T, [
#include <sys/types.h>
#include <netinet/in.h> ], [ in_port_t X ], [AC_DEFINE(HAVE_IN_PORT_T, 1)])
AC_MSG_TRY_COMPILE(for sa_family_t, ftp_cv_HAVE_SA_FAMILY_T, [
#include <sys/types.h>
#include <sys/socket.h> ], [ sa_family_t X ], [AC_DEFINE(HAVE_SA_FAMILY_T, 1)])
AC_MSG_TRY_COMPILE(for sockaddr_in.sin_len, ftp_cv_HAVE_SOCKADDR_SA_LEN, [
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h> ], [
struct sockaddr_in sin;
int X = sin.sin_len ], [AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1)])
AC_MSG_TRY_COMPILE(for socklen_t, ftp_cv_HAVE_SOCKLEN_T, [
#include <sys/types.h>
#include <sys/socket.h> ], [ socklen_t X ], [AC_DEFINE(HAVE_SOCKLEN_T, 1)])
if test $opt_ipv6 = yes; then
AC_MSG_TRY_COMPILE(for AF_INET6, ftp_cv_HAVE_AF_INET6, [
#include <sys/types.h>
#include <sys/socket.h> ],
[ int X = AF_INET6 ], [AC_DEFINE(HAVE_AF_INET6, 1)])
AC_MSG_TRY_COMPILE(for struct sockaddr_in6, ftp_cv_HAVE_SOCKADDR_IN6, [
#include <sys/types.h>
#include <netinet/in.h> ],
[ struct sockaddr_in6 X ], [AC_DEFINE(HAVE_SOCKADDR_IN6, 1)])
fi
AC_MSG_TRY_COMPILE(for struct addrinfo, ftp_cv_HAVE_ADDRINFO, [
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h> ],
[ struct addrinfo X ], [AC_DEFINE(HAVE_ADDRINFO, 1)])
AC_MSG_TRY_COMPILE(for d_namlen in struct dirent, ftp_cv_HAVE_D_NAMLEN, [
#if HAVE_DIRENT_H
# include <dirent.h>
#else
# define dirent direct
# if HAVE_SYS_NDIR_H
# include <sys/ndir.h>
# endif
# if HAVE_SYS_DIR_H
# include <sys/dir.h>
# endif
# if HAVE_NDIR_H
# include <ndir.h>
# endif
#endif ], [
struct dirent dp;
int X = dp.d_namlen; ], [AC_DEFINE(HAVE_D_NAMLEN, 1)])
AC_MSG_TRY_COMPILE(for h_errno declaration, ftp_cv_HAVE_H_ERRNO_D, [
#include <netdb.h> ], [ int X = h_errno ], [AC_DEFINE(HAVE_H_ERRNO_D, 1)])
AC_MSG_TRY_COMPILE(for fclose() declaration, ftp_cv_HAVE_FCLOSE_D, [
#include <stdio.h> ], [ int (*X)() = fclose ], [AC_DEFINE(HAVE_FCLOSE_D, 1)])
AC_MSG_TRY_COMPILE(for getpass() declaration, ftp_cv_HAVE_GETPASS_D, [
#include <stdlib.h>
#include <unistd.h> ], [ char *(*X)() = getpass ], [
AC_DEFINE(HAVE_GETPASS_D, 1)])
AC_MSG_TRY_COMPILE(for optarg declaration, ftp_cv_HAVE_OPTARG_D, [
#include <stdlib.h>
#include <unistd.h> ], [ char *X = optarg ], [AC_DEFINE(HAVE_OPTARG_D, 1)])
AC_MSG_TRY_COMPILE(for optind declaration, ftp_cv_HAVE_OPTIND_D, [
#include <stdlib.h>
#include <unistd.h> ], [ int X = optind ], [AC_DEFINE(HAVE_OPTIND_D, 1)])
AC_MSG_TRY_COMPILE(for pclose() declaration, ftp_cv_HAVE_PCLOSE_D, [
#include <stdio.h> ], [ int (*X)() = pclose ], [AC_DEFINE(HAVE_PCLOSE_D, 1)])
dnl Checks for library functions.
dnl
AC_REPLACE_FUNCS(err fgetln fseeko getaddrinfo getnameinfo inet_ntop inet_pton \
mkstemp setprogname sl_init snprintf strdup strerror strlcat \
strlcpy strptime strsep strunvis strvis timegm usleep)
AC_CHECK_FUNCS(gethostbyname2 getpassphrase getpgrp memmove poll select)
if test $ac_cv_func_getpgrp = yes; then
AC_FUNC_GETPGRP
fi
if test $ac_cv_lib_util_fparseln != yes; then
AC_REPLACE_FUNCS(fparseln)
fi
LIBOBJS="$LIBOBJS glob.o"
if test $ac_cv_func_strptime = yes; then
AC_MSG_TRY_COMPILE(for strptime() declaration, ftp_cv_HAVE_STRPTIME_D, [
#include <time.h> ], [ char *X = strptime("", "", NULL) ],
[AC_DEFINE(HAVE_STRPTIME_D, 1)])
fi
if test $have_long_long = yes -a $ac_cv_sizeof_off_t -ge 8; then
dnl We assume that if sprintf() supports %lld or %qd,
dnl then all of *printf() does. If not, disable long long
dnl support because we don't know how to display it.
AC_MSG_CHECKING(*printf() support for %lld)
can_printf_longlong=no
AC_TRY_RUN([
#include <stdio.h>
int main() {
char buf[100];
sprintf(buf, "%lld", 4294967300LL);
return (strcmp(buf, "4294967300"));
}
], [
AC_MSG_RESULT(yes)
can_printf_longlong=yes
], [
AC_MSG_RESULT(no)
], [ : ])
if test $can_printf_longlong != yes; then
AC_MSG_CHECKING(*printf() support for %qd)
AC_TRY_RUN([
#include <stdio.h>
int main() {
char buf[100];
sprintf(buf, "%qd", 4294967300LL);
return (strcmp(buf, "4294967300"));
}
], [
AC_MSG_RESULT(yes)
can_printf_longlong=yes
AC_DEFINE(HAVE_PRINTF_QD, 1)
], [
AC_MSG_RESULT(no)
], [ : ])
fi
if test $can_printf_longlong = yes; then
AC_DEFINE(HAVE_QUAD_SUPPORT, 1)
AC_REPLACE_FUNCS(strtoll)
fi
fi
if test $opt_editcomplete = yes; then
if test $have_libedit = yes; then
AC_MSG_TRY_COMPILE(for EL_RPROMPT in libedit,
ftp_cv_have_libedit, [
#include <histedit.h> ], [ int X = EL_RPROMPT ], [:],
have_libedit=no )
fi
AC_MSG_CHECKING(for working libedit)
if test $have_libedit = no; then
AC_MSG_RESULT(no - using my own)
INCLUDES="-I\${srcdir}/../libedit $INCLUDES"
LDFLAGS="-L../libedit $LDFLAGS"
LIBS="-ledit $LIBS"
LIBEDIT=libedit.a
LIBDEPENDS="$LIBDEPENDS ../libedit/libedit.a"
else
AC_MSG_RESULT(yes)
fi
else
CFLAGS="-DNO_EDITCOMPLETE $CFLAGS"
fi
if test $ac_cv_func_sl_init = yes; then
AC_MSG_TRY_COMPILE(if sl_add() returns int, ftp_cv_INT_SL_ADD, [
#include <stringlist.h> ], [ int f = sl_add((StringList *)0, "foo") ],
[:] , [LIBOBJS="$LIBOBJS sl_init.o"])
fi
have_rfc2553_netdb=no
if test $ac_cv_func_getaddrinfo = yes -a ! -n "$socks"; then
AC_MSG_TRY_COMPILE(for AI_NUMERICHOST,
ftp_cv_have_ai_numerichost, [
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h> ],
[ int X = AI_NUMERICHOST ], [ have_rfc2553_netdb=yes ])
fi
AC_MSG_CHECKING(for working getaddrinfo())
if test $have_rfc2553_netdb = yes; then
AC_DEFINE(HAVE_RFC2553_NETDB, 1)
AC_MSG_RESULT(yes)
else
if test $ac_cv_func_getaddrinfo = yes; then
LIBOBJS="$LIBOBJS getaddrinfo.o"
AC_MSG_RESULT(no - using local version)
else
AC_MSG_RESULT(using local version)
fi
fi
if test $ac_cv_header_vis_h = yes; then
AC_MSG_TRY_COMPILE(for VIS_WHITE in vis.h,
ftp_cv_have_vis_white, [
#include <sys/types.h>
#include <vis.h> ], [ int X = VIS_WHITE ], [:],
ac_cv_header_vis_h=no )
fi
if test -n "$LIBOBJS"; then
INCLUDES="$INCLUDES -I\${srcdir}/../libukem"
LDFLAGS="$LDFLAGS -L../libukem"
LIBS="$LIBS -lukem"
LIBUKEM=libukem.a
LIBDEPENDS="$LIBDEPENDS ../libukem/libukem.a"
fi
dnl Create the Makefiles
dnl
AC_SUBST(INCLUDES)
AC_SUBST(LIBEDIT)
AC_SUBST(LIBUKEM)
AC_SUBST(LIBDEPENDS)
AC_OUTPUT(Makefile libedit/Makefile libedit/makelist libukem/Makefile \
src/Makefile)

File diff suppressed because it is too large Load Diff

View File

@ -1,251 +0,0 @@
#!/bin/sh
#
# install - install a program, script, or datafile
# This comes from X11R5 (mit/util/scripts/install.sh).
#
# Copyright 1991 by the Massachusetts Institute of Technology
#
# Permission to use, copy, modify, distribute, and sell this software and its
# documentation for any purpose is hereby granted without fee, provided that
# the above copyright notice appear in all copies and that both that
# copyright notice and this permission notice appear in supporting
# documentation, and that the name of M.I.T. not be used in advertising or
# publicity pertaining to distribution of the software without specific,
# written prior permission. M.I.T. makes no representations about the
# suitability of this software for any purpose. It is provided "as is"
# without express or implied warranty.
#
# Calling this script install-sh is preferred over install.sh, to prevent
# `make' implicit rules from creating a file called install from it
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
# from scratch. It can only install one file at a time, a restriction
# shared with many OS's install programs.
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
doit="${DOITPROG-}"
# put in absolute paths if you don't have them in your path; or use env. vars.
mvprog="${MVPROG-mv}"
cpprog="${CPPROG-cp}"
chmodprog="${CHMODPROG-chmod}"
chownprog="${CHOWNPROG-chown}"
chgrpprog="${CHGRPPROG-chgrp}"
stripprog="${STRIPPROG-strip}"
rmprog="${RMPROG-rm}"
mkdirprog="${MKDIRPROG-mkdir}"
transformbasename=""
transform_arg=""
instcmd="$mvprog"
chmodcmd="$chmodprog 0755"
chowncmd=""
chgrpcmd=""
stripcmd=""
rmcmd="$rmprog -f"
mvcmd="$mvprog"
src=""
dst=""
dir_arg=""
while [ x"$1" != x ]; do
case $1 in
-c) instcmd="$cpprog"
shift
continue;;
-d) dir_arg=true
shift
continue;;
-m) chmodcmd="$chmodprog $2"
shift
shift
continue;;
-o) chowncmd="$chownprog $2"
shift
shift
continue;;
-g) chgrpcmd="$chgrpprog $2"
shift
shift
continue;;
-s) stripcmd="$stripprog"
shift
continue;;
-t=*) transformarg=`echo $1 | sed 's/-t=//'`
shift
continue;;
-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
shift
continue;;
*) if [ x"$src" = x ]
then
src=$1
else
# this colon is to work around a 386BSD /bin/sh bug
:
dst=$1
fi
shift
continue;;
esac
done
if [ x"$src" = x ]
then
echo "install: no input file specified"
exit 1
else
true
fi
if [ x"$dir_arg" != x ]; then
dst=$src
src=""
if [ -d $dst ]; then
instcmd=:
chmodcmd=""
else
instcmd=mkdir
fi
else
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if [ -f $src -o -d $src ]
then
true
else
echo "install: $src does not exist"
exit 1
fi
if [ x"$dst" = x ]
then
echo "install: no destination specified"
exit 1
else
true
fi
# If destination is a directory, append the input filename; if your system
# does not like double slashes in filenames, you may need to add some logic
if [ -d $dst ]
then
dst="$dst"/`basename $src`
else
true
fi
fi
## this sed command emulates the dirname command
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
# Make sure that the destination directory exists.
# this part is taken from Noah Friedman's mkinstalldirs script
# Skip lots of stat calls in the usual case.
if [ ! -d "$dstdir" ]; then
defaultIFS='
'
IFS="${IFS-${defaultIFS}}"
oIFS="${IFS}"
# Some sh's can't handle IFS=/ for some reason.
IFS='%'
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
IFS="${oIFS}"
pathcomp=''
while [ $# -ne 0 ] ; do
pathcomp="${pathcomp}${1}"
shift
if [ ! -d "${pathcomp}" ] ;
then
$mkdirprog "${pathcomp}"
else
true
fi
pathcomp="${pathcomp}/"
done
fi
if [ x"$dir_arg" != x ]
then
$doit $instcmd $dst &&
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
else
# If we're going to rename the final executable, determine the name now.
if [ x"$transformarg" = x ]
then
dstfile=`basename $dst`
else
dstfile=`basename $dst $transformbasename |
sed $transformarg`$transformbasename
fi
# don't allow the sed command to completely eliminate the filename
if [ x"$dstfile" = x ]
then
dstfile=`basename $dst`
else
true
fi
# Make a temp file name in the proper directory.
dsttmp=$dstdir/#inst.$$#
# Move or copy the file name to the temp name
$doit $instcmd $src $dsttmp &&
trap "rm -f ${dsttmp}" 0 &&
# and set any options; do chmod last to preserve setuid bits
# If any of these fail, we abort the whole thing. If we want to
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $instcmd $src $dsttmp" command.
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
# Now rename the file to the real destination.
$doit $rmcmd -f $dstdir/$dstfile &&
$doit $mvcmd $dsttmp $dstdir/$dstfile
fi &&
exit 0

View File

@ -1,403 +0,0 @@
/* $Id: lukemftp.h,v 1.43 2002/06/10 08:13:01 lukem Exp $ */
#define FTP_PRODUCT "lukemftp"
#define FTP_VERSION "1.6-beta2"
#include "config.h"
#include <sys/types.h>
#include <sys/param.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <arpa/ftp.h>
#include <arpa/inet.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
#include <netdb.h>
#include <pwd.h>
#include <setjmp.h>
#include <signal.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
#if HAVE_POLL
# if HAVE_POLL_H
# include <poll.h>
# elif HAVE_SYS_POLL_H
# include <sys/poll.h>
# endif
#elif HAVE_SELECT
# define USE_SELECT
#else
# error "no poll() or select() found"
#endif
#if HAVE_DIRENT_H
# include <dirent.h>
#else
# define dirent direct
# if HAVE_SYS_NDIR_H
# include <sys/ndir.h>
# endif
# if HAVE_SYS_DIR_H
# include <sys/dir.h>
# endif
# if HAVE_NDIR_H
# include <ndir.h>
# endif
#endif
#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
# include <sys/time.h>
# else
# include <time.h>
# endif
#endif
#if HAVE_ERR_H
# include <err.h>
#endif
#if USE_GLOB_H /* not set by configure; used by other build systems */
# include <glob.h>
#else
# include "ftpglob.h"
#endif
#if HAVE_PATHS_H
# include <paths.h>
#endif
#ifndef _PATH_BSHELL
#define _PATH_BSHELL "/bin/sh"
#endif
#ifndef _PATH_TMP
#define _PATH_TMP "/tmp/"
#endif
typedef struct _stringlist {
char **sl_str;
size_t sl_max;
size_t sl_cur;
} StringList;
StringList *sl_init(void);
int sl_add(StringList *, char *);
void sl_free(StringList *, int);
char *sl_find(StringList *, char *);
#if HAVE_TERMCAP_H
# include <termcap.h>
#else
int tgetent(char *, const char *);
char *tgetstr(const char *, char **);
int tgetflag(const char *);
int tgetnum(const char *);
char *tgoto(const char *, int, int);
void tputs(const char *, int, int (*)(int));
#endif
#if HAVE_UTIL_H
# include <util.h>
#endif
#if HAVE_LIBUTIL_H
# include <libutil.h>
#endif
#if HAVE_VIS_H
# include <vis.h>
#else
# include "ftpvis.h"
#endif
#if ! HAVE_IN_PORT_T
typedef unsigned short in_port_t;
#endif
#if ! HAVE_SA_FAMILY_T
typedef unsigned short sa_family_t;
#endif
#if ! HAVE_SOCKLEN_T
typedef unsigned int socklen_t;
#endif
#if HAVE_AF_INET6 && HAVE_SOCKADDR_IN6
# define INET6
#endif
#if ! HAVE_RFC2553_NETDB
/* RFC 2553 */
#undef EAI_ADDRFAMILY
#define EAI_ADDRFAMILY 1 /* address family for hostname not supported */
#undef EAI_AGAIN
#define EAI_AGAIN 2 /* temporary failure in name resolution */
#undef EAI_BADFLAGS
#define EAI_BADFLAGS 3 /* invalid value for ai_flags */
#undef EAI_FAIL
#define EAI_FAIL 4 /* non-recoverable failure in name resolution */
#undef EAI_FAMILY
#define EAI_FAMILY 5 /* ai_family not supported */
#undef EAI_MEMORY
#define EAI_MEMORY 6 /* memory allocation failure */
#undef EAI_NODATA
#define EAI_NODATA 7 /* no address associated with hostname */
#undef EAI_NONAME
#define EAI_NONAME 8 /* hostname nor servname provided, or not known */
#undef EAI_SERVICE
#define EAI_SERVICE 9 /* servname not supported for ai_socktype */
#undef EAI_SOCKTYPE
#define EAI_SOCKTYPE 10 /* ai_socktype not supported */
#undef EAI_SYSTEM
#define EAI_SYSTEM 11 /* system error returned in errno */
/* KAME extensions? */
#undef EAI_BADHINTS
#define EAI_BADHINTS 12
#undef EAI_PROTOCOL
#define EAI_PROTOCOL 13
#undef EAI_MAX
#define EAI_MAX 14
/* RFC 2553 */
#undef NI_MAXHOST
#define NI_MAXHOST 1025
#undef NI_MAXSERV
#define NI_MAXSERV 32
#undef NI_NOFQDN
#define NI_NOFQDN 0x00000001
#undef NI_NUMERICHOST
#define NI_NUMERICHOST 0x00000002
#undef NI_NAMEREQD
#define NI_NAMEREQD 0x00000004
#undef NI_NUMERICSERV
#define NI_NUMERICSERV 0x00000008
#undef NI_DGRAM
#define NI_DGRAM 0x00000010
/* RFC 2553 */
#undef AI_PASSIVE
#define AI_PASSIVE 0x00000001 /* get address to use bind() */
#undef AI_CANONNAME
#define AI_CANONNAME 0x00000002 /* fill ai_canonname */
/* KAME extensions ? */
#undef AI_NUMERICHOST
#define AI_NUMERICHOST 0x00000004 /* prevent name resolution */
#undef AI_MASK
#define AI_MASK (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
/* RFC 2553 */
#undef AI_ALL
#define AI_ALL 0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */
#undef AI_V4MAPPED_CFG
#define AI_V4MAPPED_CFG 0x00000200 /* accept IPv4-mapped if kernel supports */
#undef AI_ADDRCONFIG
#define AI_ADDRCONFIG 0x00000400 /* only if any address is assigned */
#undef AI_V4MAPPED
#define AI_V4MAPPED 0x00000800 /* accept IPv4-mapped IPv6 address */
#endif /* ! HAVE_RFC2553_NETDB */
#if ! HAVE_RFC2553_NETDB && ! HAVE_ADDRINFO
struct addrinfo {
int ai_flags; /* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */
int ai_family; /* PF_xxx */
int ai_socktype; /* SOCK_xxx */
int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
size_t ai_addrlen; /* length of ai_addr */
char *ai_canonname; /* canonical name for hostname */
struct sockaddr *ai_addr; /* binary address */
struct addrinfo *ai_next; /* next structure in linked list */
};
int getaddrinfo(const char *, const char *,
const struct addrinfo *, struct addrinfo **);
int getnameinfo(const struct sockaddr *, socklen_t, char *,
size_t, char *, size_t, int);
void freeaddrinfo(struct addrinfo *);
char *gai_strerror(int);
#endif /* ! HAVE_RFC2553_NETDB && ! HAVE_ADDRINFO */
#if ! HAVE_D_NAMLEN
# define DIRENT_MISSING_D_NAMLEN
#endif
#if ! HAVE_H_ERRNO_D
extern int h_errno;
#endif
#define HAVE_H_ERRNO 1 /* XXX: an assumption for now... */
#if ! HAVE_FCLOSE_D
int fclose(FILE *);
#endif
#if ! HAVE_GETPASS_D
char *getpass(const char *);
#endif
#if ! HAVE_OPTARG_D
extern char *optarg;
#endif
#if ! HAVE_OPTIND_D
extern int optind;
#endif
#if ! HAVE_PCLOSE_D
int pclose(FILE *);
#endif
#if ! HAVE_ERR
void err(int, const char *, ...);
void errx(int, const char *, ...);
void warn(const char *, ...);
void warnx(const char *, ...);
#endif
#if ! HAVE_FGETLN
char *fgetln(FILE *, size_t *);
#endif
#if ! HAVE_FSEEKO
int fseeko(FILE *, off_t, int);
#endif
#if ! HAVE_FPARSELN
# define FPARSELN_UNESCESC 0x01
# define FPARSELN_UNESCCONT 0x02
# define FPARSELN_UNESCCOMM 0x04
# define FPARSELN_UNESCREST 0x08
# define FPARSELN_UNESCALL 0x0f
char *fparseln(FILE *, size_t *, size_t *, const char[3], int);
#endif
#if ! HAVE_INET_NTOP
const char *inet_ntop(int, const void *, char *, size_t);
#endif
#if ! HAVE_INET_PTON
int inet_pton(int, const char *, void *);
#endif
#if ! HAVE_MKSTEMP
int mkstemp(char *);
#endif
#if ! HAVE_SETPROGNAME
const char *getprogname(void);
void setprogname(const char *);
#endif
#if ! HAVE_SNPRINTF
int snprintf(char *, size_t, const char *, ...);
#endif
#if ! HAVE_STRDUP
char *strdup(const char *);
#endif
#if ! HAVE_STRERROR
char *strerror(int);
#endif
#if ! HAVE_STRPTIME || ! HAVE_STRPTIME_D
char *strptime(const char *, const char *, struct tm *);
#endif
#if HAVE_QUAD_SUPPORT
# if ! HAVE_STRTOLL && HAVE_LONG_LONG
long long strtoll(const char *, char **, int);
# if ! defined(QUAD_MIN)
# define QUAD_MIN (-0x7fffffffffffffffL-1)
# endif
# if ! defined(QUAD_MAX)
# define QUAD_MAX (0x7fffffffffffffffL)
# endif
# endif
#else /* ! HAVE_QUAD_SUPPORT */
# define NO_LONG_LONG 1
#endif /* ! HAVE_QUAD_SUPPORT */
#if ! HAVE_TIMEGM
time_t timegm(struct tm *);
#endif
#if ! HAVE_HSTRERROR
char *strerror(int);
#endif
#if ! HAVE_STRLCAT
size_t strlcat(char *, const char *, size_t);
#endif
#if ! HAVE_STRLCPY
size_t strlcpy(char *, const char *, size_t);
#endif
#if ! HAVE_STRSEP
char *strsep(char **stringp, const char *delim);
#endif
#if ! HAVE_MEMMOVE
# define memmove(a,b,c) bcopy((b),(a),(c))
/* XXX: add others #defines for borken systems? */
#endif
#if HAVE_GETPASSPHRASE
# define getpass getpassphrase
#endif
#if ! defined(MIN)
# define MIN(a, b) ((a) < (b) ? (a) : (b))
#endif
#if ! defined(MAX)
# define MAX(a, b) ((a) < (b) ? (b) : (a))
#endif
#if ! defined(timersub)
# define timersub(tvp, uvp, vvp) \
do { \
(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \
(vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \
if ((vvp)->tv_usec < 0) { \
(vvp)->tv_sec--; \
(vvp)->tv_usec += 1000000; \
} \
} while (0)
#endif
#if ! defined(S_ISLNK)
# define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK)
#endif
#define EPOCH_YEAR 1970
#define SECSPERHOUR 3600
#define SECSPERDAY 86400
#define TM_YEAR_BASE 1900

View File

@ -1,28 +0,0 @@
# $NetBSD: Makefile,v 1.30 2005/02/11 15:13:28 jmc Exp $
# from: @(#)Makefile 8.2 (Berkeley) 4/3/94
.include <bsd.own.mk>
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 -DNO_AUTH -DNO_HELP -DNO_STATUS
.else
LDADD+= -ledit -ltermcap
DPADD+= ${LIBEDIT} ${LIBTERMCAP}
.endif
.if (!defined(SMALLPROG) || defined(SMALLPROG_INET6)) && (${USE_INET6} != "no")
CPPFLAGS+= -DINET6
.endif
cmds.o fetch.o: version.h
main.o: ftp_var.h
.include <bsd.prog.mk>

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -1,309 +0,0 @@
/* $NetBSD: cmdtab.c,v 1.44 2005/04/11 01:49:31 lukem Exp $ */
/*-
* Copyright (c) 1996-2000 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.
*/
/*
* Copyright (c) 1985, 1989, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* 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. Neither the name of the University 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 REGENTS 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 REGENTS 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
#if 0
static char sccsid[] = "@(#)cmdtab.c 8.4 (Berkeley) 10/9/94";
#else
__RCSID("$NetBSD: cmdtab.c,v 1.44 2005/04/11 01:49:31 lukem Exp $");
#endif
#endif /* not lint */
#include <stdio.h>
#include "ftp_var.h"
/*
* User FTP -- Command Tables.
*/
#define HSTR static const char
#ifndef NO_HELP
HSTR accounthelp[] = "send account command to remote server";
HSTR appendhelp[] = "append to a file";
HSTR asciihelp[] = "set ascii transfer type";
HSTR beephelp[] = "beep when command completed";
HSTR binaryhelp[] = "set binary transfer type";
HSTR casehelp[] = "toggle mget upper/lower case id mapping";
HSTR cdhelp[] = "change remote working directory";
HSTR cduphelp[] = "change remote working directory to parent directory";
HSTR chmodhelp[] = "change file permissions of remote file";
HSTR connecthelp[] = "connect to remote ftp server";
HSTR crhelp[] = "toggle carriage return stripping on ascii gets";
HSTR debughelp[] = "toggle/set debugging mode";
HSTR deletehelp[] = "delete remote file";
HSTR disconhelp[] = "terminate ftp session";
HSTR domachelp[] = "execute macro";
HSTR edithelp[] = "toggle command line editing";
HSTR epsv4help[] = "toggle use of EPSV/EPRT on IPv4 ftp";
HSTR feathelp[] = "show FEATures supported by remote system";
HSTR formhelp[] = "set file transfer format";
HSTR gatehelp[] = "toggle gate-ftp; specify host[:port] to change proxy";
HSTR globhelp[] = "toggle metacharacter expansion of local file names";
HSTR hashhelp[] = "toggle printing `#' marks; specify number to set size";
HSTR helphelp[] = "print local help information";
HSTR idlehelp[] = "get (set) idle timer on remote side";
HSTR lcdhelp[] = "change local working directory";
HSTR lpagehelp[] = "view a local file through your pager";
HSTR lpwdhelp[] = "print local working directory";
HSTR lshelp[] = "list contents of remote path";
HSTR macdefhelp[] = "define a macro";
HSTR mdeletehelp[] = "delete multiple files";
HSTR mgethelp[] = "get multiple files";
HSTR mregethelp[] = "get multiple files restarting at end of local file";
HSTR fgethelp[] = "get files using a localfile as a source of names";
HSTR mkdirhelp[] = "make directory on the remote machine";
HSTR mlshelp[] = "list contents of multiple remote directories";
HSTR mlsdhelp[] = "list contents of remote directory in a machine "
"parsable form";
HSTR mlsthelp[] = "list remote path in a machine parsable form";
HSTR modehelp[] = "set file transfer mode";
HSTR modtimehelp[] = "show last modification time of remote file";
HSTR mputhelp[] = "send multiple files";
HSTR newerhelp[] = "get file if remote file is newer than local file ";
HSTR nmaphelp[] = "set templates for default file name mapping";
HSTR ntranshelp[] = "set translation table for default file name mapping";
HSTR optshelp[] = "show or set options for remote commands";
HSTR pagehelp[] = "view a remote file through your pager";
HSTR passivehelp[] = "toggle use of passive transfer mode";
HSTR plshelp[] = "list contents of remote path through your pager";
HSTR pmlsdhelp[] = "list contents of remote directory in a machine "
"parsable form through your pager";
HSTR porthelp[] = "toggle use of PORT/LPRT cmd for each data connection";
HSTR preservehelp[] ="toggle preservation of modification time of "
"retrieved files";
HSTR progresshelp[] ="toggle transfer progress meter";
HSTR prompthelp[] = "force interactive prompting on multiple commands";
HSTR proxyhelp[] = "issue command on alternate connection";
HSTR pwdhelp[] = "print working directory on remote machine";
HSTR quithelp[] = "terminate ftp session and exit";
HSTR quotehelp[] = "send arbitrary ftp command";
HSTR ratehelp[] = "set transfer rate limit (in bytes/second)";
HSTR receivehelp[] = "receive file";
HSTR regethelp[] = "get file restarting at end of local file";
HSTR remotehelp[] = "get help from remote server";
HSTR renamehelp[] = "rename file";
HSTR resethelp[] = "clear queued command replies";
HSTR restarthelp[]= "restart file transfer at bytecount";
HSTR rmdirhelp[] = "remove directory on the remote machine";
HSTR rmtstatushelp[]="show status of remote machine";
HSTR runiquehelp[] = "toggle store unique for local files";
HSTR sendhelp[] = "send one file";
HSTR sethelp[] = "set or display options";
HSTR shellhelp[] = "escape to the shell";
HSTR sitehelp[] = "send site specific command to remote server\n"
"\t\tTry \"rhelp site\" or \"site help\" "
"for more information";
HSTR sizecmdhelp[] = "show size of remote file";
HSTR statushelp[] = "show current status";
HSTR structhelp[] = "set file transfer structure";
HSTR suniquehelp[] = "toggle store unique on remote machine";
HSTR systemhelp[] = "show remote system type";
HSTR tenexhelp[] = "set tenex file transfer type";
HSTR tracehelp[] = "toggle packet tracing";
HSTR typehelp[] = "set file transfer type";
HSTR umaskhelp[] = "get (set) umask on remote side";
HSTR unsethelp[] = "unset an option";
HSTR usagehelp[] = "show command usage";
HSTR userhelp[] = "send new user information";
HSTR verbosehelp[] = "toggle verbose mode";
HSTR xferbufhelp[] = "set socket send/receive buffer size";
#endif
HSTR empty[] = "";
#ifdef NO_HELP
#define H(x) empty
#else
#define H(x) x
#endif
#ifdef NO_EDITCOMPLETE
#define CMPL(x)
#define CMPL0
#else /* !NO_EDITCOMPLETE */
#define CMPL(x) #x,
#define CMPL0 empty,
#endif /* !NO_EDITCOMPLETE */
struct cmd cmdtab[] = {
{ "!", H(shellhelp), 0, 0, 0, CMPL0 shell },
{ "$", H(domachelp), 1, 0, 0, CMPL0 domacro },
{ "account", H(accounthelp), 0, 1, 1, CMPL0 account},
{ "append", H(appendhelp), 1, 1, 1, CMPL(lr) put },
{ "ascii", H(asciihelp), 0, 1, 1, CMPL0 setascii },
{ "bell", H(beephelp), 0, 0, 0, CMPL0 setbell },
{ "binary", H(binaryhelp), 0, 1, 1, CMPL0 setbinary },
{ "bye", H(quithelp), 0, 0, 0, CMPL0 quit },
{ "case", H(casehelp), 0, 0, 1, CMPL0 setcase },
{ "cd", H(cdhelp), 0, 1, 1, CMPL(r) cd },
{ "cdup", H(cduphelp), 0, 1, 1, CMPL0 cdup },
{ "chmod", H(chmodhelp), 0, 1, 1, CMPL(nr) do_chmod },
{ "close", H(disconhelp), 0, 1, 1, CMPL0 disconnect },
{ "cr", H(crhelp), 0, 0, 0, CMPL0 setcr },
{ "debug", H(debughelp), 0, 0, 0, CMPL0 setdebug },
{ "delete", H(deletehelp), 0, 1, 1, CMPL(r) delete },
{ "dir", H(lshelp), 1, 1, 1, CMPL(rl) ls },
{ "disconnect", H(disconhelp), 0, 1, 1, CMPL0 disconnect },
{ "edit", H(edithelp), 0, 0, 0, CMPL0 setedit },
{ "epsv4", H(epsv4help), 0, 0, 0, CMPL0 setepsv4 },
{ "exit", H(quithelp), 0, 0, 0, CMPL0 quit },
{ "features", H(feathelp), 0, 1, 1, CMPL0 feat },
{ "fget", H(fgethelp), 1, 1, 1, CMPL(l) fget },
{ "form", H(formhelp), 0, 1, 1, CMPL0 setform },
{ "ftp", H(connecthelp), 0, 0, 1, CMPL0 setpeer },
{ "gate", H(gatehelp), 0, 0, 0, CMPL0 setgate },
{ "get", H(receivehelp), 1, 1, 1, CMPL(rl) get },
{ "glob", H(globhelp), 0, 0, 0, CMPL0 setglob },
{ "hash", H(hashhelp), 0, 0, 0, CMPL0 sethash },
{ "help", H(helphelp), 0, 0, 1, CMPL(C) help },
{ "idle", H(idlehelp), 0, 1, 1, CMPL0 idlecmd },
{ "image", H(binaryhelp), 0, 1, 1, CMPL0 setbinary },
{ "lcd", H(lcdhelp), 0, 0, 0, CMPL(l) lcd },
{ "less", H(pagehelp), 1, 1, 1, CMPL(r) page },
{ "lpage", H(lpagehelp), 0, 0, 0, CMPL(l) lpage },
{ "lpwd", H(lpwdhelp), 0, 0, 0, CMPL0 lpwd },
{ "ls", H(lshelp), 1, 1, 1, CMPL(rl) ls },
{ "macdef", H(macdefhelp), 0, 0, 0, CMPL0 macdef },
{ "mdelete", H(mdeletehelp), 1, 1, 1, CMPL(R) mdelete },
{ "mdir", H(mlshelp), 1, 1, 1, CMPL(R) mls },
{ "mget", H(mgethelp), 1, 1, 1, CMPL(R) mget },
{ "mkdir", H(mkdirhelp), 0, 1, 1, CMPL(r) makedir },
{ "mls", H(mlshelp), 1, 1, 1, CMPL(R) mls },
{ "mlsd", H(mlsdhelp), 1, 1, 1, CMPL(r) ls },
{ "mlst", H(mlsthelp), 1, 1, 1, CMPL(r) mlst },
{ "mode", H(modehelp), 0, 1, 1, CMPL0 setftmode },
{ "modtime", H(modtimehelp), 0, 1, 1, CMPL(r) modtime },
{ "more", H(pagehelp), 1, 1, 1, CMPL(r) page },
{ "mput", H(mputhelp), 1, 1, 1, CMPL(L) mput },
{ "mreget", H(mregethelp), 1, 1, 1, CMPL(R) mget },
{ "msend", H(mputhelp), 1, 1, 1, CMPL(L) mput },
{ "newer", H(newerhelp), 1, 1, 1, CMPL(r) newer },
{ "nlist", H(lshelp), 1, 1, 1, CMPL(rl) ls },
{ "nmap", H(nmaphelp), 0, 0, 1, CMPL0 setnmap },
{ "ntrans", H(ntranshelp), 0, 0, 1, CMPL0 setntrans },
{ "open", H(connecthelp), 0, 0, 1, CMPL0 setpeer },
{ "page", H(pagehelp), 1, 1, 1, CMPL(r) page },
{ "passive", H(passivehelp), 0, 0, 0, CMPL0 setpassive },
{ "pdir", H(plshelp), 1, 1, 1, CMPL(r) ls },
{ "pls", H(plshelp), 1, 1, 1, CMPL(r) ls },
{ "pmlsd", H(pmlsdhelp), 1, 1, 1, CMPL(r) ls },
{ "preserve", H(preservehelp),0, 0, 0, CMPL0 setpreserve },
{ "progress", H(progresshelp),0, 0, 0, CMPL0 setprogress },
{ "prompt", H(prompthelp), 0, 0, 0, CMPL0 setprompt },
{ "proxy", H(proxyhelp), 0, 0, 1, CMPL(c) doproxy },
{ "put", H(sendhelp), 1, 1, 1, CMPL(lr) put },
{ "pwd", H(pwdhelp), 0, 1, 1, CMPL0 pwd },
{ "quit", H(quithelp), 0, 0, 0, CMPL0 quit },
{ "quote", H(quotehelp), 1, 1, 1, CMPL0 quote },
{ "rate", H(ratehelp), 0, 0, 0, CMPL0 setrate },
{ "rcvbuf", H(xferbufhelp), 0, 0, 0, CMPL0 setxferbuf },
{ "recv", H(receivehelp), 1, 1, 1, CMPL(rl) get },
{ "reget", H(regethelp), 1, 1, 1, CMPL(rl) reget },
{ "remopts", H(optshelp), 0, 1, 1, CMPL0 opts },
{ "rename", H(renamehelp), 0, 1, 1, CMPL(rr) renamefile },
{ "reset", H(resethelp), 0, 1, 1, CMPL0 reset },
{ "restart", H(restarthelp), 1, 1, 1, CMPL0 restart },
{ "rhelp", H(remotehelp), 0, 1, 1, CMPL0 rmthelp },
{ "rmdir", H(rmdirhelp), 0, 1, 1, CMPL(r) removedir },
{ "rstatus", H(rmtstatushelp),0, 1, 1, CMPL(r) rmtstatus },
{ "runique", H(runiquehelp), 0, 0, 1, CMPL0 setrunique },
{ "send", H(sendhelp), 1, 1, 1, CMPL(lr) put },
{ "sendport", H(porthelp), 0, 0, 0, CMPL0 setport },
{ "set", H(sethelp), 0, 0, 0, CMPL(o) setoption },
{ "site", H(sitehelp), 0, 1, 1, CMPL0 site },
{ "size", H(sizecmdhelp), 1, 1, 1, CMPL(r) sizecmd },
{ "sndbuf", H(xferbufhelp), 0, 0, 0, CMPL0 setxferbuf },
{ "status", H(statushelp), 0, 0, 1, CMPL0 status },
{ "struct", H(structhelp), 0, 1, 1, CMPL0 setstruct },
{ "sunique", H(suniquehelp), 0, 0, 1, CMPL0 setsunique },
{ "system", H(systemhelp), 0, 1, 1, CMPL0 syst },
{ "tenex", H(tenexhelp), 0, 1, 1, CMPL0 settenex },
{ "throttle", H(ratehelp), 0, 0, 0, CMPL0 setrate },
{ "trace", H(tracehelp), 0, 0, 0, CMPL0 settrace },
{ "type", H(typehelp), 0, 1, 1, CMPL0 settype },
{ "umask", H(umaskhelp), 0, 1, 1, CMPL0 do_umask },
{ "unset", H(unsethelp), 0, 0, 0, CMPL(o) unsetoption },
{ "usage", H(usagehelp), 0, 0, 1, CMPL(C) help },
{ "user", H(userhelp), 0, 1, 1, CMPL0 user },
{ "verbose", H(verbosehelp), 0, 0, 0, CMPL0 setverbose },
{ "xferbuf", H(xferbufhelp), 0, 0, 0, CMPL0 setxferbuf },
{ "?", H(helphelp), 0, 0, 1, CMPL(C) help },
{ 0 },
};
struct option optiontab[] = {
{ "anonpass", NULL },
{ "ftp_proxy", NULL },
{ "http_proxy", NULL },
{ "no_proxy", NULL },
{ "pager", NULL },
{ "prompt", NULL },
{ "rprompt", NULL },
{ 0 },
};

View File

@ -1,435 +0,0 @@
/* $NetBSD: complete.c,v 1.38 2000/05/01 10:35:17 lukem Exp $ */
/*-
* Copyright (c) 1997-2000 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.
*/
#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 <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"
#ifndef NO_EDITCOMPLETE
static int comparstr (const void *, const void *);
static unsigned char complete_ambiguous (char *, int, StringList *);
static unsigned char complete_command (char *, int);
static unsigned char complete_local (char *, int);
static unsigned char complete_option (char *, int);
static unsigned char complete_remote (char *, int);
static int
comparstr(const void *a, const void *b)
{
return (strcmp(*(const char **)a, *(const char **)b));
}
/*
* Determine if complete is ambiguous. If unique, insert.
* If no choices, error. If unambiguous prefix, insert that.
* Otherwise, list choices. words is assumed to be filtered
* to only contain possible choices.
* Args:
* word word which started the match
* list list by default
* words stringlist containing possible matches
* Returns a result as per el_set(EL_ADDFN, ...)
*/
static unsigned char
complete_ambiguous(char *word, int list, StringList *words)
{
char insertstr[MAXPATHLEN];
char *lastmatch, *p;
int i, j;
size_t matchlen, wordlen;
wordlen = strlen(word);
if (words->sl_cur == 0)
return (CC_ERROR); /* no choices available */
if (words->sl_cur == 1) { /* only once choice available */
p = words->sl_str[0] + wordlen;
if (*p == '\0') /* at end of word? */
return (CC_REFRESH);
ftpvis(insertstr, sizeof(insertstr), p, strlen(p));
if (el_insertstr(el, insertstr) == -1)
return (CC_ERROR);
else
return (CC_REFRESH);
}
if (!list) {
matchlen = 0;
lastmatch = words->sl_str[0];
matchlen = strlen(lastmatch);
for (i = 1 ; i < words->sl_cur ; i++) {
for (j = wordlen ; j < strlen(words->sl_str[i]); j++)
if (lastmatch[j] != words->sl_str[i][j])
break;
if (j < matchlen)
matchlen = j;
}
if (matchlen > wordlen) {
ftpvis(insertstr, sizeof(insertstr),
lastmatch + wordlen, matchlen - wordlen);
if (el_insertstr(el, insertstr) == -1)
return (CC_ERROR);
else
return (CC_REFRESH_BEEP);
}
}
putc('\n', ttyout);
qsort(words->sl_str, words->sl_cur, sizeof(char *), comparstr);
list_vertical(words);
return (CC_REDISPLAY);
}
/*
* Complete a command
*/
static unsigned char
complete_command(char *word, int list)
{
struct cmd *c;
StringList *words;
size_t wordlen;
unsigned char rv;
words = xsl_init();
wordlen = strlen(word);
for (c = cmdtab; c->c_name != NULL; c++) {
if (wordlen > strlen(c->c_name))
continue;
if (strncmp(word, c->c_name, wordlen) == 0)
xsl_add(words, c->c_name);
}
rv = complete_ambiguous(word, list, words);
if (rv == CC_REFRESH) {
if (el_insertstr(el, " ") == -1)
rv = CC_ERROR;
}
sl_free(words, 0);
return (rv);
}
/*
* Complete a local file
*/
static unsigned char
complete_local(char *word, int list)
{
StringList *words;
char dir[MAXPATHLEN];
char *file;
DIR *dd;
struct dirent *dp;
unsigned char rv;
size_t len;
if ((file = strrchr(word, '/')) == NULL) {
dir[0] = '.';
dir[1] = '\0';
file = word;
} else {
if (file == word) {
dir[0] = '/';
dir[1] = '\0';
} else
(void)strlcpy(dir, word, file - word + 1);
file++;
}
if (dir[0] == '~') {
char *p;
if ((p = globulize(dir)) == NULL)
return (CC_ERROR);
(void)strlcpy(dir, p, sizeof(dir));
free(p);
}
if ((dd = opendir(dir)) == NULL)
return (CC_ERROR);
words = xsl_init();
len = strlen(file);
for (dp = readdir(dd); dp != NULL; dp = readdir(dd)) {
if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, ".."))
continue;
#if defined(DIRENT_MISSING_D_NAMLEN)
if (len > strlen(dp->d_name))
continue;
#else
if (len > dp->d_namlen)
continue;
#endif
if (strncmp(file, dp->d_name, len) == 0) {
char *tcp;
tcp = xstrdup(dp->d_name);
xsl_add(words, tcp);
}
}
closedir(dd);
rv = complete_ambiguous(file, list, words);
if (rv == CC_REFRESH) {
struct stat sb;
char path[MAXPATHLEN];
(void)strlcpy(path, dir, sizeof(path));
(void)strlcat(path, "/", sizeof(path));
(void)strlcat(path, words->sl_str[0], sizeof(path));
if (stat(path, &sb) >= 0) {
char suffix[2] = " ";
if (S_ISDIR(sb.st_mode))
suffix[0] = '/';
if (el_insertstr(el, suffix) == -1)
rv = CC_ERROR;
}
}
sl_free(words, 1);
return (rv);
}
/*
* Complete an option
*/
static unsigned char
complete_option(char *word, int list)
{
struct option *o;
StringList *words;
size_t wordlen;
unsigned char rv;
words = xsl_init();
wordlen = strlen(word);
for (o = optiontab; o->name != NULL; o++) {
if (wordlen > strlen(o->name))
continue;
if (strncmp(word, o->name, wordlen) == 0)
xsl_add(words, o->name);
}
rv = complete_ambiguous(word, list, words);
if (rv == CC_REFRESH) {
if (el_insertstr(el, " ") == -1)
rv = CC_ERROR;
}
sl_free(words, 0);
return (rv);
}
/*
* Complete a remote file
*/
static unsigned char
complete_remote(char *word, int list)
{
static StringList *dirlist;
static char lastdir[MAXPATHLEN];
StringList *words;
char dir[MAXPATHLEN];
char *file, *cp;
int i;
unsigned char rv;
char *dummyargv[] = { "complete", NULL, NULL };
dummyargv[1] = dir;
if ((file = strrchr(word, '/')) == NULL) {
dir[0] = '\0';
file = word;
} else {
cp = file;
while (*cp == '/' && cp > word)
cp--;
(void)strlcpy(dir, word, cp - word + 2);
file++;
}
if (dirchange || dirlist == NULL ||
strcmp(dir, lastdir) != 0) { /* dir not cached */
char *emesg;
if (dirlist != NULL)
sl_free(dirlist, 1);
dirlist = xsl_init();
mflag = 1;
emesg = NULL;
while ((cp = remglob(dummyargv, 0, &emesg)) != NULL) {
char *tcp;
if (!mflag)
continue;
if (*cp == '\0') {
mflag = 0;
continue;
}
tcp = strrchr(cp, '/');
if (tcp)
tcp++;
else
tcp = cp;
tcp = xstrdup(tcp);
xsl_add(dirlist, tcp);
}
if (emesg != NULL) {
fprintf(ttyout, "\n%s\n", emesg);
return (CC_REDISPLAY);
}
(void)strlcpy(lastdir, dir, sizeof(lastdir));
dirchange = 0;
}
words = xsl_init();
for (i = 0; i < dirlist->sl_cur; i++) {
cp = dirlist->sl_str[i];
if (strlen(file) > strlen(cp))
continue;
if (strncmp(file, cp, strlen(file)) == 0)
xsl_add(words, cp);
}
rv = complete_ambiguous(file, list, words);
sl_free(words, 0);
return (rv);
}
/*
* Generic complete routine
*/
unsigned char
complete(EditLine *el, int ch)
{
static char word[FTPBUFLEN];
static int lastc_argc, lastc_argo;
struct cmd *c;
const LineInfo *lf;
int celems, dolist, cmpltype;
size_t len;
lf = el_line(el);
len = lf->lastchar - lf->buffer;
if (len >= sizeof(line))
return (CC_ERROR);
(void)strlcpy(line, lf->buffer, len + 1);
cursor_pos = line + (lf->cursor - lf->buffer);
lastc_argc = cursor_argc; /* remember last cursor pos */
lastc_argo = cursor_argo;
makeargv(); /* build argc/argv of current line */
if (cursor_argo >= sizeof(word))
return (CC_ERROR);
dolist = 0;
/* if cursor and word is same, list alternatives */
if (lastc_argc == cursor_argc && lastc_argo == cursor_argo
&& strncmp(word, margv[cursor_argc] ? margv[cursor_argc] : "",
cursor_argo) == 0)
dolist = 1;
else if (cursor_argc < margc)
(void)strlcpy(word, margv[cursor_argc], cursor_argo + 1);
word[cursor_argo] = '\0';
if (cursor_argc == 0)
return (complete_command(word, dolist));
c = getcmd(margv[0]);
if (c == (struct cmd *)-1 || c == 0)
return (CC_ERROR);
celems = strlen(c->c_complete);
/* check for 'continuation' completes (which are uppercase) */
if ((cursor_argc > celems) && (celems > 0)
&& isupper((unsigned char) c->c_complete[celems-1]))
cursor_argc = celems;
if (cursor_argc > celems)
return (CC_ERROR);
cmpltype = c->c_complete[cursor_argc - 1];
switch (cmpltype) {
case 'c': /* command complete */
case 'C':
return (complete_command(word, dolist));
case 'l': /* local complete */
case 'L':
return (complete_local(word, dolist));
case 'n': /* no complete */
case 'N': /* no complete */
return (CC_ERROR);
case 'o': /* local complete */
case 'O':
return (complete_option(word, dolist));
case 'r': /* remote complete */
case 'R':
if (connected != -1) {
fputs("\nMust be logged in to complete.\n",
ttyout);
return (CC_REDISPLAY);
}
return (complete_remote(word, dolist));
default:
errx(1, "unknown complete type `%c'", cmpltype);
return (CC_ERROR);
}
/* NOTREACHED */
}
#endif /* !NO_EDITCOMPLETE */

View File

@ -1,143 +0,0 @@
/* $NetBSD: domacro.c,v 1.20 2003/08/07 11:13:53 agc Exp $ */
/*
* Copyright (c) 1985, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* 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. Neither the name of the University 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 REGENTS 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 REGENTS 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
#if 0
static char sccsid[] = "@(#)domacro.c 8.3 (Berkeley) 4/2/94";
#else
__RCSID("$NetBSD: domacro.c,v 1.20 2003/08/07 11:13:53 agc Exp $");
#endif
#endif /* not lint */
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include "ftp_var.h"
void
domacro(int argc, char *argv[])
{
int i, j, count = 2, loopflg = 0;
char *cp1, *cp2, line2[FTPBUFLEN];
struct cmd *c;
if ((argc == 0 && argv != NULL) ||
(argc < 2 && !another(&argc, &argv, "macro name"))) {
fprintf(ttyout, "usage: %s macro_name [args]\n", argv[0]);
code = -1;
return;
}
for (i = 0; i < macnum; ++i) {
if (!strncmp(argv[1], macros[i].mac_name, 9))
break;
}
if (i == macnum) {
fprintf(ttyout, "'%s' macro not found.\n", argv[1]);
code = -1;
return;
}
(void)strlcpy(line2, line, sizeof(line2));
TOP:
cp1 = macros[i].mac_start;
while (cp1 != macros[i].mac_end) {
while (isspace((unsigned char)*cp1))
cp1++;
cp2 = line;
while (*cp1 != '\0') {
switch(*cp1) {
case '\\':
*cp2++ = *++cp1;
break;
case '$':
if (isdigit((unsigned char)*(cp1+1))) {
j = 0;
while (isdigit((unsigned char)*++cp1))
j = 10*j + *cp1 - '0';
cp1--;
if (argc - 2 >= j) {
(void)strlcpy(cp2, argv[j+1],
sizeof(line) - (cp2 - line));
cp2 += strlen(argv[j+1]);
}
break;
}
if (*(cp1+1) == 'i') {
loopflg = 1;
cp1++;
if (count < argc) {
(void)strlcpy(cp2, argv[count],
sizeof(line) - (cp2 - line));
cp2 += strlen(argv[count]);
}
break;
}
/* intentional drop through */
default:
*cp2++ = *cp1;
break;
}
if (*cp1 != '\0')
cp1++;
}
*cp2 = '\0';
makeargv();
c = getcmd(margv[0]);
if (c == (struct cmd *)-1) {
fputs("?Ambiguous command.\n", ttyout);
code = -1;
} else if (c == 0) {
fputs("?Invalid command.\n", ttyout);
code = -1;
} else if (c->c_conn && !connected) {
fputs("Not connected.\n", ttyout);
code = -1;
} else {
if (verbose) {
fputs(line, ttyout);
putc('\n', ttyout);
}
margv[0] = c->c_name;
(*c->c_handler)(margc, margv);
if (bell && c->c_bell)
(void)putc('\007', ttyout);
(void)strlcpy(line, line2, sizeof(line));
makeargv();
argc = margc;
argv = margv;
}
if (cp1 != macros[i].mac_end)
cp1++;
}
if (loopflg && ++count < argc)
goto TOP;
}

View File

@ -1,257 +0,0 @@
/* $NetBSD: extern.h,v 1.67 2005/05/14 15:26:43 lukem Exp $ */
/*-
* Copyright (c) 1996-2005 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.
*/
/*-
* Copyright (c) 1994 The Regents of the University of California.
* All rights reserved.
*
* 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. Neither the name of the University 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 REGENTS 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 REGENTS 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.
*
* @(#)extern.h 8.3 (Berkeley) 10/9/94
*/
/*
* Copyright (C) 1997 and 1998 WIDE Project.
* All rights reserved.
*
* 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
*/
struct sockaddr;
struct tm;
struct addrinfo;
void abort_remote(FILE *);
void abort_squared(int);
void abortpt(int);
void abortxfer(int);
void account(int, char **);
void ai_unmapped(struct addrinfo *);
int another(int *, char ***, const char *);
int auto_fetch(int, char **);
int auto_put(int, char **, const char *);
void blkfree(char **);
void cd(int, char **);
void cdup(int, char **);
void changetype(int, int);
void cleanuppeer(void);
void cmdabort(int);
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);
#endif /* !NO_EDITCOMPLETE */
void crankrate(int);
FILE *dataconn(const char *);
void delete(int, char **);
void disconnect(int, char **);
void do_chmod(int, char **);
void do_umask(int, char **);
void domacro(int, char **);
void doproxy(int, char **);
void feat(int, char **);
void fget(int, char **);
int fileindir(const char *, const char *);
int foregroundproc(void);
void formatbuf(char *, size_t, const char *);
void ftpvis(char *, size_t, const char *, size_t);
int ftp_login(const char *, const char *, const char *);
void get(int, char **);
struct cmd *getcmd(const char *);
int getit(int, char **, int, const char *);
struct option *getoption(const char *);
char *getoptionvalue(const char *);
void getremoteinfo(void);
int getreply(int);
char *globulize(const char *);
char *gunique(const char *);
void help(int, char **);
char *hookup(char *, char *);
void idlecmd(int, char **);
int initconn(void);
void intr(int);
int isipv6addr(const char *);
void list_vertical(StringList *);
void lcd(int, char **);
void lostpeer(int);
void lpage(int, char **);
void lpwd(int, char **);
void ls(int, char **);
void mabort(void);
void macdef(int, char **);
void makeargv(void);
void makedir(int, char **);
void mdelete(int, char **);
void mget(int, char **);
void mintr(int);
void mls(int, char **);
void mlst(int, char **);
void modtime(int, char **);
void mput(int, char **);
char *onoff(int);
void opts(int, char **);
void newer(int, char **);
void page(int, char **);
int parseport(const char *, int);
int parserate(int, char **, int);
char *prompt(void);
void proxabort(int);
void proxtrans(const char *, const char *, const char *);
void psabort(int);
void pswitch(int);
void put(int, char **);
void pwd(int, char **);
void quit(int, char **);
void quote(int, char **);
void quote1(const char *, int, char **);
void recvrequest(const char *, const char *, const char *,
const char *, int, int);
void reget(int, char **);
char *remglob(char **, int, char **);
time_t remotemodtime(const char *, int);
off_t remotesize(const char *, int);
void removedir(int, char **);
void renamefile(int, char **);
void reset(int, char **);
void restart(int, char **);
void rmthelp(int, char **);
void rmtstatus(int, char **);
char *rprompt(void);
int ruserpass(const char *, const char **, const char **,
const char **);
void sendrequest(const char *, const char *, const char *, int);
void setascii(int, char **);
void setbell(int, char **);
void setbinary(int, char **);
void setcase(int, char **);
void setcr(int, char **);
void setdebug(int, char **);
void setedit(int, char **);
void setepsv4(int, char **);
void setform(int, char **);
void setftmode(int, char **);
void setgate(int, char **);
void setglob(int, char **);
void sethash(int, char **);
void setnmap(int, char **);
void setntrans(int, char **);
void setoption(int, char **);
void setpassive(int, char **);
void setpeer(int, char **);
void setport(int, char **);
void setpreserve(int, char **);
void setprogress(int, char **);
void setprompt(int, char **);
void setrate(int, char **);
void setrunique(int, char **);
void setstruct(int, char **);
void setsunique(int, char **);
void settenex(int, char **);
void settrace(int, char **);
void setttywidth(int);
void settype(int, char **);
void setupsockbufsize(int);
void setverbose(int, char **);
void setxferbuf(int, char **);
void shell(int, char **);
void site(int, char **);
void sizecmd(int, char **);
char *slurpstring(void);
void status(int, char **);
int strsuftoi(const char *);
void syst(int, char **);
int togglevar(int, char **, int *, const char *);
void unsetoption(int, char **);
void updatelocalcwd(void);
void updateremotecwd(void);
void usage(void);
void user(int, char **);
int xconnect(int, const struct sockaddr *, socklen_t);
int xlisten(int, int);
int xpoll(struct pollfd *, int, int);
void *xmalloc(size_t);
StringList *xsl_init(void);
void xsl_add(StringList *, char *);
char *xstrdup(const char *);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,337 +0,0 @@
/* $NetBSD: ftp_var.h,v 1.71 2005/04/11 01:49:31 lukem Exp $ */
/*-
* Copyright (c) 1996-2005 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.
*/
/*
* Copyright (c) 1985, 1989, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* 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. Neither the name of the University 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 REGENTS 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 REGENTS 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.
*
* @(#)ftp_var.h 8.4 (Berkeley) 10/9/94
*/
/*
* Copyright (C) 1997 and 1998 WIDE Project.
* All rights reserved.
*
* 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
*/
/*
* FTP global variables.
*/
#ifdef SMALL
#undef NO_EDITCOMPLETE
#define NO_EDITCOMPLETE
#undef NO_PROGRESS
#define NO_PROGRESS
#endif
#include <sys/param.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <poll.h>
#include <setjmp.h>
#include <stringlist.h>
#ifndef NO_EDITCOMPLETE
#include <histedit.h>
#endif /* !NO_EDITCOMPLETE */
#include "extern.h"
#include "progressbar.h"
/*
* Format of command table.
*/
struct cmd {
char *c_name; /* name of command */
const char *c_help; /* help string */
char c_bell; /* give bell when command completes */
char c_conn; /* must be connected to use command */
char c_proxy; /* proxy server may execute */
#ifndef NO_EDITCOMPLETE
const char *c_complete; /* context sensitive completion list */
#endif /* !NO_EDITCOMPLETE */
void (*c_handler)(int, char **); /* function to call */
};
/*
* Format of macro table
*/
struct macel {
char mac_name[9]; /* macro name */
char *mac_start; /* start of macro in macbuf */
char *mac_end; /* end of macro in macbuf */
};
/*
* Format of option table
*/
struct option {
char *name;
char *value;
};
/*
* Indices to features[]; an array containing status of remote server
* features; -1 not known (FEAT failed), 0 absent, 1 present.
*/
enum {
FEAT_FEAT = 0, /* FEAT, OPTS */
FEAT_MDTM, /* MDTM */
FEAT_MLST, /* MLSD, MLST */
FEAT_REST_STREAM, /* RESTart STREAM */
FEAT_SIZE, /* SIZE */
FEAT_TVFS, /* TVFS (not used) */
FEAT_max
};
/*
* Global defines
*/
#define FTPBUFLEN MAXPATHLEN + 200
#define MAX_IN_PORT_T 0xffffU
#define HASHBYTES 1024 /* default mark for `hash' command */
#define DEFAULTINCR 1024 /* default increment for `rate' command */
#define FTP_PORT 21 /* default if ! getservbyname("ftp/tcp") */
#define HTTP_PORT 80 /* default if ! getservbyname("http/tcp") */
#ifndef GATE_PORT
#define GATE_PORT 21 /* default if ! getservbyname("ftpgate/tcp") */
#endif
#ifndef GATE_SERVER
#define GATE_SERVER "" /* default server */
#endif
#define DEFAULTPAGER "more" /* default pager if $PAGER isn't set */
#define DEFAULTPROMPT "ftp> " /* default prompt if `set prompt' is empty */
#define DEFAULTRPROMPT "" /* default rprompt if `set rprompt' is empty */
#define TMPFILE "ftpXXXXXXXXXX"
#ifndef GLOBAL
#define GLOBAL extern
#endif
/*
* Options and other state info.
*/
GLOBAL int trace; /* trace packets exchanged */
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 connected; /* 1 = connected to server, -1 = logged in */
GLOBAL int interactive; /* interactively prompt on m* cmds */
GLOBAL int confirmrest; /* confirm rest of current m* cmd */
GLOBAL int debug; /* debugging level */
GLOBAL int bell; /* ring bell on cmd completion */
GLOBAL int doglob; /* glob local file names */
GLOBAL int autologin; /* establish user account on connection */
GLOBAL int proxy; /* proxy server connection active */
GLOBAL int proxflag; /* proxy connection exists */
GLOBAL int gatemode; /* use gate-ftp */
GLOBAL char *gateserver; /* server to use for gate-ftp */
GLOBAL int sunique; /* store files on server with unique name */
GLOBAL int runique; /* store local files with unique name */
GLOBAL int mcase; /* map upper to lower case for mget names */
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 code; /* return/reply code for ftp command */
GLOBAL int crflag; /* if 1, strip car. rets. on ascii gets */
GLOBAL int passivemode; /* passive mode enabled */
GLOBAL int activefallback; /* fall back to active mode if passive fails */
GLOBAL char *altarg; /* argv[1] with no shell-like preprocessing */
GLOBAL char ntin[17]; /* input translation table */
GLOBAL char ntout[17]; /* output translation table */
GLOBAL char mapin[MAXPATHLEN]; /* input map template */
GLOBAL char mapout[MAXPATHLEN]; /* output map template */
GLOBAL char typename[32]; /* name of file transfer type */
GLOBAL int type; /* requested file transfer type */
GLOBAL int curtype; /* current file transfer type */
GLOBAL char structname[32]; /* name of file transfer structure */
GLOBAL int stru; /* file transfer structure */
GLOBAL char formname[32]; /* name of file transfer format */
GLOBAL int form; /* file transfer format */
GLOBAL char modename[32]; /* name of file transfer mode */
GLOBAL int mode; /* file transfer mode */
GLOBAL char bytename[32]; /* local byte size in ascii */
GLOBAL int bytesize; /* local byte size in binary */
GLOBAL int anonftp; /* automatic anonymous login */
GLOBAL int dirchange; /* remote directory changed by cd command */
GLOBAL int flushcache; /* set HTTP cache flush headers with request */
GLOBAL int rate_get; /* maximum get xfer rate */
GLOBAL int rate_get_incr; /* increment for get xfer rate */
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 char *tmpdir; /* temporary directory */
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 */
GLOBAL int features[FEAT_max]; /* remote FEATures supported */
#ifndef NO_EDITCOMPLETE
GLOBAL EditLine *el; /* editline(3) status structure */
GLOBAL History *hist; /* editline(3) history structure */
GLOBAL char *cursor_pos; /* cursor position we're looking for */
GLOBAL size_t cursor_argc; /* location of cursor in margv */
GLOBAL size_t cursor_argo; /* offset of cursor in margv[cursor_argc] */
#endif /* !NO_EDITCOMPLETE */
GLOBAL char *direction; /* direction transfer is occurring */
GLOBAL char *hostname; /* name of host connected to */
GLOBAL int unix_server; /* server is unix, can use binary for ascii */
GLOBAL int unix_proxy; /* proxy is unix, can use binary for ascii */
GLOBAL char localcwd[MAXPATHLEN]; /* local dir */
GLOBAL char remotecwd[MAXPATHLEN]; /* remote dir */
GLOBAL char *username; /* name of user logged in as. (dynamic) */
GLOBAL sa_family_t family; /* address family to use for connections */
GLOBAL char *ftpport; /* port number to use for FTP connections */
GLOBAL char *httpport; /* port number to use for HTTP connections */
GLOBAL char *gateport; /* port number to use for gateftp connections */
GLOBAL char *outfile; /* filename to output URLs to */
GLOBAL int restartautofetch; /* restart auto-fetch */
GLOBAL char line[FTPBUFLEN]; /* input line buffer */
GLOBAL char *stringbase; /* current scan point in line buffer */
GLOBAL char argbuf[FTPBUFLEN]; /* argument storage buffer */
GLOBAL char *argbase; /* current storage point in arg buffer */
GLOBAL StringList *marg_sl; /* stringlist containing margv */
GLOBAL int margc; /* count of arguments on input line */
#define margv (marg_sl->sl_str) /* args parsed from input line */
GLOBAL int cpend; /* flag: if != 0, then pending server reply */
GLOBAL int mflag; /* flag: if != 0, then active multi command */
GLOBAL int options; /* used during socket creation */
GLOBAL int sndbuf_size; /* socket send buffer size */
GLOBAL int rcvbuf_size; /* socket receive buffer size */
GLOBAL int macnum; /* number of defined macros */
GLOBAL struct macel macros[16];
GLOBAL char macbuf[4096];
GLOBAL char *localhome; /* local home directory */
GLOBAL char *localname; /* local user name */
GLOBAL char netrc[MAXPATHLEN]; /* path to .netrc file */
GLOBAL char reply_string[BUFSIZ]; /* first line of previous reply */
GLOBAL void (*reply_callback)(const char *);
/*
* function to call for each line in
* the server's reply except for the
* first (`xxx-') and last (`xxx ')
*/
GLOBAL volatile sig_atomic_t sigint_raised;
GLOBAL FILE *cin;
GLOBAL FILE *cout;
GLOBAL int data;
extern struct cmd cmdtab[];
extern struct option optiontab[];
#define EMPTYSTRING(x) ((x) == NULL || (*(x) == '\0'))
#define FREEPTR(x) if ((x) != NULL) { free(x); (x) = NULL; }
#ifdef BSD4_4
# define HAVE_SOCKADDR_SA_LEN 1
#endif
#ifdef NO_LONG_LONG
# define STRTOLL(x,y,z) strtol(x,y,z)
#else
# define STRTOLL(x,y,z) strtoll(x,y,z)
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,464 +0,0 @@
/* $NetBSD: progressbar.c,v 1.7 2005/04/11 01:49:31 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.
*
* 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.7 2005/04/11 01:49:31 lukem Exp $");
#endif /* not lint */
/*
* FTP User Program -- Misc support routines
*/
#include <sys/types.h>
#include <sys/param.h>
#include <sys/time.h>
#include <err.h>
#include <errno.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include "progressbar.h"
#define SECSPERHOUR (60 * 60)
#define SECSPERDAY ((long)60 * 60 * 24)
#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) */
static void updateprogressmeter(int);
/*
* SIGALRM handler to update the progress meter
*/
static void
updateprogressmeter(int dummy)
{
int oerrno = errno;
progressmeter(0);
errno = oerrno;
}
/*
* 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, 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.
*/
#endif
int len;
char buf[256]; /* workspace for progress bar */
#ifndef NO_PROGRESS
#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 (prefix)
len += snprintf(buf + len, BUFLEFT, "%s", prefix);
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 (prefix)
barlength -= strlen(prefix);
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));
}

View File

@ -1,99 +0,0 @@
/* $NetBSD: progressbar.h,v 1.5 2005/02/10 16:00:38 jmc 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 */
GLOBAL char *prefix; /* Text written left of progress bar */
#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

View File

@ -1,293 +0,0 @@
/* $NetBSD: ruserpass.c,v 1.29 2003/08/07 11:13:57 agc Exp $ */
/*
* Copyright (c) 1985, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* 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. Neither the name of the University 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 REGENTS 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 REGENTS 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
#if 0
static char sccsid[] = "@(#)ruserpass.c 8.4 (Berkeley) 4/27/95";
#else
__RCSID("$NetBSD: ruserpass.c,v 1.29 2003/08/07 11:13:57 agc 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"
static int token(void);
static FILE *cfile;
#define DEFAULT 1
#define LOGIN 2
#define PASSWD 3
#define ACCOUNT 4
#define MACDEF 5
#define ID 10
#define MACH 11
static char tokval[100];
static struct toktab {
char *tokstr;
int tval;
} toktab[] = {
{ "default", DEFAULT },
{ "login", LOGIN },
{ "password", PASSWD },
{ "passwd", PASSWD },
{ "account", ACCOUNT },
{ "machine", MACH },
{ "macdef", MACDEF },
{ NULL, 0 }
};
int
ruserpass(const char *host, const char **aname, const char **apass,
const char **aacct)
{
char *tmp;
char myname[MAXHOSTNAMELEN + 1], *mydomain;
int t, i, c, usedefault = 0;
struct stat stb;
if (netrc[0] == '\0')
return (0);
cfile = fopen(netrc, "r");
if (cfile == NULL) {
if (errno != ENOENT)
warn("%s", netrc);
return (0);
}
if (gethostname(myname, sizeof(myname)) < 0)
myname[0] = '\0';
myname[sizeof(myname) - 1] = '\0';
if ((mydomain = strchr(myname, '.')) == NULL)
mydomain = "";
next:
while ((t = token())) switch(t) {
case DEFAULT:
usedefault = 1;
/* FALL THROUGH */
case MACH:
if (!usedefault) {
if (token() != ID)
continue;
/*
* Allow match either for user's input host name
* or official hostname. Also allow match of
* incompletely-specified host in local domain.
*/
if (strcasecmp(host, tokval) == 0)
goto match;
if (strcasecmp(hostname, tokval) == 0)
goto match;
if ((tmp = strchr(hostname, '.')) != NULL &&
strcasecmp(tmp, mydomain) == 0 &&
strncasecmp(hostname, tokval, tmp-hostname) == 0 &&
tokval[tmp - hostname] == '\0')
goto match;
if ((tmp = strchr(host, '.')) != NULL &&
strcasecmp(tmp, mydomain) == 0 &&
strncasecmp(host, tokval, tmp - host) == 0 &&
tokval[tmp - host] == '\0')
goto match;
continue;
}
match:
while ((t = token()) && t != MACH && t != DEFAULT) switch(t) {
case LOGIN:
if (token()) {
if (*aname == NULL)
*aname = xstrdup(tokval);
else {
if (strcmp(*aname, tokval))
goto next;
}
}
break;
case PASSWD:
if ((*aname == NULL || strcmp(*aname, "anonymous")) &&
fstat(fileno(cfile), &stb) >= 0 &&
(stb.st_mode & 077) != 0) {
warnx("Error: .netrc file is readable by others.");
warnx("Remove password or make file unreadable by others.");
goto bad;
}
if (token() && *apass == NULL)
*apass = xstrdup(tokval);
break;
case ACCOUNT:
if (fstat(fileno(cfile), &stb) >= 0
&& (stb.st_mode & 077) != 0) {
warnx("Error: .netrc file is readable by others.");
warnx("Remove account or make file unreadable by others.");
goto bad;
}
if (token() && *aacct == NULL)
*aacct = xstrdup(tokval);
break;
case MACDEF:
if (proxy) {
(void)fclose(cfile);
return (0);
}
while ((c = getc(cfile)) != EOF)
if (c != ' ' && c != '\t')
break;
if (c == EOF || c == '\n') {
fputs("Missing macdef name argument.\n",
ttyout);
goto bad;
}
if (macnum == 16) {
fputs(
"Limit of 16 macros have already been defined.\n",
ttyout);
goto bad;
}
tmp = macros[macnum].mac_name;
*tmp++ = c;
for (i = 0; i < 8 && (c = getc(cfile)) != EOF &&
!isspace(c); ++i) {
*tmp++ = c;
}
if (c == EOF) {
fputs(
"Macro definition missing null line terminator.\n",
ttyout);
goto bad;
}
*tmp = '\0';
if (c != '\n') {
while ((c = getc(cfile)) != EOF && c != '\n');
}
if (c == EOF) {
fputs(
"Macro definition missing null line terminator.\n",
ttyout);
goto bad;
}
if (macnum == 0) {
macros[macnum].mac_start = macbuf;
}
else {
macros[macnum].mac_start =
macros[macnum-1].mac_end + 1;
}
tmp = macros[macnum].mac_start;
while (tmp != macbuf + 4096) {
if ((c = getc(cfile)) == EOF) {
fputs(
"Macro definition missing null line terminator.\n",
ttyout);
goto bad;
}
*tmp = c;
if (*tmp == '\n') {
if (*(tmp-1) == '\0') {
macros[macnum++].mac_end = tmp - 1;
break;
}
*tmp = '\0';
}
tmp++;
}
if (tmp == macbuf + 4096) {
fputs("4K macro buffer exceeded.\n",
ttyout);
goto bad;
}
break;
default:
warnx("Unknown .netrc keyword %s", tokval);
break;
}
goto done;
}
done:
(void)fclose(cfile);
return (0);
bad:
(void)fclose(cfile);
return (-1);
}
static int
token(void)
{
char *cp;
int c;
struct toktab *t;
if (feof(cfile) || ferror(cfile))
return (0);
while ((c = getc(cfile)) != EOF &&
(c == '\n' || c == '\t' || c == ' ' || c == ','))
continue;
if (c == EOF)
return (0);
cp = tokval;
if (c == '"') {
while ((c = getc(cfile)) != EOF && c != '"') {
if (c == '\\')
c = getc(cfile);
*cp++ = c;
}
} else {
*cp++ = c;
while ((c = getc(cfile)) != EOF
&& c != '\n' && c != '\t' && c != ' ' && c != ',') {
if (c == '\\')
c = getc(cfile);
*cp++ = c;
}
}
*cp = 0;
if (tokval[0] == 0)
return (0);
for (t = toktab; t->tokstr; t++)
if (!strcmp(t->tokstr, tokval))
return (t->tval);
return (ID);
}

File diff suppressed because it is too large Load Diff

View File

@ -1,44 +0,0 @@
/* $NetBSD: version.h,v 1.50 2005/05/14 15:26:43 lukem Exp $ */
/*-
* Copyright (c) 1999-2005 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 FTP_PRODUCT
#define FTP_PRODUCT "NetBSD-ftp"
#endif
#ifndef FTP_VERSION
#define FTP_VERSION "20050514"
#endif

View File

@ -1,25 +0,0 @@
$Id: todo,v 1.30 2002/06/10 08:08:53 lukem Exp $
update NEWS, README, ...
at end of configure, show summary of options used and features found
if socks is defined, disable ipv6 and use own getaddrinfo()/getnameinfo()
(for tron)
add locale autoconf checks
AC_CHECK_SIZEOF(off_t, 0) doesn't work on FreeBSD 4.0 because the
test doesn't include <sys/types.h>. fix autoconf?
in configure, check for ansi c compiler and barf if it fails
check if we need #defines for memcpy() et al
check for utimes() decls [which system?]
possibly install editline.3 and editrc.5
system specific tests (to remove need for manual intervention):
- sunos4
LIBS+= -lresolv

View File

@ -1,4 +1,10 @@
Copyright 1999, 2000 Luke Mewburn <lukem@netbsd.org>. All rights reserved. $NetBSD: COPYING,v 1.7 2010/01/12 07:01:01 lukem Exp $
Copyright (c) 2001-2010 The NetBSD Foundation, Inc.
All rights reserved.
This code is derived from software contributed to The NetBSD Foundation
by Simon Burge, Luke Mewburn, and Christos Zoulas.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions modification, are permitted provided that the following conditions
@ -10,20 +16,24 @@ are met:
documentation and/or other materials provided with the distribution. documentation and/or other materials provided with the distribution.
3. All advertising materials mentioning features or use of this software 3. All advertising materials mentioning features or use of this software
must display the following acknowledgement: must display the following acknowledgement:
This product includes software developed by Luke Mewburn. This product includes software developed by the NetBSD
4. The name of the author may not be used to endorse or promote products Foundation, Inc. and its contributors.
derived from this software without specific prior written permission. 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.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
This product also contains software developed by other people, and you This product also contains software developed by other people, and you
are advised to read the various source files to read the full details are advised to read the various source files to read the full details
@ -32,11 +42,13 @@ acknowledgements:
This product includes software developed by the NetBSD Foundation, This product includes software developed by the NetBSD Foundation,
Inc. and its contributors. Those contributors include: Inc. and its contributors. Those contributors include:
- Simon Burge
- Jaromir Dolecek - Jaromir Dolecek
- Klaus Klein - Klaus Klein
- Luke Mewburn - Luke Mewburn
- Jason R. Thorpe of the Numerical Aerospace Simulation - Jason R. Thorpe of the Numerical Aerospace Simulation
Facility, NASA Ames Research Center. Facility, NASA Ames Research Center.
- Christos Zoulas
This product includes software developed by the University of This product includes software developed by the University of
California, Berkeley and its contributors. Those contributors include: California, Berkeley and its contributors. Those contributors include:

View File

@ -1,3 +1,713 @@
$NetBSD: ChangeLog,v 1.58 2010/01/12 06:58:57 lukem Exp $
Tue Jan 12 06:58:15 UTC 2010 lukem
* Release as "tnftp 20100108"
* Rename onoff() argument "bool" to "val".
Tue Jan 5 09:12:01 UTC 2010 lukem
* If ARG_MAX isn't defined, use the result from sysconf(_SC_ARG_MAX).
Fixes build when using newer glibc.
* Add libnetbsd.la to the LIBADD for libedit.
Fix provided by Adam Sampson.
Mon Jan 4 06:28:07 UTC 2010 lukem
* Distribute various files not shipped by default automake rules,
to use 'make dist' instead of 'cvs export'.
Wed Dec 30 00:12:47 UTC 2009 lukem
* Release as "tnftp 20091122"
Sun Nov 15 10:14:44 UTC 2009 lukem
* Merge NetBSD ftp from 20090520 to 20090915. Change:
- Rename internal getline() to get_line() to avoid
conflict with libc with former.
- Avoid a NULL dereference in an error message.
Sat Nov 14 09:21:19 UTC 2009 lukem
* Convert to automake & libtool.
Sat Jun 6 07:17:38 UTC 2009 lukem
* Release as "tnftp 20090606"
Fri May 22 01:11:15 UTC 2009 lukem
* configure fixes:
- Add the time.h headers to accheck_includes, for the strptime check.
- Remove the check for el_init in libedit; we're always replacing
the library and the presence of strvis() in some versions
confuses other checks.
Wed May 20 13:47:43 UTC 2009 lukem
* Release as "tnftp 20090520"
* Merge NetBSD ftp from 20070722 to 20090520. Changes:
- Only attempt to el_parse() a command unknown by the default
parser if editing is enabled.
Fixes PR 38589.
- Turn off the alarmtimer before resetting the SIGALRM handler
back to SIG_DFL.
Fixes PR 35630.
- Add epsv6 and epsv to disable extended passive mode for ipv6 or
both ipv4 and ipv6 respectively. This hack is due to our
friends a Juniper Networks who break epsv in ipv6.
Should be fixed in ScreenOS 6.2.X.
- Improve parsing of chunked transfer chunks per RFC2616:
- more stringent chunk-size parsing
- ignore optional trailing ';chunk-ext' stuff, instead of barfing
- detect EOF before final \r\n.
- Use the service name to getaddrinfo() (along with the host
name), so that features such as DNS Service Discovery have a
better chance of working.
Display the service name in various status & error messages.
- Don't getservbyname() the :port component of a URL; RFC 3986
says it's just an unsigned number, not a service name.
- Fix numerous WARNS=4 issues (-Wcast-qual -Wsign-compare).
- Fix -Wshadow issues
- Update copyrights
- Remove clause 3 and 4 from TNF licenses
- Rename HAVE_STRUCT_SOCKADDR_SA_LEN to
HAVE_STRUCT_SOCKADDR_IN_SIN_LEN to accurately reflect the
structure member being used.
- Use AF_INET instead of AF_UNSPEC as the default family if
!defined(INET6).
* configure improvements:
- Style tweaks.
- Use AC_LANG_PROGRAM() instead of AC_LANG_SOURCE()
- Add a check for strptime() requiring separators between
conversions, and use our replacement one if it does.
Sat Dec 20 15:28:24 UTC 2008 lukem
* configure improvements:
- Move IPv6 check from tnftp.h to configure.ac (as per tnftpd).
- Rework option descriptions.
- Highlight when tests are for a specific option.
- Move configuration results to the end of the file.
- Display $prefix in configure results.
Fri Aug 15 03:03:36 UTC 2008 lukem
* Add a "Configuration results" display at the end of configure.
Cosmetic tweaks.
Fri Feb 29 09:45:56 UTC 2008 lukem
* Support @EXEEXT@ for Cygwin (etc).
Mon Aug 6 04:55:19 UTC 2007 lukem
* Release as "tnftp 20070806"
* Add a NEWS file.
* Reduce differences between NetBSD-ftp and local copy.
* Merge NetBSD ftp from 20070605 to 20070722.
Changes:
- Document about:ftp and about:version.
* Add autoconf check for (Dante) SOCKS5.
(Needs run-time testing and more portability testing.)
Mon Jul 23 11:44:42 UTC 2007 lukem
* Don't use non-standard: u_char u_short u_int.
Use uint32_t instead of u_int32_t.
* Consistently use AS_CASE() and AS_IF() in configure.ac.
* Don't use defined() with HAVE_DECL_xxx.
Use `LL' instead of `L' suffix for fallback
defines of LLONG_MIN and LLONG_MAX.
Sun Jul 22 12:00:17 UTC 2007 lukem
* Include <arpa/nameser.h> if available, and provide fallback #defines.
* Sync with lib/libc/inet/inet_pton.c 1.3:
* Sync to bind 9.3.x version
* Update ISC copyright
* Fix some lint
* Sync with lib/libc/inet/inet_ntop.c 1.3:
* Sync to bind 9.3.x version
* Update ISC copyright
* Use socklen_t instead of size_t
* Use snprintf() instead of SPRINTF()
* Improve detection of various boundary conditions
* Sync to NetBSD glob.h 1.21, glob.c 1.16:
* Standards compliance fix
* De-lint
* Don't overflow when DEBUG is defined.
* Sync fgetln.c to tools/compat/fgetln.c 1.7:
* Clause 3 removal.
* Sync to config.guess 2007-07-22, config.sub 2007-06-28.
* Consistency tweaks in configure help strings.
* Add check for struct sockaddr.sa_len.
Change tests for HAVE_foo to defined(HAVE_foo).
Replace HAVE_SOCKADDR_SA_LEN with HAVE_STRUCT_SOCKADDR_SA_LEN.
* Remove pretence of supporting SOCKS for now;
no test system is available, and the old
autoconf 2.13 support wasn't upgraded to 2.61.
* configure.ac style consistency tweaks.
Move autoconf aux files from ./ to build-aux/
* Remove duplicate HAVE_STRERROR replacement in tnftp.h.
Thu Jun 7 04:47:47 UTC 2007 lukem
* Merge NetBSD ftp from 20070510 to 20070605. Changes:
- Enforce restriction that (http) proxied URL fetchs don't
support being restarted at this time.
Addresses NetBSD Problem Report 28697.
- Display times in RFC2822 form rather than using ctime(3),
since the former is more explicit about the timezone offset.
- main: call tzset() to ensure TZ is setup for other <time.h>
functions.
- remotemodtime(): use strptime() to parse the reply.
- fetch_url(): ensure struct tm is zeroed before calling
strptime().
- Modify parse_url() to consistently strip the leading `/'
off ftp URLs.
Fixes NetBSD Problem Report 17617.
- Use 'RFCnnnn' (with leading 0) instead of 'RFC nnnn', to be
consistent with the style in the RFC index.
- Refer to RFC3916 instead of 1738 or 2732.
- Expand the list of supported RFCs in ftp(1) to contain the
document name as well.
Fri May 11 04:39:55 UTC 2007 lukem
* Update INSTALL and COPYING.
* Rename HAVE_QUAD_SUPPORT to HAVE_PRINTF_LONG_LONG, and only
require support for 'long long' in that check rather than
needing sizeof(off_t)>=8, as some systems have a separate
off64_t when Large File Support is enabled.
* config.guess: treat 'i86xen:SunOS:5.*' as 'i86pc:SunOS:5.*'
Thu May 10 15:23:33 UTC 2007 lukem
* Remove checks for util.h and libutil.h, and replacement for
fparseln(), since fparseln() isn't used any more.
* Merge NetBSD ftp from 20070418 to 20070510. Changes:
- Switch from fparseln() to the internal getline() when
parsing HTTP headers. Makes ftp a bit more portable
(not needing fparseln()) at the expense of not supporting
arbitrary long header lines, which I'm not concerned about
because we don't support header line continuation either...
- Replace references from draft-ietf-ftpext-mlst-NN to RFC 3659.
- Fix misplaced const.
- Implement copy_bytes() to copy bytes from one fd to another
via the provided buffer, with optional rate-limiting and
hash-mark printing, using one loop and handle short writes.
Refactor sendrequest() and recvrequest() to use copy_data().
Addresses NetBSD Problem Report 15943.
Wed May 9 05:24:55 UTC 2007 lukem
* Fix typo in poll()-based implementation of usleep() replacement.
Wed May 9 04:58:50 UTC 2007 lukem
* Rename configure.in to configure.ac, as the latter is the
preferred name in autoconf 2.61.
* Convert from autoconf 2.13 to 2.61:
* Use a consistent quoting mechanism.
* Use modern autoconf macros, #define names, etc.
* Search for more header files, and only #include if found.
* Remove old-style config.h.in generation.
This may fix various tests on platforms such as FreeBSD and OS X.
* Add -Wl,-search_paths_first to LDFLAGS on OS X (Darwin) if the
linker supports it. This is needed so we use our libedit
rather than the system one.
XXX: SOCKS support is currently disabled until I update the
autoconf support.
Mon Apr 23 06:04:26 UTC 2007 lukem
* Merge NetBSD ftp from 20050610 to 20070418. Changes:
- Add '-s srcaddr'.
- Use IEC 60027-2 2^N based "KiB", "MiB" (etc) instead of
10^n "KB", "MB", ...
- Recognize 307 redirect code.
- Suppress printing non-COMPLETE reply strings when EPSV/EPRT
fails and we fall-back to PASV/PORT. Should fix a problem
with the emacs ftp wrapper.
- Fix display of 'Continue with <cmd>' messages.
- Prevent segfaults in .netrc parsing.
- Flush stdout before each command; ftp as slave process on
a pipe should work.
- getpass() can return NULL in some implementations; cope.
- Support '-q quittime' when waiting for server replies.
- Various spelling & grammatical fixes in the manual.
- Plug some memory leaks.
- If a file upload (via -u) fails, return an non-zero exit
value based on the index of the file that caused the
problem (a la auto-fetch retrieval).
- Coverity fixes for CIDs: 873 874 875 1447 1448 2194 2195 3610
- Don't remove trailing character during auth_url()
- Fix progressbar display on narrow terminals (<43 columns)
Fri Mar 16 06:00:14 UTC 2007 lukem
* Change the return value of the replacement gai_strerror()
from "char *" to "const char *", to match the current
standards.
Problem noted by Thomas Klausner.
Thu Oct 26 07:24:22 UTC 2006 lukem
* Correctly parse "AM" and "PM" in the replacement strptime().
Problem noted by Kathryn Hogg.
Sat Jun 25 06:27:00 UTC 2005 lukem
* Release as "tnftp 20050625"
* Simplify the detection & replacement of dirname() and fparseln()
and just use AC_REPLACE_FUNCS.
(We don't care if the vendor has a working version in -lgen or -lutil
instead of -lc; they'll get our replacement version in that case).
Fixes build issue on older Darwin where the previous autoconf check
wouldn't find dirname() in the default system libraries.
* Only provide a prototype for dirname() if we can't find one in
<libgen.h>
* Search for NS_IN6ADDRSZ instead of IN6ADDRSZ, since we use the
former and not the latter and older Darwin has the former.
(This allows INET6 support to be enabled on Darwin 7.9.0)
Mon Jun 13 09:22:13 UTC 2005 lukem
* Tweak SOCKS5 support:
acconfig.h:
- fix a comment
- ensure close() is replaced
- list entries in the same order as aclocal.m4
(and the SOCKS5 FAQ)
aclocal.m4:
- ensure getpeername() is replaced
- don't replace listen() twice
Fri Jun 10 04:39:33 UTC 2005 lukem
* Release as "tnftp 20050610"
* Add dependencies on ${srcdir}/../tnftp.h and ../config.h
* Merge NetBSD ftp from 20050609 to 20050610. Changes:
- Implement getline() to read a line into a buffer.
- Convert to use getline() instead of fgets() whenever reading
user input to ensure that an overly long input line doesn't
leave excess characters for the next input operation to
accidentally use as input.
- Zero out the password & account after we've finished with it.
- Consistently use getpass(3) (i.e, character echo suppressed)
when reading the account data. For some reason, historically
the "login" code suppressed echo for Account: yet the "user"
command did not!
- Display the hostname in the "getaddrinfo failed" warning.
- Appease some -Wcast-qual warnings. Fixing all of these
requires significant code refactoring. (mmm, legacy code).
Thu Jun 9 16:49:05 UTC 2005 lukem
* src, libnetbsd: Excise RCSID block, rather than using
#if 0 ... #endif. The point was to minimise RCSID
conflicts, and the latter isn't helping there.
* Merge NetBSD ftp from 20050531 to 20050609. Changes:
- Only print the "Trying <address>..." message if verbose
and there's more than one struct addrinfo in the
getaddrinfo() result.
- Don't use non-standard "u_int".
Wed Jun 1 15:08:01 UTC 2005 lukem
* Look for dirname(3), which may be in -lgen on IRIX, and
replace it if not found..
Wed Jun 1 11:48:58 UTC 2005 lukem
* libnetbsd:
- Don't use non-standard: u_char u_short u_int.
- Use uint32_t instead of u_int32_t.
- Don't use register.
* libedit: Don't use non-standard uint or u_int.
Tue May 31 02:23:08 UTC 2005 lukem
* tnftp.h: need <libgen.h> for dirname(3)
* Merge ftp from 20050513 to 20050531. Changes:
- Helps if the definition of xconnect() matches its
declaration....
- Fix some cast issues highlighted by Scott Reynolds using
gcc 4 on OSX.4
- Use size_t instead of int where appropriate.
- Make this compile on sparc64 (size_t != int).
- Printf field widths and size_t don't always mix well, so
cast to int. Fixes build problem for alpha.
- Some const cleanups.
- tab cleanup
- Improve method used in fileindir() to determine if `file'
is in or under `dir': realpath(3) on non-NetBSD systems may
fail if the target filename doesn't exist, so instead use
realpath(3) on the parent directory of `file'.
Per discussion with Todd Eigenschink.
- formatbuf(): fix %m and %M to use the hostname, not the
username.
- fetch_ftp(): preserve 'anonftp' across a disconnect() so
that multiple ftp auto-fetches on the same command line
login automatically.
- auto_fetch(): use an initialized volatile int to appease
IRIX cc.
* Merge libedit from NetBSD 20050105 to 20050531. Changes include:
- Rui Paulo: Incorrect tok_line and tok_str declarations.
- Remove clause 3 from the UCB license.
- Luke Mewburn: Don't abuse unconstify'ing a string
and writing to it, because you'll core dump. Also remove
extra const that gives pain to the irix compiler.
- Make sure we flush after we prepare when we are unbuffered
otherwise the prompt will not appear immediately.
- Terminate the arglist with a NULL instead of 0.
(Shuts up gcc4.x)
Sat May 28 13:19:38 UTC 2005 lukem
* libnetbsd/strvis.c:
- Sync to NetBSD's vis.c 1.33:
Use malloc(3) instead of alloca(3).
- Remove extraenous #endif
Fri May 27 05:46:58 UTC 2005 lukem
* libnetbsd/strvis.c: Sync to NetBSD's vis.c 1.30:
Use a more standard TNF license.
* libedit/sig.c: Include "src/progressbar.h" for xsignal_restart()
prototype.
* Ensure that fallback #define of __attribute__ is available.
Fixes build problem on HP-UX with cc.
Thu May 26 14:21:08 UTC 2005 lukem
* Extend xpoll()'s HAVE_SELECT implementation to support POLLRDNORM,
POLLWRNORM, and POLLRDBAND - the latter using exceptfds.
Per discussion with Christos Zoulas.
Mon May 16 13:33:27 UTC 2005 lukem
* Pull in <poll.h> or <sys/poll.h> if they exist even if we're
not using poll, as struct pollfd might exist in those.
Fixes build problem on OSX.3.
* Separate CPPFLAGS from CFLAGS.
* Sync various files in libnetbsd with the original versions
in NetBSD. Notable changes
- Convert 4 clause UCB license to 3 clause.
- Use strlcpy instead of strcpy.
- Update ISC copyright.
- Use NS_INADDRSZ, NS_IN6ADDRSZ and NS_INT16SZ instead of
equivalents without NS_ prefix.
- Use socklen_t instead of size_t where appropriate.
- Improve bounds checking.
- Don't update the size of allocated storage until
realloc succeeds.
- Fix comment about return value.
- Reverse the order of two loop invariant to make
'strlcat(0, "foo", 0)' not get a SEGV.
- Use Todd C. Miller's latest copyright notice (more loose).
- Use "long long" instead of "quad" in various
comments & constants.
- Support VIS_HTTPSTYLE.
- Implement svis(), strsvis(), strsvisx(), strunvisx().
* Prefer poll over select when implementing replacement usleep().
Sat May 14 04:44:35 UTC 2005 lukem
* Release "tnftp 20050514"
* Fail if we can't find a library with tgetent (needed for libedit).
NetBSD PR pkg/28925.
* Improve quoting when using various autoconf macros.
* Merge NetBSD-ftp 20050513:
- Correct the "optlen" argument passed to getsockopt(3) and
setsockopt(3) in various places. Fixes a problem noted by
Allen Briggs.
- Improve warning printed when connect(2) for the data
channel fails.
Wed May 11 04:19:43 UTC 2005 lukem
* Release "tnftp 20050511"
Wed May 11 04:10:01 UTC 2005 lukem
* Update the THANKS file.
* Only use poll() to implement xpoll() if it's available,
otherwise attempt to use select() if that's available,
otherwise #error.
* Detect if struct pollfd is available in <poll.h> or <sys/poll.h>.
Improve consistency in use of autoconf macros.
Wed May 11 02:42:08 UTC 2005 lukem
* Merge NetBSD-ftp 20050511:
- Use socklen_t instead of int as the 5th argument to
getsockopt(). Improve invocation of setsockopt() and
associated failure messages.
Wed May 11 01:46:29 UTC 2005 lukem
* Clean up RCSID usage in vendor-derived code, restoring original
IDs where possible.
Wed May 11 00:08:16 UTC 2005 lukem
* Merge NetBSD-ftp 20050510:
- Prevent an overly-long input line causing a core dump when
editing is enabled.
Issue noted by Ryoji Kanai in FreeBSD Problem Report # 77158.
- Implement a timeout on the accept(2) in dataconn() and the
connect(2) in xconnect() by temporarily setting O_NONBLOCK
on the socket and using xpoll() to wait for the operation
to succeed. The timeout used is the '-q quittime' argument
(defaults to 60s for accept(2), and the system default for
connect(2)). Idea inspired by discussion with Chuck Cranor.
This may (indirectly) fix various problems with timeouts in
active mode through broken firewalls.
- Implement xpoll() as a wrapper around poll(2), to make it
easier to replace on systems without a functional poll(2).
Unconditionally use xpoll() instead of conditionally using
select(2) or poll(2).
- In fetch_url(), don't call freeaddrinfo(res0) too early, as
we use pointers to its contents later in the function.
Problem found by Onno van der Linden.
- Fix ftp url reget when globs are being used.
Provided by Mathieu Arnold <mat@FreeBSD.org>.
- Factor out common string processing code eliminating static
buffers, making functions that should be static be static,
and cleaning up const usage. Added a guard against buffer
overflow, but the domap function is a bit too complicated
to tackle right now.
- Clean up whitespace.
- Expand description of http_proxy by suggesting the use of
RFC 1738 '%xx' encoding for "unsafe URL" characters in
usernames and passwords.
Wed Jan 5 05:53:59 UTC 2005 lukem
* For now, assume libedit is not up-to-date and use our own version.
* Merge libedit from NetBSD 20020605 to 20050105. Changes include:
- Improve vi-mode.
- Delete-previous-char and delete-next-char without an
argument are not supposed to modify the yank buffer in
emacs-mode.
- Improve incremental searching.
- Improve memory allocation & usage.
- Move UCB-licensed code from 4-clause to 3-clause.
- Make the tokenization functions publically available.
- Various tty access bug-fixes.
- Improve readline emulation.
Tue Jan 4 13:33:40 UTC 2005 lukem
* Unixware 7.1.1 implements RFC 2133 (Basic Socket Interface
Extensions for IPv6) but not the successor RFC 2553. The configure
script detects this and decides that tnftp needs to compile its own
version of getaddrinfo(). This produces the error message
/usr/include/netdb.h:248: `getaddrinfo' previously defined here
because Unixware provides an implementation of getaddrinfo() in
netdb.h instead of a prototype declaration :-/. Since netdb.h
cannot be omitted, we will always get this definition and tnftp's
version of getaddrinfo will always create a conflict. This ugly
preprocessor hack works around the problem. Hints for a better
solution welcome. Fix from pkgsrc/net/tnftp.
* Workaround poll() being a compatibility function on Darwin 7
(MacOSX 10.3) by adding a custom test for _POLL_EMUL_H_ which
is defined in poll.h on some MacOSX 10.3 systems. Not all 10.3
systems have poll.h, so only do the poll() test if at least one
of the header files is found. Fix from pkgsrc/net/tnftp.
* Add a utimes() replacement (using utime()) for Interix.
From pkgsrc/net/tnftp.
Mon Jan 3 10:21:57 UTC 2005 lukem
* Release "tnftp 20050103"
* Merge NetBSD-ftp 20050103:
- Forbid filenames returned from mget that aren't in (or below)
the current directory. The previous behaviour (of trusting
the remote server's response when retrieving the list of
files to mget with prompting disabled) has been in ftp
~forever, and has been a "known issue" for a long time.
Recently an advisory was published by D.J. Bernstein on
behalf of Yosef Klein warning of the problems with the
previous behaviour, so to alleviate concern I've fixed
this with a sledgehammer.
- Remember the local cwd after any operation which may
change it.
- Use "remotecwd" instead of "remotepwd".
- Add (unsigned char) cast to ctype functions
- Ensure that "mname" is set in ls() and mls() so that an
aborted confirm() prints the correct name.
Problem highlighted & suggested fix from PR [bin/17766]
by Steve McClellan.
- If an ftp auto-fetch transfer is interrupted by SIGINT
(usually ^C), exit with 130 instead of 1 (or rarely, 0).
This allows an ftp auto-fetch in a shell loop to correctly
terminate the loop.
Should fix PR [pkg/26351], and possibly others.
- Save approximately 8K by not including http authentication,
extended status messages and help strings when the
appropriate options are set.
- Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22365, verified by
Alistair Crooks.
- Always decode %xx in a url's user & pass components.
- Only remember {WWW,Proxy}-Authenticate "Basic" challenges; no
point in tracking any others since ftp doesn't support them.
- Improve the parsing of HTTP responses.
- Don't base64 encode the trailing NUL in the HTTP basic auth
response. Problem noted by Eric Haszlakiewicz.
- Improve parsing of HTTP response headers to be more RFC2616
compliant, and skip LWS (linear white space; CR, LF, space,
tab) and the end of lines and between the field name and
the field value. This still isn't 100% compliant, since we
don't support "multi line" responses at this time.
This should fix PR [bin/22611] from TAMURA Kent (although I
can't easily find a http server to reproduce the problem
against.)
- Fix a minor memory leak when parsing HTTP response headers.
- Don't unnecessarily display a 401/407 error when running
with -V. Fix from PR [bin/18535] by Jeremy Reed.
- Don't warn about "ignored setsockopt" failures unless
debugging is enabled. Suggested by Todd Vierling.
- Allow empty passwords in ftp://user:@host/file auto-fetch
URLs, per RFC 1738. Requested by Simon Poole.
- correct URL syntax in comment
- Note potentially surprising file-saving behaviour in case
of HTTP redirects
- -n is ignored for auto-fetch transfers
- If connect(2) in xconnect() fails with EINTR, call select(2)
on the socket until it's writable or it fails with something
other than EINTR. This matches the behaviour in SUSv3, and
prevents the problem when pressing ^T (SIGINFO, which is
marked as restartable) during connection setup would cause
ftp to fail with EADDRINUSE or EALREADY when the second
connect(2) was attempted on the same socket. Problem found
and solution provided by Maxime Henrion <mux@freebsd.org>.
- Add -q to usage. From Kouichirou Hiratsuka in PR 26199.
- PR/25566: Anders Magnusson: ftp(1) do not like large TCP
windows. Limit it to 8M.
Mon Oct 6 01:23:03 UTC 2003 lukem
* configure.in improvements:
- When testing for IN6ADDRSZ in <arpa/nameser.h>, pull in
<sys/types.h> first. From Stoned Elipot <seb @ NetBSD>
- Whitespace cleanup
Mon Aug 25 11:45:45 UTC 2003 lukem
* Release "tnftp 20030825"
* Add autoconf test for <sys/syslimits.h>; Cygwin needs it for ARG_MAX.
Per discussion with Eugene Kotlyarov <ekot@protek36.esoo.ru>.
Thu Jul 31 07:30:00 UTC 2003 lukem
* release "tnftp 20030731"
* merge ftp from NetBSD 20030731 to 20030731b:
- Work around broken ftp servers (notably ProFTPd) that can't
even follow RFC 2389, and skip any amount of whitespace
before a FEATure response. The RFC says 'single space' yet
ProFTPd puts two. Noted by DervishD <raul@pleyades.net>.
- Improve formatting of features[] debug dump.
- Invalidate remote directory completion cache if any command
which may change the remote contents completes successfully,
including: del, mdel, ren, mkdir, rmdir, quote, and all
upload commands. Patch from Yar Tikhiy <yar@freebsd.org>.
* merge ftp from NetBSD 20030228 to 20030731:
- $FTPUSERAGENT overrides the HTTP User-Agent header.
Based on patch from Douwe Kiela <virtus@wanadoo.nl>.
- Add about:tnftp
- Fix URL in about:netbsd
- netbsd.org->NetBSD.org
- strlcpy fix in fetch.c
- Uppercase "URL"
- fix a bogus error message when given a HTTP URL with a
trailing slash
- groff fixes in man page
- tweak progressbar.c copyright; the stuff jason did in util.c
wasn't migrated to this file
- Don't coredump when printing '%n' in the prompt if there's
no username yet.
Fix from Maxim Konovalov <maxim@freebsd.org>
* Add test for HAVE_IN6ADDRSZ (which older Darwin is lacking),
and only enable INET6 if it exists.
Patch from Amitai Schlair <schmonz@schmonz.com>.
* Improve ipv6 check for older linux systems that don't provide
sin6_scope_id.
Patch from YAMANO Yuji <Yamano_Yuji@tk-bay.ogis-ri.co.jp>.
Fri Feb 28 10:57:30 UTC 2003 lukem
* tagged as "tnftp 2.0 beta1"
Fri Feb 28 10:07:07 UTC 2003 lukem
* renamed to `tnftp' (from `lukemftp')
* renamed `libukem' to `libnetbsd'
Mon Jun 17 06:50:13 UTC 2002 lukem
* #if USE_GLOB_H, use <glob.h> instead of "ftpglob.h".
Requested by Mike Heffner <mikeh@freebsd.org>
Mon Jun 10 08:12:35 UTC 2002 lukem Mon Jun 10 08:12:35 UTC 2002 lukem
* crank FTP_VERSION from 1.6-beta1 to 1.6-beta2 * crank FTP_VERSION from 1.6-beta1 to 1.6-beta2
@ -406,7 +1116,7 @@ Wed Aug 2 23:43:50 EST 2000 lukem
* update from NetBSD-current (20000802): * update from NetBSD-current (20000802):
- rename NO_QUAD to NO_LONG_LONG, QUAD* -> LL* and add ULL* - rename NO_QUAD to NO_LONG_LONG, QUAD* -> LL* and add ULL*
(unsigned) equivalents. name change suggested by Klaus (unsigned) equivalents. name change suggested by Klaus
Klein <kjk@netbsd.org> Klein <kjk@NetBSD.org>
- change defined(BSD4_4) || HAVE_SIN_LEN tests into - change defined(BSD4_4) || HAVE_SIN_LEN tests into
HAVE_SOCKADDR_SA_LEN, and set the latter if BSD4_4 exists HAVE_SOCKADDR_SA_LEN, and set the latter if BSD4_4 exists
@ -985,7 +1695,7 @@ Mon Oct 4 10:57:41 EST 1999 lukem
* Add support for --{en,dis}able-editcomplete (defaults to enabled), * Add support for --{en,dis}able-editcomplete (defaults to enabled),
which prevents libedit support from being compiled in. which prevents libedit support from being compiled in.
From Chris G. Demetriou <cgd@netbsd.org> From Chris G. Demetriou <cgd@NetBSD.org>
Sun Oct 3 16:49:01 EST 1999 lukem Sun Oct 3 16:49:01 EST 1999 lukem

View File

@ -1,64 +0,0 @@
diff -ru src.orig/cmds.c src/cmds.c
--- src.orig/cmds.c Sun Jun 15 22:11:43 2003
+++ src/cmds.c Sun Jun 15 21:46:37 2003
@@ -131,6 +131,7 @@
#include <string.h>
#include <time.h>
#include <unistd.h>
+#include <libutil.h>
#include "ftp_var.h"
#include "version.h"
diff -ru src.orig/fetch.c src/fetch.c
--- src.orig/fetch.c Sun Jun 15 22:11:43 2003
+++ src/fetch.c Sun Jun 15 21:46:53 2003
@@ -69,6 +69,7 @@
#include <string.h>
#include <unistd.h>
#include <time.h>
+#include <libutil.h>
#include "ftp_var.h"
#include "version.h"
Only in src: ftp.cat1
diff -ru src.orig/progressbar.c src/progressbar.c
--- src.orig/progressbar.c Sun Jun 15 22:11:43 2003
+++ src/progressbar.c Sun Jun 15 21:50:48 2003
@@ -50,6 +50,7 @@
*/
#include <sys/types.h>
#include <sys/param.h>
+#include <sys/time.h>
#include <err.h>
#include <errno.h>
@@ -57,10 +58,12 @@
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
-#include <tzfile.h>
#include <unistd.h>
#include "progressbar.h"
+
+#define SECSPERHOUR (60 * 60)
+#define SECSPERDAY ((long)60 * 60 * 24)
#if !defined(NO_PROGRESS)
/*
diff -ru src.orig/util.c src/util.c
--- src.orig/util.c Sun Jun 15 22:11:44 2003
+++ src/util.c Sun Jun 15 21:51:31 2003
@@ -101,10 +101,11 @@
#include <string.h>
#include <termios.h>
#include <time.h>
-#include <tzfile.h>
#include <unistd.h>
#include "ftp_var.h"
+
+#define TM_YEAR_BASE 1900
/*
* Connect to peer server and auto-login, if possible.

View File

@ -1,8 +1,7 @@
INSTALLATION INTRODUCTION INSTALLATION INTRODUCTION
------------------------- -------------------------
This file describes how to compile and install lukemftp on your This file describes how to compile and install tnftp on your system.
system.
============================================ ============================================
= = = =
@ -11,24 +10,20 @@ system.
============================================ ============================================
For most systems, execute the following to compile and install For most systems, execute the following to compile and install tnftp:
lukemftp:
./configure ./configure
make make
make install make install
A preformatted manual page (src/ftp.cat1) is also installed. If A preformatted manual page (src/ftp.cat1) is also installed.
you wish to install the source (src/ftp.1), ensure that your system If you wish to install the source (src/ftp.1), ensure that your system
has up-to-date mandoc macros. groff ships with this macro suite, has up-to-date mandoc macros, such as those that are shipped with groff.
but it has bugs. Try:
ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/share/tmac/
for a more recent version.
CONFIGURATION OPTIONS CONFIGURATION OPTIONS
--------------------- ---------------------
lukemftp is configured using an `autoconf' generated `configure' tnftp is configured using an `autoconf' generated `configure'
script. `configure' supports the following options: script. `configure' supports the following options:
* The standard `autoconf configure' options, including: * The standard `autoconf configure' options, including:
@ -41,14 +36,11 @@ script. `configure' supports the following options:
* Specific options: * Specific options:
--enable-editcomplete Turn on command line editing and completion. --enable-editcomplete Turn on command line editing and completion.
--disable-editcomplete Turn off command line editing and completion (default: enabled)
[default: enabled]. --enable-ipv6 Enable IPv6 support (if your OS supports it).
--enable-ipv6 Enable IPv6 support (if your OS supports it) (default: enabled)
--disable-ipv6 Disable IPv6 support (even if your OS supports it.) --disable-largefile omit support for large files
[default: enabled]. --with-socks enable support for (Dante) SOCKS5 proxy
--with-socks Compile with SOCKS firewall traversal support.
--with-socks5[=PATH] Compile with SOCKS5 firewall traversal support.
--with-socks4[=PATH] Compile with SOCKS4 firewall traversal support.
The following environment variables can be set to override various The following environment variables can be set to override various
compiler related settings. compiler related settings.
@ -66,146 +58,3 @@ This can be achieved with:
= = = =
============================================ ============================================
PLATFORM SPECIFIC NOTES
-----------------------
The following platforms & compilers have been tested:
- AIX 4.1.5:
- AIX 4.2.1:
- AIX 4.3.3:
- Compiler: xlc -qlanglvl=ansi
version: xlC 3.1.4.10 -- C for AIX Compiler
version: ibmcxx.cmp 3.6.6.6 -- IBM C and C++ Compilers
Configure with:
env CC="xlc" CFLAGS="-qlanglvl=ansi" ./configure
- BSD/OS 4.0.1 (x86)
- BSD/OS 4.1 (x86)
- BSD/OS 4.1 (sparc)
- BSD/OS 4.2 (x86)
- Compiler: /bin/cc
version: gcc 2.7.2.1
version: gcc version 2.95.2 19991024
- Digital UNIX 4.0b
- Digital UNIX 4.0d
- Digital UNIX 4.0f
- Compiler: cc -std
version: DEC C V5.2-036 on Digital UNIX V4.0 (Rev. 564)
version: DEC C V5.9-005 on Digital UNIX V4.0 (Rev. 1229)
Configure with
env CC="cc -std" ./configure
- Compiler: gcc
version: 2.95.1
- Digital UNIX 5.0
- Compiler: cc
version: Compaq C V6.1-011 on Digital UNIX V5.0 (Rev. 910)
- FreeBSD 3.4 (i386):
- FreeBSD 3.5 (i386):
- FreeBSD 4.1 (i386):
- Compiler: cc
version: gcc version 2.7.2.3
version: gcc version 2.95.2 19991024
- HP/UX 10.20:
- HP/UX 11.00:
- Compiler: /opt/ansic/bin/cc -Ae
version: A.10.32.03
Configure with
env CC="cc -Ae" ./configure
To generate code that will run on old architectures you
may need to add "+DAportable" to CC.
- IRIX 6.5.4
- IRIX 6.5.8
Compiler: /bin/cc
version: MIPSpro Compilers: Version 7.2.1
Compiler:
version: gcc version 2.95.2
- HP/UX 11.00:
- HP/UX 11.00 64 bit:
- Compiler: /opt/ansic/bin/cc -Ae
version: A.11.01.00
Configure with
env CC="cc -Ae" ./configure
- NetBSD 1.3.3 (i386)
Compiler: /usr/bin/cc
Compiler: /usr/bin/cc
Ignore warnings about ``passing arg 3 of `tputs' from
incompatible pointer type''.
- RedHat Linux 5.1 (?? i386)
- RedHat Linux 5.2 (?? i386)
- RedHat Linux 6.0 (Linux 2.2.10 i686)
- RedHat Linux 6.1 (Linux 2.2.5-15 i686)
- RedHat Linux 6.2 (Linux 2.2.16-3smp i686)
- Compiler: cc
version: egcs-1.1.2
- Slackware (Linux 2.0.35 i686)
- Compiler: cc
version: 2.7.2.3
- Solaris 2.6 (sparc)
- Solaris 7 (sparc)
- Compiler: /opt/SUNWspro/bin/cc
version: WorkShop Compilers 5.0
- Compiler: gcc
version: egcs-1.1.2
=============
= OLD NOTES =
=============
XXX: clean up to match reality
------------------------------
- RedHat Linux 5.0 (i386)
Compiler: cc
- Solaris 2.5 (sparc)
- Solaris 7 (x86)
Compiler: /opt/SUNWspro/bin/cc
version: SC3.0 15 Dec 1993
version: WorkShop Compilers 5.0
Compiler: gcc
version: egcs-1.1.2
version: gcc 2.8.1
version: gcc 2.95.1
- Solaris 7 (sparc) 64 bit
Compiler: /opt/SUNWspro/bin/cc -xarch=v9
version: WorkShop Compilers 5.0
- SunOS 4
Compiler: gcc -lresolv
version:
- SuSE Linux
Compiler: gcc
version:
/usr/bin/ftp on SuSE Linux 6.4 is this ftp client.
May need `gcc -L/usr/lib/termcap' if tgetent() et al aren't found.
- Ultrix 4.5
Compiler: cc
version: MIPS C Compiler 3.0
Compiler: gcc
version: 2.7.2.2

13
contrib/tnftp/Makefile.am Normal file
View File

@ -0,0 +1,13 @@
## $NetBSD: Makefile.am,v 1.2 2010/01/04 06:24:58 lukem Exp $
SUBDIRS = libnetbsd
if USE_LIBEDIT
SUBDIRS += libedit
endif
SUBDIRS += src
EXTRA_DIST = \
todo \
tnftp.h

View File

@ -1,33 +1,726 @@
# $Id: Makefile.in,v 1.6 1999/11/13 01:18:22 lukem Exp $ # Makefile.in generated by automake 1.11 from Makefile.am.
# # @configure_input@
srcdir = @srcdir@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
VPATH = @srcdir@ # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
SHELL = /bin/sh # Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@ @SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
@USE_LIBEDIT_TRUE@am__append_1 = libedit
subdir = .
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/tnftp_config.h.in \
$(top_srcdir)/configure COPYING ChangeLog INSTALL NEWS THANKS \
buildaux/config.guess buildaux/config.sub buildaux/depcomp \
buildaux/install-sh buildaux/ltmain.sh buildaux/missing
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = tnftp_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo " GEN " $@;
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
am__v_at_0 = @
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-dvi-recursive install-exec-recursive \
install-html-recursive install-info-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
distdir dist dist-all distcheck
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = libnetbsd libedit src
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
am__remove_distdir = \
{ test ! -d "$(distdir)" \
|| { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -fr "$(distdir)"; }; }
am__relativize = \
dir0=`pwd`; \
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
sed_rest='s,^[^/]*/*,,'; \
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
sed_butlast='s,/*[^/]*$$,,'; \
while test -n "$$dir1"; do \
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
if test "$$first" != "."; then \
if test "$$first" = ".."; then \
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
else \
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
if test "$$first2" = "$$first"; then \
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
else \
dir2="../$$dir2"; \
fi; \
dir0="$$dir0"/"$$first"; \
fi; \
fi; \
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
done; \
reldir="$$dir2"
DIST_ARCHIVES = $(distdir).tar.gz
GZIP_ENV = --best
distuninstallcheck_listfiles = find . -type f -print
distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DSYMUTIL = @DSYMUTIL@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
NMEDIT = @NMEDIT@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
SUBDIRS = libnetbsd $(am__append_1) src
EXTRA_DIST = \
todo \
tnftp.h
all: tnftp_config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
SUBDIRS = libedit libukem src .SUFFIXES:
am--refresh:
@:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
$(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
echo ' $(SHELL) ./config.status'; \
$(SHELL) ./config.status;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
all: ftp $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
ftp: @LIBEDIT@ @LIBUKEM@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
( cd src; ${MAKE} ) $(am__cd) $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
$(am__aclocal_m4_deps):
libedit.a: tnftp_config.h: stamp-h1
( cd libedit; ${MAKE} ) @if test ! -f $@; then \
rm -f stamp-h1; \
$(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
else :; fi
libukem.a: stamp-h1: $(srcdir)/tnftp_config.h.in $(top_builddir)/config.status
( cd libukem; ${MAKE} ) @rm -f stamp-h1
cd $(top_builddir) && $(SHELL) ./config.status tnftp_config.h
$(srcdir)/tnftp_config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
($(am__cd) $(top_srcdir) && $(AUTOHEADER))
rm -f stamp-h1
touch $@
install clean: distclean-hdr:
@for i in ${SUBDIRS}; do \ -rm -f tnftp_config.h stamp-h1
( echo "$@ ===> $$i" ; cd $$i ; ${MAKE} $@ ); \
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool config.lt
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
$(RECURSIVE_CLEAN_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done done
distclean: clean ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
@for i in ${SUBDIRS}; do \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
( echo "$@ ===> $$i" ; cd $$i ; ${MAKE} $@ ); \ unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) tnftp_config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) tnftp_config.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) tnftp_config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) tnftp_config.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
$(am__remove_distdir)
test -d "$(distdir)" || mkdir "$(distdir)"
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done done
rm -f Makefile config.cache config.log config.status config.h @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
fi; \
done
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
dir1=$$subdir; dir2="$(top_distdir)"; \
$(am__relativize); \
new_top_distdir=$$reldir; \
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
($(am__cd) $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$new_top_distdir" \
distdir="$$new_distdir" \
am__remove_distdir=: \
am__skip_length_check=: \
am__skip_mode_fix=: \
distdir) \
|| exit 1; \
fi; \
done
-test -n "$(am__skip_mode_fix)" \
|| find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r "$(distdir)"
dist-gzip: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
dist-bzip2: distdir
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
$(am__remove_distdir)
dist-lzma: distdir
tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
$(am__remove_distdir)
dist-xz: distdir
tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
$(am__remove_distdir)
dist-tarZ: distdir
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__remove_distdir)
dist-shar: distdir
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
$(am__remove_distdir)
dist-zip: distdir
-rm -f $(distdir).zip
zip -rq $(distdir).zip $(distdir)
$(am__remove_distdir)
dist dist-all: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.lzma*) \
unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
*.tar.xz*) \
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
esac
chmod -R a-w $(distdir); chmod a+w $(distdir)
mkdir $(distdir)/_build
mkdir $(distdir)/_inst
chmod a-w $(distdir)
test -d $(distdir)/_build || exit 0; \
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& am__cwd=`pwd` \
&& $(am__cd) $(distdir)/_build \
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
$(DISTCHECK_CONFIGURE_FLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
distuninstallcheck \
&& chmod -R a-w "$$dc_install_base" \
&& ({ \
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
} || { rm -rf "$$dc_destdir"; exit 1; }) \
&& rm -rf "$$dc_destdir" \
&& $(MAKE) $(AM_MAKEFLAGS) dist \
&& rm -rf $(DIST_ARCHIVES) \
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
&& cd "$$am__cwd" \
|| exit 1
$(am__remove_distdir)
@(echo "$(distdir) archives ready for distribution: "; \
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
distuninstallcheck:
@$(am__cd) '$(distuninstallcheck_dir)' \
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|| { echo "ERROR: files left after uninstall:" ; \
if test -n "$(DESTDIR)"; then \
echo " (check DESTDIR support)"; \
fi ; \
$(distuninstallcheck_listfiles) ; \
exit 1; } >&2
distcleancheck: distclean
@if test '$(srcdir)' = . ; then \
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
exit 1 ; \
fi
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left in build directory after distclean:" ; \
$(distcleancheck_listfiles) ; \
exit 1; } >&2
check-am: all-am
check: check-recursive
all-am: Makefile tnftp_config.h
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-hdr \
distclean-libtool distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
html-am:
info: info-recursive
info-am:
install-data-am:
install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am:
install-html: install-html-recursive
install-html-am:
install-info: install-info-recursive
install-info-am:
install-man:
install-pdf: install-pdf-recursive
install-pdf-am:
install-ps: install-ps-recursive
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am:
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
ctags-recursive install-am install-strip tags-recursive
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am am--refresh check check-am clean clean-generic \
clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
distcheck distclean distclean-generic distclean-hdr \
distclean-libtool distclean-tags distcleancheck distdir \
distuninstallcheck dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
installdirs-am maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
ps ps-am tags tags-recursive uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -1,84 +1,36 @@
This is a brief description of the new features and fixes added to This is tnftp version 20091122.
lukemftp-1.5 since the release of lukemftp-1.4. As always, the manual
page (src/ftp.cat1) is the place to look for complete descriptions.
* Add new commands: Changes in tnftp from 20090606 to 20091122:
features list remote features supported by servers
mlsd machine parseable directory listing
mlst machine parseable file listing
remopts set options on remote features
These require support in the remote server for the ftp extensions Portability fixes.
described in RFC 2389 and draft-ietf-ftpext-mlst-11.
* Fix support for the --program-prefix and --program-suffix configure Changes in tnftp from 20090520 to 20090606:
options.
--- Portability fixes.
This is a brief description of the new features and fixes added to
lukemftp-1.4 since the release of lukemftp-1.3. As always, the manual
page (src/ftp.cat1) is the place to look for complete descriptions.
* Fix compilation problems on various non 4.4BSD derived platforms which Changes in tnftp from 20070806 to 20090520:
support IPv6, and on Linux systems which have strdup() as a macro.
* During auto-fetch, don't attempt to autologin a second time if the first Fix intermittent "Alarm clock" error.
time failed.
--- Add epsv6 and epsv to disable extended passive mode for IPv6 or
This is a brief description of the new features and fixes added to both IPv4 and IPv6 respectively.
lukemftp-1.3 since the release of lukemftp-1.2. As always, the manual
page (src/ftp.cat1) is the place to look for complete descriptions.
* The `ls' command now uses the `LIST' directive instead of `NLST', Improve parsing of HTTP chunked transfers per RFC2616.
in order to be compatible with RFC959.
* Add fget command, which reads a list of filenames to retrieve from Use the service name to getaddrinfo() (along with the host name),
the given file. so that features such as DNS Service Discovery will work.
* Add support for uploading files on the command-line with `ftp -u'. Fix various compiler warnings.
* Various fixes to the IPv6 support.
--- Changes in tnftp from 20050625 to 20070806:
This is a brief description of the new features and fixes added to
lukemftp-1.2 since the release of lukemftp-1.1. As always, the manual
page (src/ftp.cat1) is the place to look for complete descriptions.
* During remote completion, only send ``NLST'' instead of ``NLST .'' Implement '-s srcaddr' to set the local IP address for
when reading the list of files from the remote server; some servers all connections.
don't like the trailing `.'.
* Support a leading ``[user@]'' for ``[user@]host[:][path]'' auto-fetches Support '-q quittime' when waiting for server replies.
and ``[user@]host'' connections.
* Always compile in support for setting the type of service on transfers. Use IEC 60027-2 "KiB", "MiB" (etc) instead of "KB", "MB", ...
Should speed up transfers on Linux systems.
* Improve performance of non-rate-limited transfers. Portability fixes, including for FreeBSD, Mac OS X, and Solaris.
* Work around ftp servers that aren't Y2K compliant in returning the
modification time of a file.
* Update the libedit library to support automatic and magic margins,
allowing ftp's rprompt to move an extra character to the right.
---
This is a brief description of the new features and fixes added to
lukemftp-1.1 since the release of lukemftp-1.0. As always, the manual
page (src/ftp.cat1) is the place to look for complete descriptions.
* Implemented `set prompt' and `set rprompt', which allow you to
configure the prompt and right side prompt (respectively).
Some tcsh(1) style `%' escapes are supported, including
%. %c %/ %m %M %n
* Implemented restarting of file:/// and non-proxied http:// URLs
(using -R)
* Correctly parse remote ports given as numbers that don't appear in
the services(5) database.
* Prevent a couple of minor memory leaks
* Add missing compilation setting for SOCKS

View File

@ -1,61 +1,68 @@
WHAT IS LUKEMFTP? WHAT IS TNFTP?
----------------- --------------
`lukemftp' is what many users affectionately call the enhanced ftp `tnftp' is a `port' of the NetBSD FTP client to other systems.
client in NetBSD (http://www.netbsd.org). The `lukem' comes from See http://www.NetBSD.org/ for more details about NetBSD.
the account name of the NetBSD developer who wrote most of the
enhancements: Luke Mewburn <lukem@netbsd.org>.
This package is a `port' of the NetBSD ftp client to other systems. tnftp was formerly known as `lukemftp'
It was renamed to `tnftp' by Luke Mewburn in February 2003.
The enhancements over the standard ftp client in 4.4BSD (and The enhancements over the standard ftp client in 4.4BSD (and
derivatives) include: derivatives) include:
* command-line editing within ftp * command-line editing within ftp
* command-line fetching of URLS, including support for: * command-line fetching of URLS, including support for:
- http proxies (c.f: $http_proxy, $ftp_proxy) - http proxies (see $http_proxy, $ftp_proxy)
- authentication - authentication
* configurable prompt * configurable prompt
* context sensitive command and filename completion * context sensitive command and filename completion
* dynamic progress bar * dynamic progress bar
* feature negotiation extensions from RFC 2389 * feature negotiation extensions from RFC 2389
(c.f: `feat' and `remopts') (see `feat' and `remopts')
* extensions to ftp from the IETF ftpext working group * extensions to ftp from the IETF ftpext working group
(c.f: `mlsd' and `mlst') (see `mlsd' and `mlst')
* IPv6 support (from the WIDE project) * IPv6 support (from the WIDE project)
* modification time preservation * modification time preservation
* paging of local and remote files, and of directory listings * paging of local and remote files, and of directory listings
(c.f: `lpage', `page', `pdir') (see `lpage', `page', `pdir')
* passive mode support, with fallback to active mode * passive mode support, with fallback to active mode
* retrieval of filenames listed in a given file (c.f: `fget') * retrieval of filenames listed in a given file (see `fget')
* `set option' override of ftp environment variables * `set option' override of ftp environment variables
* socks4/socks5 support * TIS Firewall Toolkit gate ftp proxy support (see `gate')
* TIS Firewall Toolkit gate ftp proxy support (c.f: `gate') * transfer-rate throttling (see `-T', `rate')
* transfer-rate throttling (c.f: `-T', `rate') * uploading of files on the command line (see `-u')
* uploading of files on the command line (c.f: `-u') * (Dante) SOCKS5 support
Previous features, currently disabled until a test system is available:
* SOCKS4 support
INSTALLATION INSTALLATION
------------ ------------
Refer to `INSTALL' for more information on how to compile and install Refer to `INSTALL' for more information on how to compile and install tnftp.
lukemftp.
FEEDBACK / BUG REPORTS FEEDBACK / BUG REPORTS
---------------------- ----------------------
Please email feedback back to the maintainer: <lukem@netbsd.org>. Please email feedback back to the maintainer:
Luke Mewburn <lukem@NetBSD.org>.
COPYRIGHT COPYRIGHT
--------- ---------
lukemftp is covered by a BSD-style copyright notice. Please refer to tnftp is covered by a BSD-style copyright notice.
the file `COPYING' for more information. Please refer to the file `COPYING' for more information.
AVAILABILITY AVAILABILITY
------------ ------------
The primary ftp site for lukemftp is: The primary ftp site for tnftp is:
ftp://ftp.netbsd.org/pub/NetBSD/misc/lukemftp/ ftp://ftp.NetBSD.org/pub/NetBSD/misc/tnftp/
DOCUMENT REFERENCE
------------------
$NetBSD: README,v 1.10 2007/08/06 01:58:57 lukem Exp $

View File

@ -1,30 +1,53 @@
Whilst a lot of the work in lukemftp (both the original sources in NetBSD Whilst a lot of the work in tnftp (both the original sources in NetBSD
and this port) was done by me (Luke Mewburn), it would not be as useable and this port) was done by Luke Mewburn, it would not be as usable
without the enhancements, fixes, or input from the following people: without the enhancements, bug fixes, or input from the following people:
Amitai Schlair <schmonz@schmonz.com>
Anders Dinsen <anders@dinsen.net>
Anders Magnusson <ragge@ltu.se>
Arkadiusz Miskiewicz <misiek@pld.org.pl>
Brian Stark <bstark1990@netscape.net> Brian Stark <bstark1990@netscape.net>
Chris G. Demetriou <cgd@netbsd.org> Chris G. Demetriou <cgd@NetBSD.org>
Christos Zoulas <christos@netbsd.org> Christos Zoulas <christos@NetBSD.org>
Dan Winship <danw@mit.edu> Dan Winship <danw@mit.edu>
Darren Reed <darrenr@pobox.com> Darren Reed <darrenr@pobox.com>
David Carrel <carrel@netbsd.org> David Brownlee <abs@mono.org>
David Carrel <carrel@NetBSD.org>
DervishD <raul@pleyades.net>
Douwe Kiela <virtus@wanadoo.nl>
Eugene Kotlyarov <ekot@protek36.esoo.ru>
Geoff Wing <mason@primenet.com.au>
Giles Lean <giles@nemeton.com.au> Giles Lean <giles@nemeton.com.au>
Havard Eidnes <Havard.Eidnes@runit.sintef.no> Havard Eidnes <Havard.Eidnes@runit.sintef.no>
ITOH Yasufumi <itohy@netbsd.org> Hubert Feyrer <hubert@feyrer.de>
Jason R. Thorpe <thorpej@netbsd.org> ITOH Yasufumi <itohy@NetBSD.org>
Jason R. Thorpe <thorpej@NetBSD.org>
John Hawkinson <jhawk@mit.edu> John Hawkinson <jhawk@mit.edu>
Joseph S. Myers <jsm28@cam.ac.uk> Joseph S. Myers <jsm28@cam.ac.uk>
Jun-ichiro itojun Hagino <itojun@netbsd.org> Jun-ichiro itojun Hagino <itojun@NetBSD.org>
Kimmo Suominen <kim@tac.nyc.ny.us> Kimmo Suominen <kim@tac.nyc.ny.us>
Klaus Klein <kleink@netbsd.org> Klaus Klein <kleink@NetBSD.org>
Luke Mewburn <lukem@netbsd.org> Launey Thomas <ljt@alum.mit.edu>
Luke Mewburn <lukem@NetBSD.org>
Marc Horowitz <marc@mit.edu> Marc Horowitz <marc@mit.edu>
Mathieu Arnold <mat@FreeBSD.org>
Matthew R. Green <mrg@eterna.com.au> Matthew R. Green <mrg@eterna.com.au>
Matthias Pfaller <leo@dachau.marco.de> Matthias Pfaller <leo@dachau.marco.de>
Matthias Scheler <tron@zhadum.de> Matthias Scheler <tron@zhadum.de>
Maxim Konovalov <maxim@FreeBSD.org>
Maxime Henrion <mux@FreeBSD.org>
Michael L. Hitch <osymh@terra.oscs.montana.edu> Michael L. Hitch <osymh@terra.oscs.montana.edu>
Mike Heffner <mikeh@FreeBSD.org>
Onno van der Linden <o.vd.linden@quicknet.nl>
Ruslan Ermilov <ru@FreeBSD.org>
Ryoji Kanai <rkanai@eeye.com>
Scott Aaron Bamford <sab@ansic.net> Scott Aaron Bamford <sab@ansic.net>
Simon Burge <simonb@thistledown.com.au> Simon Burge <simonb@thistledown.com.au>
Steve McClellan <steve.mcclellan@radisys.com>
TAMURA Kent <kent@NetBSD.org>
Stoned Elipot <seb@NetBSD.org>
Todd C. Miller <Todd.Miller@courtesan.com> Todd C. Miller <Todd.Miller@courtesan.com>
YAMANO Yuji <yyamano@NetBSD.org>
Yar Tikhiy <yar@FreeBSD.org>
Apologies to anyone I've missed. Apologies to anyone missed.

View File

@ -1,92 +0,0 @@
/* $Id: acconfig.h,v 1.9 2002/06/10 01:27:13 lukem Exp $ */
@TOP@
@BOTTOM@
/* Define if your compiler supports `long long' */
#undef HAVE_LONG_LONG
/* Define if *printf() uses %qd to print `long long' (otherwise uses %lld) */
#undef HAVE_PRINTF_QD
/* Define if in_port_t exists */
#undef HAVE_IN_PORT_T
/* Define if sa_family_t exists in <sys/socket.h> */
#undef HAVE_SA_FAMILY_T
/* Define if struct sockaddr.sa_len exists (implies sockaddr_in.sin_len, etc) */
#undef HAVE_SOCKADDR_SA_LEN
/* Define if socklen_t exists */
#undef HAVE_SOCKLEN_T
/* Define if AF_INET6 exists in <sys/socket.h> */
#undef HAVE_AF_INET6
/* Define if `struct sockaddr_in6' exists in <netinet/in.h> */
#undef HAVE_SOCKADDR_IN6
/* Define if `struct addrinfo' exists in <netdb.h> */
#undef HAVE_ADDRINFO
/*
* Define if <netdb.h> contains AI_NUMERICHOST et al.
* Systems which only implement RFC2133 will need this.
*/
#undef HAVE_RFC2553_NETDB
/* Define if `struct direct' has a d_namlen element */
#undef HAVE_D_NAMLEN
/* Define if h_errno exists in <netdb.h> */
#undef HAVE_H_ERRNO_D
/* Define if fclose() is declared in <stdio.h> */
#undef HAVE_FCLOSE_D
/* Define if getpass() is declared in <stdlib.h> or <unistd.h> */
#undef HAVE_GETPASS_D
/* Define if optarg is declared in <stdlib.h> or <unistd.h> */
#undef HAVE_OPTARG_D
/* Define if optind is declared in <stdlib.h> or <unistd.h> */
#undef HAVE_OPTIND_D
/* Define if pclose() is declared in <stdio.h> */
#undef HAVE_PCLOSE_D
/* Define if `long long' is supported and sizeof(off_t) >= 8 */
#undef HAVE_QUAD_SUPPORT
/* Define if strptime() is declared in <time.h> */
#undef HAVE_STRPTIME_D
/*
* Define this if compiling with SOCKS (the firewall traversal library).
* Also, you must define connect, getsockname, bind, accept, listen, and
* select to their R-versions.
*/
#undef SOCKS
#undef SOCKS4
#undef SOCKS5
#undef connect
#undef getsockname
#undef bind
#undef accept
#undef listen
#undef select
#undef dup
#undef dup2
#undef fclose
#undef gethostbyname
#undef getpeername
#undef read
#undef recv
#undef recvfrom
#undef rresvport
#undef send
#undef sendto
#undef shutdown
#undef write

View File

@ -1,257 +0,0 @@
dnl $Id: aclocal.m4,v 1.5 1999/11/13 10:50:39 lukem Exp $
dnl
dnl
dnl AC_MSG_TRY_COMPILE
dnl
dnl Written by Luke Mewburn <lukem@netbsd.org>
dnl
dnl Usage:
dnl AC_MSG_TRY_COMPILE(Message, CacheVar, Includes, Code,
dnl ActionPass [,ActionFail] )
dnl
dnl effectively does:
dnl AC_CACHE_CHECK(Message, CacheVar,
dnl AC_TRY_COMPILE(Includes, Code, CacheVar = yes, CacheVar = no)
dnl if CacheVar == yes
dnl AC_MESSAGE_RESULT(yes)
dnl ActionPass
dnl else
dnl AC_MESSAGE_RESULT(no)
dnl ActionFail
dnl )
dnl
AC_DEFUN(AC_MSG_TRY_COMPILE, [
AC_CACHE_CHECK($1, $2, [
AC_TRY_COMPILE([ $3 ], [ $4; ], [ $2=yes ], [ $2=no ])
])
if test "x[$]$2" = "xyes"; then
$5
else
$6
:
fi
])
dnl
dnl AC_MSG_TRY_LINK
dnl
dnl Usage:
dnl AC_MSG_TRY_LINK(Message, CacheVar, Includes, Code,
dnl ActionPass [,ActionFail] )
dnl
dnl as AC_MSG_TRY_COMPILE, but uses AC_TRY_LINK instead of AC_TRY_COMPILE
dnl
AC_DEFUN(AC_MSG_TRY_LINK, [
AC_CACHE_CHECK($1, $2, [
AC_TRY_LINK([ $3 ], [ $4; ], [ $2=yes ], [ $2=no ])
])
if test "x[$]$2" = "xyes"; then
$5
else
$6
:
fi
])
dnl
dnl AC_LIBRARY_NET: #Id: net.m4,v 1.5 1997/11/09 21:36:54 jhawk Exp #
dnl
dnl Written by John Hawkinson <jhawk@mit.edu>. This code is in the Public
dnl Domain.
dnl
dnl This test is for network applications that need socket() and
dnl gethostbyname() -ish functions. Under Solaris, those applications need to
dnl link with "-lsocket -lnsl". Under IRIX, they should *not* link with
dnl "-lsocket" because libsocket.a breaks a number of things (for instance:
dnl gethostbyname() under IRIX 5.2, and snoop sockets under most versions of
dnl IRIX).
dnl
dnl Unfortunately, many application developers are not aware of this, and
dnl mistakenly write tests that cause -lsocket to be used under IRIX. It is
dnl also easy to write tests that cause -lnsl to be used under operating
dnl systems where neither are necessary (or useful), such as SunOS 4.1.4, which
dnl uses -lnsl for TLI.
dnl
dnl This test exists so that every application developer does not test this in
dnl a different, and subtly broken fashion.
dnl
dnl It has been argued that this test should be broken up into two seperate
dnl tests, one for the resolver libraries, and one for the libraries necessary
dnl for using Sockets API. Unfortunately, the two are carefully intertwined and
dnl allowing the autoconf user to use them independantly potentially results in
dnl unfortunate ordering dependancies -- as such, such component macros would
dnl have to carefully use indirection and be aware if the other components were
dnl executed. Since other autoconf macros do not go to this trouble, and almost
dnl no applications use sockets without the resolver, this complexity has not
dnl been implemented.
dnl
dnl The check for libresolv is in case you are attempting to link statically
dnl and happen to have a libresolv.a lying around (and no libnsl.a).
dnl
AC_DEFUN(AC_LIBRARY_NET, [
# Most operating systems have gethostbyname() in the default searched
# libraries (i.e. libc):
AC_CHECK_FUNC(gethostbyname, ,
# Some OSes (eg. Solaris) place it in libnsl:
AC_CHECK_LIB(nsl, gethostbyname, ,
# Some strange OSes (SINIX) have it in libsocket:
AC_CHECK_LIB(socket, gethostbyname, ,
# Unfortunately libsocket sometimes depends on libnsl.
# AC_CHECK_LIB's API is essentially broken so the following
# ugliness is necessary:
AC_CHECK_LIB(socket, gethostbyname,
LIBS="-lsocket -lnsl $LIBS",
AC_CHECK_LIB(resolv, gethostbyname),
-lnsl)
)
)
)
AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, ,
AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", , -lnsl)))
])
dnl Checks for SOCKS firewall support.
dnl
dnl Written by Matthew R. Green <mrg@eterna.com.au>
dnl
AC_DEFUN(AC_LIBRARY_SOCKS, [
AC_MSG_CHECKING(whether to support SOCKS)
AC_ARG_WITH(socks,
[ --with-socks Compile with SOCKS firewall traversal support.],
[
case "$withval" in
no)
AC_MSG_RESULT(no)
;;
yes)
AC_MSG_RESULT(yes)
AC_CHECK_LIB(socks5, SOCKSconnect, [
socks=5
LIBS="-lsocks5 $LIBS"], [
AC_CHECK_LIB(socks, Rconnect, [
socks=4
LIBS="-lsocks $LIBS"], [
AC_MSG_ERROR(Could not find socks library. You must first install socks.) ] ) ] )
;;
esac
],
AC_MSG_RESULT(no)
)
if test "x$socks" = "x"; then
AC_MSG_CHECKING(whether to support SOCKS5)
AC_ARG_WITH(socks5,
[ --with-socks5[=PATH] Compile with SOCKS5 firewall traversal support.],
[
case "$withval" in
no)
AC_MSG_RESULT(no)
;;
*)
AC_MSG_RESULT(yes)
socks=5
if test "x$withval" = "xyes"; then
withval="-lsocks5"
else
if test -d "$withval"; then
if test -d "$withval/include"; then
CFLAGS="$CFLAGS -I$withval/include"
else
CFLAGS="$CFLAGS -I$withval"
fi
if test -d "$withval/lib"; then
withval="-L$withval/lib -lsocks5"
else
withval="-L$withval -lsocks5"
fi
fi
fi
LIBS="$withval $LIBS"
# If Socks was compiled with Kerberos support, we will need
# to link against kerberos libraries. Temporarily append
# to LIBS. This is harmless if there is no kerberos support.
TMPLIBS="$LIBS"
LIBS="$LIBS $KERBEROS_LIBS"
AC_TRY_LINK([],
[ SOCKSconnect(); ],
[],
[ AC_MSG_ERROR(Could not find the $withval library. You must first install socks5.) ])
LIBS="$TMPLIBS"
;;
esac
],
AC_MSG_RESULT(no)
)
fi
if test "x$socks" = "x"; then
AC_MSG_CHECKING(whether to support SOCKS4)
AC_ARG_WITH(socks4,
[ --with-socks4[=PATH] Compile with SOCKS4 firewall traversal support.],
[
case "$withval" in
no)
AC_MSG_RESULT(no)
;;
*)
AC_MSG_RESULT(yes)
socks=4
if test "x$withval" = "xyes"; then
withval="-lsocks"
else
if test -d "$withval"; then
withval="-L$withval -lsocks"
fi
fi
LIBS="$withval $LIBS"
AC_TRY_LINK([],
[ Rconnect(); ],
[],
[ AC_MSG_ERROR(Could not find the $withval library. You must first install socks.) ])
;;
esac
],
AC_MSG_RESULT(no)
)
fi
if test "x$socks" = "x4"; then
AC_DEFINE(SOCKS)
AC_DEFINE(SOCKS4)
AC_DEFINE(connect, Rconnect)
AC_DEFINE(getsockname, Rgetsockname)
AC_DEFINE(bind, Rbind)
AC_DEFINE(accept, Raccept)
AC_DEFINE(listen, Rlisten)
AC_DEFINE(select, Rselect)
fi
if test "x$socks" = "x5"; then
AC_DEFINE(SOCKS)
AC_DEFINE(SOCKS5)
AC_DEFINE(connect,SOCKSconnect)
AC_DEFINE(getsockname,SOCKSgetsockname)
AC_DEFINE(getpeername,SOCKSgetpeername)
AC_DEFINE(bind,SOCKSbind)
AC_DEFINE(accept,SOCKSaccept)
AC_DEFINE(listen,SOCKSlisten)
AC_DEFINE(select,SOCKSselect)
AC_DEFINE(recvfrom,SOCKSrecvfrom)
AC_DEFINE(sendto,SOCKSsendto)
AC_DEFINE(recv,SOCKSrecv)
AC_DEFINE(send,SOCKSsend)
AC_DEFINE(read,SOCKSread)
AC_DEFINE(write,SOCKSwrite)
AC_DEFINE(rresvport,SOCKSrresvport)
AC_DEFINE(shutdown,SOCKSshutdown)
AC_DEFINE(listen,SOCKSlisten)
AC_DEFINE(close,SOCKSclose)
AC_DEFINE(dup,SOCKSdup)
AC_DEFINE(dup2,SOCKSdup2)
AC_DEFINE(fclose,SOCKSfclose)
AC_DEFINE(gethostbyname,SOCKSgethostbyname)
fi
])

View File

@ -1,275 +0,0 @@
/* config.h.in. Generated automatically from configure.in by autoheader. */
/* $Id: config.h.in,v 1.28 2002/06/10 08:10:33 lukem Exp $ */
/* Define if on AIX 3.
System headers sometimes define this.
We just want to avoid a redefinition error message. */
#ifndef _ALL_SOURCE
#undef _ALL_SOURCE
#endif
/* Define if the closedir function returns void instead of int. */
#undef CLOSEDIR_VOID
/* Define if the `getpgrp' function takes no argument. */
#undef GETPGRP_VOID
/* Define if your C compiler doesn't accept -c and -o together. */
#undef NO_MINUS_C_MINUS_O
/* Define if your Fortran 77 compiler doesn't accept -c and -o together. */
#undef F77_NO_MINUS_C_MINUS_O
/* Define to `long' if <sys/types.h> doesn't define. */
#undef off_t
/* Define to the type of arg1 for select(). */
#undef SELECT_TYPE_ARG1
/* Define to the type of args 2, 3 and 4 for select(). */
#undef SELECT_TYPE_ARG234
/* Define to the type of arg5 for select(). */
#undef SELECT_TYPE_ARG5
/* Define if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Define if you can safely include both <sys/time.h> and <time.h>. */
#undef TIME_WITH_SYS_TIME
/* Define if the closedir function returns void instead of int. */
#undef VOID_CLOSEDIR
/* The number of bytes in a off_t. */
#undef SIZEOF_OFF_T
/* Define if you have the err function. */
#undef HAVE_ERR
/* Define if you have the fgetln function. */
#undef HAVE_FGETLN
/* Define if you have the fparseln function. */
#undef HAVE_FPARSELN
/* Define if you have the fseeko function. */
#undef HAVE_FSEEKO
/* Define if you have the getaddrinfo function. */
#undef HAVE_GETADDRINFO
/* Define if you have the gethostbyname2 function. */
#undef HAVE_GETHOSTBYNAME2
/* Define if you have the getnameinfo function. */
#undef HAVE_GETNAMEINFO
/* Define if you have the getpassphrase function. */
#undef HAVE_GETPASSPHRASE
/* Define if you have the getpgrp function. */
#undef HAVE_GETPGRP
/* Define if you have the inet_ntop function. */
#undef HAVE_INET_NTOP
/* Define if you have the inet_pton function. */
#undef HAVE_INET_PTON
/* Define if you have the memmove function. */
#undef HAVE_MEMMOVE
/* Define if you have the mkstemp function. */
#undef HAVE_MKSTEMP
/* Define if you have the poll function. */
#undef HAVE_POLL
/* Define if you have the select function. */
#undef HAVE_SELECT
/* Define if you have the setprogname function. */
#undef HAVE_SETPROGNAME
/* Define if you have the sl_init function. */
#undef HAVE_SL_INIT
/* Define if you have the snprintf function. */
#undef HAVE_SNPRINTF
/* Define if you have the strdup function. */
#undef HAVE_STRDUP
/* Define if you have the strerror function. */
#undef HAVE_STRERROR
/* Define if you have the strlcat function. */
#undef HAVE_STRLCAT
/* Define if you have the strlcpy function. */
#undef HAVE_STRLCPY
/* Define if you have the strptime function. */
#undef HAVE_STRPTIME
/* Define if you have the strsep function. */
#undef HAVE_STRSEP
/* Define if you have the strtoll function. */
#undef HAVE_STRTOLL
/* Define if you have the strunvis function. */
#undef HAVE_STRUNVIS
/* Define if you have the strvis function. */
#undef HAVE_STRVIS
/* Define if you have the timegm function. */
#undef HAVE_TIMEGM
/* Define if you have the usleep function. */
#undef HAVE_USLEEP
/* Define if you have the <arpa/nameser.h> header file. */
#undef HAVE_ARPA_NAMESER_H
/* Define if you have the <dirent.h> header file. */
#undef HAVE_DIRENT_H
/* Define if you have the <err.h> header file. */
#undef HAVE_ERR_H
/* Define if you have the <libutil.h> header file. */
#undef HAVE_LIBUTIL_H
/* Define if you have the <ndir.h> header file. */
#undef HAVE_NDIR_H
/* Define if you have the <paths.h> header file. */
#undef HAVE_PATHS_H
/* Define if you have the <poll.h> header file. */
#undef HAVE_POLL_H
/* Define if you have the <regex.h> header file. */
#undef HAVE_REGEX_H
/* Define if you have the <sys/dir.h> header file. */
#undef HAVE_SYS_DIR_H
/* Define if you have the <sys/ndir.h> header file. */
#undef HAVE_SYS_NDIR_H
/* Define if you have the <sys/poll.h> header file. */
#undef HAVE_SYS_POLL_H
/* Define if you have the <termcap.h> header file. */
#undef HAVE_TERMCAP_H
/* Define if you have the <util.h> header file. */
#undef HAVE_UTIL_H
/* Define if you have the <vis.h> header file. */
#undef HAVE_VIS_H
/* Define if you have the nsl library (-lnsl). */
#undef HAVE_LIBNSL
/* Define if you have the socket library (-lsocket). */
#undef HAVE_LIBSOCKET
/* Define if you have the tinfo library (-ltinfo). */
#undef HAVE_LIBTINFO
/* Define if you have the util library (-lutil). */
#undef HAVE_LIBUTIL
/* Define if your compiler supports `long long' */
#undef HAVE_LONG_LONG
/* Define if *printf() uses %qd to print `long long' (otherwise uses %lld) */
#undef HAVE_PRINTF_QD
/* Define if in_port_t exists */
#undef HAVE_IN_PORT_T
/* Define if sa_family_t exists in <sys/socket.h> */
#undef HAVE_SA_FAMILY_T
/* Define if struct sockaddr.sa_len exists (implies sockaddr_in.sin_len, etc) */
#undef HAVE_SOCKADDR_SA_LEN
/* Define if socklen_t exists */
#undef HAVE_SOCKLEN_T
/* Define if AF_INET6 exists in <sys/socket.h> */
#undef HAVE_AF_INET6
/* Define if `struct sockaddr_in6' exists in <netinet/in.h> */
#undef HAVE_SOCKADDR_IN6
/* Define if `struct addrinfo' exists in <netdb.h> */
#undef HAVE_ADDRINFO
/*
* Define if <netdb.h> contains AI_NUMERICHOST et al.
* Systems which only implement RFC2133 will need this.
*/
#undef HAVE_RFC2553_NETDB
/* Define if `struct direct' has a d_namlen element */
#undef HAVE_D_NAMLEN
/* Define if h_errno exists in <netdb.h> */
#undef HAVE_H_ERRNO_D
/* Define if fclose() is declared in <stdio.h> */
#undef HAVE_FCLOSE_D
/* Define if getpass() is declared in <stdlib.h> or <unistd.h> */
#undef HAVE_GETPASS_D
/* Define if optarg is declared in <stdlib.h> or <unistd.h> */
#undef HAVE_OPTARG_D
/* Define if optind is declared in <stdlib.h> or <unistd.h> */
#undef HAVE_OPTIND_D
/* Define if pclose() is declared in <stdio.h> */
#undef HAVE_PCLOSE_D
/* Define if `long long' is supported and sizeof(off_t) >= 8 */
#undef HAVE_QUAD_SUPPORT
/* Define if strptime() is declared in <time.h> */
#undef HAVE_STRPTIME_D
/*
* Define this if compiling with SOCKS (the firewall traversal library).
* Also, you must define connect, getsockname, bind, accept, listen, and
* select to their R-versions.
*/
#undef SOCKS
#undef SOCKS4
#undef SOCKS5
#undef connect
#undef getsockname
#undef bind
#undef accept
#undef listen
#undef select
#undef dup
#undef dup2
#undef fclose
#undef gethostbyname
#undef getpeername
#undef read
#undef recv
#undef recvfrom
#undef rresvport
#undef send
#undef sendto
#undef shutdown
#undef write

4229
contrib/tnftp/configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -1,307 +0,0 @@
dnl $Id: configure.in,v 1.37 2002/06/10 08:08:53 lukem Exp $
dnl
dnl configure.in --
dnl process this file with autoconf to produce a configure script.
dnl
AC_REVISION($Revision: 1.37 $)dnl
AC_INIT(lukemftp.h)
dnl Arguments for which features are included
dnl
AC_ARG_PROGRAM
AC_ARG_ENABLE(editcomplete, [\
--enable-editcomplete Turn on command line editing and completion.
--disable-editcomplete Turn off command line editing and completion
[default: enabled].],
opt_editcomplete=$enableval,
opt_editcomplete=yes)
AC_ARG_ENABLE(ipv6, [\
--enable-ipv6 Enable IPv6 support (if your OS supports it).
--disable-ipv6 Disable IPv6 support (even if your OS supports it)
[default: enabled].],
opt_ipv6=$enableval,
opt_ipv6=yes)
dnl Checks for programs.
dnl
AC_PROG_MAKE_SET
AC_PROG_CC
AC_PROG_AWK
AC_PROG_INSTALL
AC_PROG_RANLIB
AC_CHECK_PROGS(AR, ar)
AC_AIX
dnl Checks for libraries.
dnl
AC_CHECK_LIB(util, fparseln)
if test $opt_editcomplete = yes; then
AC_CHECK_LIB(tinfo, tgetent, ,
AC_CHECK_LIB(termcap, tgetent, ,
AC_CHECK_LIB(curses, tgetent, ,
AC_CHECK_LIB(ncurses, tgetent))))
AC_SEARCH_LIBS(el_init, edit, have_libedit=yes, have_libedit=no)
fi
AC_LIBRARY_NET
AC_LIBRARY_SOCKS
if test -n "$socks"; then
if test $opt_ipv6 = yes; then
echo "IPv6 is incompatible with socks, disabling IPv6 support"
opt_ipv6=no
fi
fi
dnl Checks for header files.
dnl
AC_CONFIG_HEADER(config.h)
AC_HEADER_DIRENT
AC_HEADER_STDC
AC_CHECK_HEADERS(arpa/nameser.h err.h regex.h paths.h poll.h sys/poll.h \
termcap.h util.h libutil.h vis.h)
dnl Checks for typedefs, structures, and compiler characteristics.
dnl
AC_HEADER_TIME
AC_TYPE_OFF_T
AC_CHECK_SIZEOF(off_t, 0)
AC_MSG_TRY_LINK(for long long, ftp_cv_HAVE_LONG_LONG, [
#include <sys/types.h>] , [
long long X = 2, Y = 1, Z;
Z = X / Y; ], [
AC_DEFINE(HAVE_LONG_LONG, 1)
have_long_long=yes], [have_long_long=no])
AC_MSG_TRY_COMPILE(for in_port_t, ftp_cv_HAVE_IN_PORT_T, [
#include <sys/types.h>
#include <netinet/in.h> ], [ in_port_t X ], [AC_DEFINE(HAVE_IN_PORT_T, 1)])
AC_MSG_TRY_COMPILE(for sa_family_t, ftp_cv_HAVE_SA_FAMILY_T, [
#include <sys/types.h>
#include <sys/socket.h> ], [ sa_family_t X ], [AC_DEFINE(HAVE_SA_FAMILY_T, 1)])
AC_MSG_TRY_COMPILE(for sockaddr_in.sin_len, ftp_cv_HAVE_SOCKADDR_SA_LEN, [
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h> ], [
struct sockaddr_in sin;
int X = sin.sin_len ], [AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1)])
AC_MSG_TRY_COMPILE(for socklen_t, ftp_cv_HAVE_SOCKLEN_T, [
#include <sys/types.h>
#include <sys/socket.h> ], [ socklen_t X ], [AC_DEFINE(HAVE_SOCKLEN_T, 1)])
if test $opt_ipv6 = yes; then
AC_MSG_TRY_COMPILE(for AF_INET6, ftp_cv_HAVE_AF_INET6, [
#include <sys/types.h>
#include <sys/socket.h> ],
[ int X = AF_INET6 ], [AC_DEFINE(HAVE_AF_INET6, 1)])
AC_MSG_TRY_COMPILE(for struct sockaddr_in6, ftp_cv_HAVE_SOCKADDR_IN6, [
#include <sys/types.h>
#include <netinet/in.h> ],
[ struct sockaddr_in6 X ], [AC_DEFINE(HAVE_SOCKADDR_IN6, 1)])
fi
AC_MSG_TRY_COMPILE(for struct addrinfo, ftp_cv_HAVE_ADDRINFO, [
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h> ],
[ struct addrinfo X ], [AC_DEFINE(HAVE_ADDRINFO, 1)])
AC_MSG_TRY_COMPILE(for d_namlen in struct dirent, ftp_cv_HAVE_D_NAMLEN, [
#if HAVE_DIRENT_H
# include <dirent.h>
#else
# define dirent direct
# if HAVE_SYS_NDIR_H
# include <sys/ndir.h>
# endif
# if HAVE_SYS_DIR_H
# include <sys/dir.h>
# endif
# if HAVE_NDIR_H
# include <ndir.h>
# endif
#endif ], [
struct dirent dp;
int X = dp.d_namlen; ], [AC_DEFINE(HAVE_D_NAMLEN, 1)])
AC_MSG_TRY_COMPILE(for h_errno declaration, ftp_cv_HAVE_H_ERRNO_D, [
#include <netdb.h> ], [ int X = h_errno ], [AC_DEFINE(HAVE_H_ERRNO_D, 1)])
AC_MSG_TRY_COMPILE(for fclose() declaration, ftp_cv_HAVE_FCLOSE_D, [
#include <stdio.h> ], [ int (*X)() = fclose ], [AC_DEFINE(HAVE_FCLOSE_D, 1)])
AC_MSG_TRY_COMPILE(for getpass() declaration, ftp_cv_HAVE_GETPASS_D, [
#include <stdlib.h>
#include <unistd.h> ], [ char *(*X)() = getpass ], [
AC_DEFINE(HAVE_GETPASS_D, 1)])
AC_MSG_TRY_COMPILE(for optarg declaration, ftp_cv_HAVE_OPTARG_D, [
#include <stdlib.h>
#include <unistd.h> ], [ char *X = optarg ], [AC_DEFINE(HAVE_OPTARG_D, 1)])
AC_MSG_TRY_COMPILE(for optind declaration, ftp_cv_HAVE_OPTIND_D, [
#include <stdlib.h>
#include <unistd.h> ], [ int X = optind ], [AC_DEFINE(HAVE_OPTIND_D, 1)])
AC_MSG_TRY_COMPILE(for pclose() declaration, ftp_cv_HAVE_PCLOSE_D, [
#include <stdio.h> ], [ int (*X)() = pclose ], [AC_DEFINE(HAVE_PCLOSE_D, 1)])
dnl Checks for library functions.
dnl
AC_REPLACE_FUNCS(err fgetln fseeko getaddrinfo getnameinfo inet_ntop inet_pton \
mkstemp setprogname sl_init snprintf strdup strerror strlcat \
strlcpy strptime strsep strunvis strvis timegm usleep)
AC_CHECK_FUNCS(gethostbyname2 getpassphrase getpgrp memmove poll select)
if test $ac_cv_func_getpgrp = yes; then
AC_FUNC_GETPGRP
fi
if test $ac_cv_lib_util_fparseln != yes; then
AC_REPLACE_FUNCS(fparseln)
fi
LIBOBJS="$LIBOBJS glob.o"
if test $ac_cv_func_strptime = yes; then
AC_MSG_TRY_COMPILE(for strptime() declaration, ftp_cv_HAVE_STRPTIME_D, [
#include <time.h> ], [ char *X = strptime("", "", NULL) ],
[AC_DEFINE(HAVE_STRPTIME_D, 1)])
fi
if test $have_long_long = yes -a $ac_cv_sizeof_off_t -ge 8; then
dnl We assume that if sprintf() supports %lld or %qd,
dnl then all of *printf() does. If not, disable long long
dnl support because we don't know how to display it.
AC_MSG_CHECKING(*printf() support for %lld)
can_printf_longlong=no
AC_TRY_RUN([
#include <stdio.h>
int main() {
char buf[100];
sprintf(buf, "%lld", 4294967300LL);
return (strcmp(buf, "4294967300"));
}
], [
AC_MSG_RESULT(yes)
can_printf_longlong=yes
], [
AC_MSG_RESULT(no)
], [ : ])
if test $can_printf_longlong != yes; then
AC_MSG_CHECKING(*printf() support for %qd)
AC_TRY_RUN([
#include <stdio.h>
int main() {
char buf[100];
sprintf(buf, "%qd", 4294967300LL);
return (strcmp(buf, "4294967300"));
}
], [
AC_MSG_RESULT(yes)
can_printf_longlong=yes
AC_DEFINE(HAVE_PRINTF_QD, 1)
], [
AC_MSG_RESULT(no)
], [ : ])
fi
if test $can_printf_longlong = yes; then
AC_DEFINE(HAVE_QUAD_SUPPORT, 1)
AC_REPLACE_FUNCS(strtoll)
fi
fi
if test $opt_editcomplete = yes; then
if test $have_libedit = yes; then
AC_MSG_TRY_COMPILE(for EL_RPROMPT in libedit,
ftp_cv_have_libedit, [
#include <histedit.h> ], [ int X = EL_RPROMPT ], [:],
have_libedit=no )
fi
AC_MSG_CHECKING(for working libedit)
if test $have_libedit = no; then
AC_MSG_RESULT(no - using my own)
INCLUDES="-I\${srcdir}/../libedit $INCLUDES"
LDFLAGS="-L../libedit $LDFLAGS"
LIBS="-ledit $LIBS"
LIBEDIT=libedit.a
LIBDEPENDS="$LIBDEPENDS ../libedit/libedit.a"
else
AC_MSG_RESULT(yes)
fi
else
CFLAGS="-DNO_EDITCOMPLETE $CFLAGS"
fi
if test $ac_cv_func_sl_init = yes; then
AC_MSG_TRY_COMPILE(if sl_add() returns int, ftp_cv_INT_SL_ADD, [
#include <stringlist.h> ], [ int f = sl_add((StringList *)0, "foo") ],
[:] , [LIBOBJS="$LIBOBJS sl_init.o"])
fi
have_rfc2553_netdb=no
if test $ac_cv_func_getaddrinfo = yes -a ! -n "$socks"; then
AC_MSG_TRY_COMPILE(for AI_NUMERICHOST,
ftp_cv_have_ai_numerichost, [
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h> ],
[ int X = AI_NUMERICHOST ], [ have_rfc2553_netdb=yes ])
fi
AC_MSG_CHECKING(for working getaddrinfo())
if test $have_rfc2553_netdb = yes; then
AC_DEFINE(HAVE_RFC2553_NETDB, 1)
AC_MSG_RESULT(yes)
else
if test $ac_cv_func_getaddrinfo = yes; then
LIBOBJS="$LIBOBJS getaddrinfo.o"
AC_MSG_RESULT(no - using local version)
else
AC_MSG_RESULT(using local version)
fi
fi
if test $ac_cv_header_vis_h = yes; then
AC_MSG_TRY_COMPILE(for VIS_WHITE in vis.h,
ftp_cv_have_vis_white, [
#include <sys/types.h>
#include <vis.h> ], [ int X = VIS_WHITE ], [:],
ac_cv_header_vis_h=no )
fi
if test -n "$LIBOBJS"; then
INCLUDES="$INCLUDES -I\${srcdir}/../libukem"
LDFLAGS="$LDFLAGS -L../libukem"
LIBS="$LIBS -lukem"
LIBUKEM=libukem.a
LIBDEPENDS="$LIBDEPENDS ../libukem/libukem.a"
fi
dnl Create the Makefiles
dnl
AC_SUBST(INCLUDES)
AC_SUBST(LIBEDIT)
AC_SUBST(LIBUKEM)
AC_SUBST(LIBDEPENDS)
AC_OUTPUT(Makefile libedit/Makefile libedit/makelist libukem/Makefile \
src/Makefile)

File diff suppressed because it is too large Load Diff

View File

@ -1,251 +0,0 @@
#!/bin/sh
#
# install - install a program, script, or datafile
# This comes from X11R5 (mit/util/scripts/install.sh).
#
# Copyright 1991 by the Massachusetts Institute of Technology
#
# Permission to use, copy, modify, distribute, and sell this software and its
# documentation for any purpose is hereby granted without fee, provided that
# the above copyright notice appear in all copies and that both that
# copyright notice and this permission notice appear in supporting
# documentation, and that the name of M.I.T. not be used in advertising or
# publicity pertaining to distribution of the software without specific,
# written prior permission. M.I.T. makes no representations about the
# suitability of this software for any purpose. It is provided "as is"
# without express or implied warranty.
#
# Calling this script install-sh is preferred over install.sh, to prevent
# `make' implicit rules from creating a file called install from it
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
# from scratch. It can only install one file at a time, a restriction
# shared with many OS's install programs.
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
doit="${DOITPROG-}"
# put in absolute paths if you don't have them in your path; or use env. vars.
mvprog="${MVPROG-mv}"
cpprog="${CPPROG-cp}"
chmodprog="${CHMODPROG-chmod}"
chownprog="${CHOWNPROG-chown}"
chgrpprog="${CHGRPPROG-chgrp}"
stripprog="${STRIPPROG-strip}"
rmprog="${RMPROG-rm}"
mkdirprog="${MKDIRPROG-mkdir}"
transformbasename=""
transform_arg=""
instcmd="$mvprog"
chmodcmd="$chmodprog 0755"
chowncmd=""
chgrpcmd=""
stripcmd=""
rmcmd="$rmprog -f"
mvcmd="$mvprog"
src=""
dst=""
dir_arg=""
while [ x"$1" != x ]; do
case $1 in
-c) instcmd="$cpprog"
shift
continue;;
-d) dir_arg=true
shift
continue;;
-m) chmodcmd="$chmodprog $2"
shift
shift
continue;;
-o) chowncmd="$chownprog $2"
shift
shift
continue;;
-g) chgrpcmd="$chgrpprog $2"
shift
shift
continue;;
-s) stripcmd="$stripprog"
shift
continue;;
-t=*) transformarg=`echo $1 | sed 's/-t=//'`
shift
continue;;
-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
shift
continue;;
*) if [ x"$src" = x ]
then
src=$1
else
# this colon is to work around a 386BSD /bin/sh bug
:
dst=$1
fi
shift
continue;;
esac
done
if [ x"$src" = x ]
then
echo "install: no input file specified"
exit 1
else
true
fi
if [ x"$dir_arg" != x ]; then
dst=$src
src=""
if [ -d $dst ]; then
instcmd=:
chmodcmd=""
else
instcmd=mkdir
fi
else
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if [ -f $src -o -d $src ]
then
true
else
echo "install: $src does not exist"
exit 1
fi
if [ x"$dst" = x ]
then
echo "install: no destination specified"
exit 1
else
true
fi
# If destination is a directory, append the input filename; if your system
# does not like double slashes in filenames, you may need to add some logic
if [ -d $dst ]
then
dst="$dst"/`basename $src`
else
true
fi
fi
## this sed command emulates the dirname command
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
# Make sure that the destination directory exists.
# this part is taken from Noah Friedman's mkinstalldirs script
# Skip lots of stat calls in the usual case.
if [ ! -d "$dstdir" ]; then
defaultIFS='
'
IFS="${IFS-${defaultIFS}}"
oIFS="${IFS}"
# Some sh's can't handle IFS=/ for some reason.
IFS='%'
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
IFS="${oIFS}"
pathcomp=''
while [ $# -ne 0 ] ; do
pathcomp="${pathcomp}${1}"
shift
if [ ! -d "${pathcomp}" ] ;
then
$mkdirprog "${pathcomp}"
else
true
fi
pathcomp="${pathcomp}/"
done
fi
if [ x"$dir_arg" != x ]
then
$doit $instcmd $dst &&
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
else
# If we're going to rename the final executable, determine the name now.
if [ x"$transformarg" = x ]
then
dstfile=`basename $dst`
else
dstfile=`basename $dst $transformbasename |
sed $transformarg`$transformbasename
fi
# don't allow the sed command to completely eliminate the filename
if [ x"$dstfile" = x ]
then
dstfile=`basename $dst`
else
true
fi
# Make a temp file name in the proper directory.
dsttmp=$dstdir/#inst.$$#
# Move or copy the file name to the temp name
$doit $instcmd $src $dsttmp &&
trap "rm -f ${dsttmp}" 0 &&
# and set any options; do chmod last to preserve setuid bits
# If any of these fail, we abort the whole thing. If we want to
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $instcmd $src $dsttmp" command.
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
# Now rename the file to the real destination.
$doit $rmcmd -f $dstdir/$dstfile &&
$doit $mvcmd $dsttmp $dstdir/$dstfile
fi &&
exit 0

View File

@ -1,403 +0,0 @@
/* $Id: lukemftp.h,v 1.43 2002/06/10 08:13:01 lukem Exp $ */
#define FTP_PRODUCT "lukemftp"
#define FTP_VERSION "1.6-beta2"
#include "config.h"
#include <sys/types.h>
#include <sys/param.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <arpa/ftp.h>
#include <arpa/inet.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
#include <netdb.h>
#include <pwd.h>
#include <setjmp.h>
#include <signal.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
#if HAVE_POLL
# if HAVE_POLL_H
# include <poll.h>
# elif HAVE_SYS_POLL_H
# include <sys/poll.h>
# endif
#elif HAVE_SELECT
# define USE_SELECT
#else
# error "no poll() or select() found"
#endif
#if HAVE_DIRENT_H
# include <dirent.h>
#else
# define dirent direct
# if HAVE_SYS_NDIR_H
# include <sys/ndir.h>
# endif
# if HAVE_SYS_DIR_H
# include <sys/dir.h>
# endif
# if HAVE_NDIR_H
# include <ndir.h>
# endif
#endif
#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
# include <sys/time.h>
# else
# include <time.h>
# endif
#endif
#if HAVE_ERR_H
# include <err.h>
#endif
#if USE_GLOB_H /* not set by configure; used by other build systems */
# include <glob.h>
#else
# include "ftpglob.h"
#endif
#if HAVE_PATHS_H
# include <paths.h>
#endif
#ifndef _PATH_BSHELL
#define _PATH_BSHELL "/bin/sh"
#endif
#ifndef _PATH_TMP
#define _PATH_TMP "/tmp/"
#endif
typedef struct _stringlist {
char **sl_str;
size_t sl_max;
size_t sl_cur;
} StringList;
StringList *sl_init(void);
int sl_add(StringList *, char *);
void sl_free(StringList *, int);
char *sl_find(StringList *, char *);
#if HAVE_TERMCAP_H
# include <termcap.h>
#else
int tgetent(char *, const char *);
char *tgetstr(const char *, char **);
int tgetflag(const char *);
int tgetnum(const char *);
char *tgoto(const char *, int, int);
void tputs(const char *, int, int (*)(int));
#endif
#if HAVE_UTIL_H
# include <util.h>
#endif
#if HAVE_LIBUTIL_H
# include <libutil.h>
#endif
#if HAVE_VIS_H
# include <vis.h>
#else
# include "ftpvis.h"
#endif
#if ! HAVE_IN_PORT_T
typedef unsigned short in_port_t;
#endif
#if ! HAVE_SA_FAMILY_T
typedef unsigned short sa_family_t;
#endif
#if ! HAVE_SOCKLEN_T
typedef unsigned int socklen_t;
#endif
#if HAVE_AF_INET6 && HAVE_SOCKADDR_IN6
# define INET6
#endif
#if ! HAVE_RFC2553_NETDB
/* RFC 2553 */
#undef EAI_ADDRFAMILY
#define EAI_ADDRFAMILY 1 /* address family for hostname not supported */
#undef EAI_AGAIN
#define EAI_AGAIN 2 /* temporary failure in name resolution */
#undef EAI_BADFLAGS
#define EAI_BADFLAGS 3 /* invalid value for ai_flags */
#undef EAI_FAIL
#define EAI_FAIL 4 /* non-recoverable failure in name resolution */
#undef EAI_FAMILY
#define EAI_FAMILY 5 /* ai_family not supported */
#undef EAI_MEMORY
#define EAI_MEMORY 6 /* memory allocation failure */
#undef EAI_NODATA
#define EAI_NODATA 7 /* no address associated with hostname */
#undef EAI_NONAME
#define EAI_NONAME 8 /* hostname nor servname provided, or not known */
#undef EAI_SERVICE
#define EAI_SERVICE 9 /* servname not supported for ai_socktype */
#undef EAI_SOCKTYPE
#define EAI_SOCKTYPE 10 /* ai_socktype not supported */
#undef EAI_SYSTEM
#define EAI_SYSTEM 11 /* system error returned in errno */
/* KAME extensions? */
#undef EAI_BADHINTS
#define EAI_BADHINTS 12
#undef EAI_PROTOCOL
#define EAI_PROTOCOL 13
#undef EAI_MAX
#define EAI_MAX 14
/* RFC 2553 */
#undef NI_MAXHOST
#define NI_MAXHOST 1025
#undef NI_MAXSERV
#define NI_MAXSERV 32
#undef NI_NOFQDN
#define NI_NOFQDN 0x00000001
#undef NI_NUMERICHOST
#define NI_NUMERICHOST 0x00000002
#undef NI_NAMEREQD
#define NI_NAMEREQD 0x00000004
#undef NI_NUMERICSERV
#define NI_NUMERICSERV 0x00000008
#undef NI_DGRAM
#define NI_DGRAM 0x00000010
/* RFC 2553 */
#undef AI_PASSIVE
#define AI_PASSIVE 0x00000001 /* get address to use bind() */
#undef AI_CANONNAME
#define AI_CANONNAME 0x00000002 /* fill ai_canonname */
/* KAME extensions ? */
#undef AI_NUMERICHOST
#define AI_NUMERICHOST 0x00000004 /* prevent name resolution */
#undef AI_MASK
#define AI_MASK (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
/* RFC 2553 */
#undef AI_ALL
#define AI_ALL 0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */
#undef AI_V4MAPPED_CFG
#define AI_V4MAPPED_CFG 0x00000200 /* accept IPv4-mapped if kernel supports */
#undef AI_ADDRCONFIG
#define AI_ADDRCONFIG 0x00000400 /* only if any address is assigned */
#undef AI_V4MAPPED
#define AI_V4MAPPED 0x00000800 /* accept IPv4-mapped IPv6 address */
#endif /* ! HAVE_RFC2553_NETDB */
#if ! HAVE_RFC2553_NETDB && ! HAVE_ADDRINFO
struct addrinfo {
int ai_flags; /* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */
int ai_family; /* PF_xxx */
int ai_socktype; /* SOCK_xxx */
int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
size_t ai_addrlen; /* length of ai_addr */
char *ai_canonname; /* canonical name for hostname */
struct sockaddr *ai_addr; /* binary address */
struct addrinfo *ai_next; /* next structure in linked list */
};
int getaddrinfo(const char *, const char *,
const struct addrinfo *, struct addrinfo **);
int getnameinfo(const struct sockaddr *, socklen_t, char *,
size_t, char *, size_t, int);
void freeaddrinfo(struct addrinfo *);
char *gai_strerror(int);
#endif /* ! HAVE_RFC2553_NETDB && ! HAVE_ADDRINFO */
#if ! HAVE_D_NAMLEN
# define DIRENT_MISSING_D_NAMLEN
#endif
#if ! HAVE_H_ERRNO_D
extern int h_errno;
#endif
#define HAVE_H_ERRNO 1 /* XXX: an assumption for now... */
#if ! HAVE_FCLOSE_D
int fclose(FILE *);
#endif
#if ! HAVE_GETPASS_D
char *getpass(const char *);
#endif
#if ! HAVE_OPTARG_D
extern char *optarg;
#endif
#if ! HAVE_OPTIND_D
extern int optind;
#endif
#if ! HAVE_PCLOSE_D
int pclose(FILE *);
#endif
#if ! HAVE_ERR
void err(int, const char *, ...);
void errx(int, const char *, ...);
void warn(const char *, ...);
void warnx(const char *, ...);
#endif
#if ! HAVE_FGETLN
char *fgetln(FILE *, size_t *);
#endif
#if ! HAVE_FSEEKO
int fseeko(FILE *, off_t, int);
#endif
#if ! HAVE_FPARSELN
# define FPARSELN_UNESCESC 0x01
# define FPARSELN_UNESCCONT 0x02
# define FPARSELN_UNESCCOMM 0x04
# define FPARSELN_UNESCREST 0x08
# define FPARSELN_UNESCALL 0x0f
char *fparseln(FILE *, size_t *, size_t *, const char[3], int);
#endif
#if ! HAVE_INET_NTOP
const char *inet_ntop(int, const void *, char *, size_t);
#endif
#if ! HAVE_INET_PTON
int inet_pton(int, const char *, void *);
#endif
#if ! HAVE_MKSTEMP
int mkstemp(char *);
#endif
#if ! HAVE_SETPROGNAME
const char *getprogname(void);
void setprogname(const char *);
#endif
#if ! HAVE_SNPRINTF
int snprintf(char *, size_t, const char *, ...);
#endif
#if ! HAVE_STRDUP
char *strdup(const char *);
#endif
#if ! HAVE_STRERROR
char *strerror(int);
#endif
#if ! HAVE_STRPTIME || ! HAVE_STRPTIME_D
char *strptime(const char *, const char *, struct tm *);
#endif
#if HAVE_QUAD_SUPPORT
# if ! HAVE_STRTOLL && HAVE_LONG_LONG
long long strtoll(const char *, char **, int);
# if ! defined(QUAD_MIN)
# define QUAD_MIN (-0x7fffffffffffffffL-1)
# endif
# if ! defined(QUAD_MAX)
# define QUAD_MAX (0x7fffffffffffffffL)
# endif
# endif
#else /* ! HAVE_QUAD_SUPPORT */
# define NO_LONG_LONG 1
#endif /* ! HAVE_QUAD_SUPPORT */
#if ! HAVE_TIMEGM
time_t timegm(struct tm *);
#endif
#if ! HAVE_HSTRERROR
char *strerror(int);
#endif
#if ! HAVE_STRLCAT
size_t strlcat(char *, const char *, size_t);
#endif
#if ! HAVE_STRLCPY
size_t strlcpy(char *, const char *, size_t);
#endif
#if ! HAVE_STRSEP
char *strsep(char **stringp, const char *delim);
#endif
#if ! HAVE_MEMMOVE
# define memmove(a,b,c) bcopy((b),(a),(c))
/* XXX: add others #defines for borken systems? */
#endif
#if HAVE_GETPASSPHRASE
# define getpass getpassphrase
#endif
#if ! defined(MIN)
# define MIN(a, b) ((a) < (b) ? (a) : (b))
#endif
#if ! defined(MAX)
# define MAX(a, b) ((a) < (b) ? (b) : (a))
#endif
#if ! defined(timersub)
# define timersub(tvp, uvp, vvp) \
do { \
(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \
(vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \
if ((vvp)->tv_usec < 0) { \
(vvp)->tv_sec--; \
(vvp)->tv_usec += 1000000; \
} \
} while (0)
#endif
#if ! defined(S_ISLNK)
# define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK)
#endif
#define EPOCH_YEAR 1970
#define SECSPERHOUR 3600
#define SECSPERDAY 86400
#define TM_YEAR_BASE 1900

View File

@ -1,28 +0,0 @@
# $NetBSD: Makefile,v 1.30 2005/02/11 15:13:28 jmc Exp $
# from: @(#)Makefile 8.2 (Berkeley) 4/3/94
.include <bsd.own.mk>
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 -DNO_AUTH -DNO_HELP -DNO_STATUS
.else
LDADD+= -ledit -ltermcap
DPADD+= ${LIBEDIT} ${LIBTERMCAP}
.endif
.if (!defined(SMALLPROG) || defined(SMALLPROG_INET6)) && (${USE_INET6} != "no")
CPPFLAGS+= -DINET6
.endif
cmds.o fetch.o: version.h
main.o: ftp_var.h
.include <bsd.prog.mk>

View File

@ -0,0 +1,52 @@
## $NetBSD: Makefile.am,v 1.2 2010/01/04 06:24:20 lukem Exp $
bin_PROGRAMS = tnftp
tnftp_SOURCES = \
cmds.c \
cmdtab.c \
complete.c \
domacro.c \
fetch.c \
ftp.c \
main.c \
progressbar.c \
ruserpass.c \
util.c
tnftp_CPPFLAGS = \
-DHAVE_TNFTPD_H=1 \
-D_DEFAULT_CONFDIR=\"${sysconfdir}\" \
-I$(srcdir) \
-I$(top_srcdir)/libnetbsd \
-I$(top_srcdir) \
-I$(top_builddir)
tnftp_LDADD = \
../libnetbsd/libnetbsd.la
if USE_LIBEDIT
tnftp_CPPFLAGS += \
-I$(top_srcdir)/libedit
tnftp_LDADD += \
../libedit/libedit.la
endif
man1_MANS = \
tnftp.1
tnftp.1: ftp.1
cp $(srcdir)/ftp.1 tnftp.1
CLEANFILES = \
tnftp.1
EXTRA_DIST = \
extern.h \
ftp.1 \
ftp_var.h \
progressbar.h \
version.h

View File

@ -1,43 +1,809 @@
# # Makefile.in generated by automake 1.11 from Makefile.am.
# $Id: Makefile.in,v 1.8 2000/08/08 07:04:27 lukem Exp $ # @configure_input@
#
srcdir = @srcdir@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
VPATH = @srcdir@ # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
SHELL = /bin/sh # Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
prefix = @prefix@ # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
bin_PROGRAMS = tnftp$(EXEEXT)
@USE_LIBEDIT_TRUE@am__append_1 = \
@USE_LIBEDIT_TRUE@ -I$(top_srcdir)/libedit
@USE_LIBEDIT_TRUE@am__append_2 = \
@USE_LIBEDIT_TRUE@ ../libedit/libedit.la
subdir = src
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/tnftp_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"
PROGRAMS = $(bin_PROGRAMS)
am_tnftp_OBJECTS = tnftp-cmds.$(OBJEXT) tnftp-cmdtab.$(OBJEXT) \
tnftp-complete.$(OBJEXT) tnftp-domacro.$(OBJEXT) \
tnftp-fetch.$(OBJEXT) tnftp-ftp.$(OBJEXT) tnftp-main.$(OBJEXT) \
tnftp-progressbar.$(OBJEXT) tnftp-ruserpass.$(OBJEXT) \
tnftp-util.$(OBJEXT)
tnftp_OBJECTS = $(am_tnftp_OBJECTS)
tnftp_DEPENDENCIES = ../libnetbsd/libnetbsd.la $(am__append_2)
AM_V_lt = $(am__v_lt_$(V))
am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
am__v_lt_0 = --silent
DEFAULT_INCLUDES =
depcomp = $(SHELL) $(top_srcdir)/buildaux/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_$(V))
am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
am__v_CC_0 = @echo " CC " $@;
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_$(V))
am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
am__v_CCLD_0 = @echo " CCLD " $@;
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(tnftp_SOURCES)
DIST_SOURCES = $(tnftp_SOURCES)
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
man1dir = $(mandir)/man1
NROFF = nroff
MANS = $(man1_MANS)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DSYMUTIL = @DSYMUTIL@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
NMEDIT = @NMEDIT@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@ exec_prefix = @exec_prefix@
bindir = @bindir@ host = @host@
mandir = @mandir@ host_alias = @host_alias@
transform = @program_transform_name@ host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
tnftp_SOURCES = \
cmds.c \
cmdtab.c \
complete.c \
domacro.c \
fetch.c \
ftp.c \
main.c \
progressbar.c \
ruserpass.c \
util.c
mandircat1 = ${mandir}/cat1 tnftp_CPPFLAGS = -DHAVE_TNFTPD_H=1 \
-D_DEFAULT_CONFDIR=\"${sysconfdir}\" -I$(srcdir) \
-I$(top_srcdir)/libnetbsd -I$(top_srcdir) -I$(top_builddir) \
$(am__append_1)
tnftp_LDADD = ../libnetbsd/libnetbsd.la $(am__append_2)
man1_MANS = \
tnftp.1
CC = @CC@ CLEANFILES = \
CFLAGS = -I${srcdir} -I${srcdir}/.. -I. -I.. @INCLUDES@ @CFLAGS@ tnftp.1
LIBS = @LIBS@
LDFLAGS = @LDFLAGS@
INSTALL = @INSTALL@ EXTRA_DIST = \
extern.h \
ftp.1 \
ftp_var.h \
progressbar.h \
version.h
PROG = ftp all: all-am
OBJS = cmds.o cmdtab.o complete.o domacro.o fetch.o ftp.o main.o \
ruserpass.o util.o
all: ${PROG} .SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign src/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
install: all $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-mkdir -p ${bindir} cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
${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@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
${CC} ${CFLAGS} ${LDFLAGS} -o ${PROG} ${OBJS} ${LIBS} cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p || test -f $$p1; \
then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
if ($$2 == $$4) files[d] = files[d] " " $$1; \
else { print "f", $$3 "/" $$4, $$1; } } \
END { for (d in files) print "f", d, files[d] }' | \
while read type dir files; do \
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
test -z "$$files" || { \
echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
$(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
} \
; done
clean: uninstall-binPROGRAMS:
rm -f core ${PROG} ${OBJS} @$(NORMAL_UNINSTALL)
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' `; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(bindir)" && rm -f $$files
distclean: clean clean-binPROGRAMS:
rm -f Makefile @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
echo " rm -f" $$list; \
rm -f $$list || exit $$?; \
test -n "$(EXEEXT)" || exit 0; \
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
tnftp$(EXEEXT): $(tnftp_OBJECTS) $(tnftp_DEPENDENCIES)
@rm -f tnftp$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(tnftp_OBJECTS) $(tnftp_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tnftp-cmds.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tnftp-cmdtab.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tnftp-complete.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tnftp-domacro.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tnftp-fetch.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tnftp-ftp.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tnftp-main.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tnftp-progressbar.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tnftp-ruserpass.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tnftp-util.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
tnftp-cmds.o: cmds.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tnftp-cmds.o -MD -MP -MF $(DEPDIR)/tnftp-cmds.Tpo -c -o tnftp-cmds.o `test -f 'cmds.c' || echo '$(srcdir)/'`cmds.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tnftp-cmds.Tpo $(DEPDIR)/tnftp-cmds.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmds.c' object='tnftp-cmds.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tnftp-cmds.o `test -f 'cmds.c' || echo '$(srcdir)/'`cmds.c
tnftp-cmds.obj: cmds.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tnftp-cmds.obj -MD -MP -MF $(DEPDIR)/tnftp-cmds.Tpo -c -o tnftp-cmds.obj `if test -f 'cmds.c'; then $(CYGPATH_W) 'cmds.c'; else $(CYGPATH_W) '$(srcdir)/cmds.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tnftp-cmds.Tpo $(DEPDIR)/tnftp-cmds.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmds.c' object='tnftp-cmds.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tnftp-cmds.obj `if test -f 'cmds.c'; then $(CYGPATH_W) 'cmds.c'; else $(CYGPATH_W) '$(srcdir)/cmds.c'; fi`
tnftp-cmdtab.o: cmdtab.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tnftp-cmdtab.o -MD -MP -MF $(DEPDIR)/tnftp-cmdtab.Tpo -c -o tnftp-cmdtab.o `test -f 'cmdtab.c' || echo '$(srcdir)/'`cmdtab.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tnftp-cmdtab.Tpo $(DEPDIR)/tnftp-cmdtab.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmdtab.c' object='tnftp-cmdtab.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tnftp-cmdtab.o `test -f 'cmdtab.c' || echo '$(srcdir)/'`cmdtab.c
tnftp-cmdtab.obj: cmdtab.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tnftp-cmdtab.obj -MD -MP -MF $(DEPDIR)/tnftp-cmdtab.Tpo -c -o tnftp-cmdtab.obj `if test -f 'cmdtab.c'; then $(CYGPATH_W) 'cmdtab.c'; else $(CYGPATH_W) '$(srcdir)/cmdtab.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tnftp-cmdtab.Tpo $(DEPDIR)/tnftp-cmdtab.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmdtab.c' object='tnftp-cmdtab.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tnftp-cmdtab.obj `if test -f 'cmdtab.c'; then $(CYGPATH_W) 'cmdtab.c'; else $(CYGPATH_W) '$(srcdir)/cmdtab.c'; fi`
tnftp-complete.o: complete.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tnftp-complete.o -MD -MP -MF $(DEPDIR)/tnftp-complete.Tpo -c -o tnftp-complete.o `test -f 'complete.c' || echo '$(srcdir)/'`complete.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tnftp-complete.Tpo $(DEPDIR)/tnftp-complete.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='complete.c' object='tnftp-complete.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tnftp-complete.o `test -f 'complete.c' || echo '$(srcdir)/'`complete.c
tnftp-complete.obj: complete.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tnftp-complete.obj -MD -MP -MF $(DEPDIR)/tnftp-complete.Tpo -c -o tnftp-complete.obj `if test -f 'complete.c'; then $(CYGPATH_W) 'complete.c'; else $(CYGPATH_W) '$(srcdir)/complete.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tnftp-complete.Tpo $(DEPDIR)/tnftp-complete.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='complete.c' object='tnftp-complete.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tnftp-complete.obj `if test -f 'complete.c'; then $(CYGPATH_W) 'complete.c'; else $(CYGPATH_W) '$(srcdir)/complete.c'; fi`
tnftp-domacro.o: domacro.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tnftp-domacro.o -MD -MP -MF $(DEPDIR)/tnftp-domacro.Tpo -c -o tnftp-domacro.o `test -f 'domacro.c' || echo '$(srcdir)/'`domacro.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tnftp-domacro.Tpo $(DEPDIR)/tnftp-domacro.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='domacro.c' object='tnftp-domacro.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tnftp-domacro.o `test -f 'domacro.c' || echo '$(srcdir)/'`domacro.c
tnftp-domacro.obj: domacro.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tnftp-domacro.obj -MD -MP -MF $(DEPDIR)/tnftp-domacro.Tpo -c -o tnftp-domacro.obj `if test -f 'domacro.c'; then $(CYGPATH_W) 'domacro.c'; else $(CYGPATH_W) '$(srcdir)/domacro.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tnftp-domacro.Tpo $(DEPDIR)/tnftp-domacro.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='domacro.c' object='tnftp-domacro.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tnftp-domacro.obj `if test -f 'domacro.c'; then $(CYGPATH_W) 'domacro.c'; else $(CYGPATH_W) '$(srcdir)/domacro.c'; fi`
tnftp-fetch.o: fetch.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tnftp-fetch.o -MD -MP -MF $(DEPDIR)/tnftp-fetch.Tpo -c -o tnftp-fetch.o `test -f 'fetch.c' || echo '$(srcdir)/'`fetch.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tnftp-fetch.Tpo $(DEPDIR)/tnftp-fetch.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fetch.c' object='tnftp-fetch.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tnftp-fetch.o `test -f 'fetch.c' || echo '$(srcdir)/'`fetch.c
tnftp-fetch.obj: fetch.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tnftp-fetch.obj -MD -MP -MF $(DEPDIR)/tnftp-fetch.Tpo -c -o tnftp-fetch.obj `if test -f 'fetch.c'; then $(CYGPATH_W) 'fetch.c'; else $(CYGPATH_W) '$(srcdir)/fetch.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tnftp-fetch.Tpo $(DEPDIR)/tnftp-fetch.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fetch.c' object='tnftp-fetch.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tnftp-fetch.obj `if test -f 'fetch.c'; then $(CYGPATH_W) 'fetch.c'; else $(CYGPATH_W) '$(srcdir)/fetch.c'; fi`
tnftp-ftp.o: ftp.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tnftp-ftp.o -MD -MP -MF $(DEPDIR)/tnftp-ftp.Tpo -c -o tnftp-ftp.o `test -f 'ftp.c' || echo '$(srcdir)/'`ftp.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tnftp-ftp.Tpo $(DEPDIR)/tnftp-ftp.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ftp.c' object='tnftp-ftp.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tnftp-ftp.o `test -f 'ftp.c' || echo '$(srcdir)/'`ftp.c
tnftp-ftp.obj: ftp.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tnftp-ftp.obj -MD -MP -MF $(DEPDIR)/tnftp-ftp.Tpo -c -o tnftp-ftp.obj `if test -f 'ftp.c'; then $(CYGPATH_W) 'ftp.c'; else $(CYGPATH_W) '$(srcdir)/ftp.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tnftp-ftp.Tpo $(DEPDIR)/tnftp-ftp.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ftp.c' object='tnftp-ftp.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tnftp-ftp.obj `if test -f 'ftp.c'; then $(CYGPATH_W) 'ftp.c'; else $(CYGPATH_W) '$(srcdir)/ftp.c'; fi`
tnftp-main.o: main.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tnftp-main.o -MD -MP -MF $(DEPDIR)/tnftp-main.Tpo -c -o tnftp-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tnftp-main.Tpo $(DEPDIR)/tnftp-main.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='main.c' object='tnftp-main.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tnftp-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
tnftp-main.obj: main.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tnftp-main.obj -MD -MP -MF $(DEPDIR)/tnftp-main.Tpo -c -o tnftp-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tnftp-main.Tpo $(DEPDIR)/tnftp-main.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='main.c' object='tnftp-main.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tnftp-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`
tnftp-progressbar.o: progressbar.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tnftp-progressbar.o -MD -MP -MF $(DEPDIR)/tnftp-progressbar.Tpo -c -o tnftp-progressbar.o `test -f 'progressbar.c' || echo '$(srcdir)/'`progressbar.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tnftp-progressbar.Tpo $(DEPDIR)/tnftp-progressbar.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='progressbar.c' object='tnftp-progressbar.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tnftp-progressbar.o `test -f 'progressbar.c' || echo '$(srcdir)/'`progressbar.c
tnftp-progressbar.obj: progressbar.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tnftp-progressbar.obj -MD -MP -MF $(DEPDIR)/tnftp-progressbar.Tpo -c -o tnftp-progressbar.obj `if test -f 'progressbar.c'; then $(CYGPATH_W) 'progressbar.c'; else $(CYGPATH_W) '$(srcdir)/progressbar.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tnftp-progressbar.Tpo $(DEPDIR)/tnftp-progressbar.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='progressbar.c' object='tnftp-progressbar.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tnftp-progressbar.obj `if test -f 'progressbar.c'; then $(CYGPATH_W) 'progressbar.c'; else $(CYGPATH_W) '$(srcdir)/progressbar.c'; fi`
tnftp-ruserpass.o: ruserpass.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tnftp-ruserpass.o -MD -MP -MF $(DEPDIR)/tnftp-ruserpass.Tpo -c -o tnftp-ruserpass.o `test -f 'ruserpass.c' || echo '$(srcdir)/'`ruserpass.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tnftp-ruserpass.Tpo $(DEPDIR)/tnftp-ruserpass.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ruserpass.c' object='tnftp-ruserpass.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tnftp-ruserpass.o `test -f 'ruserpass.c' || echo '$(srcdir)/'`ruserpass.c
tnftp-ruserpass.obj: ruserpass.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tnftp-ruserpass.obj -MD -MP -MF $(DEPDIR)/tnftp-ruserpass.Tpo -c -o tnftp-ruserpass.obj `if test -f 'ruserpass.c'; then $(CYGPATH_W) 'ruserpass.c'; else $(CYGPATH_W) '$(srcdir)/ruserpass.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tnftp-ruserpass.Tpo $(DEPDIR)/tnftp-ruserpass.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ruserpass.c' object='tnftp-ruserpass.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tnftp-ruserpass.obj `if test -f 'ruserpass.c'; then $(CYGPATH_W) 'ruserpass.c'; else $(CYGPATH_W) '$(srcdir)/ruserpass.c'; fi`
tnftp-util.o: util.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tnftp-util.o -MD -MP -MF $(DEPDIR)/tnftp-util.Tpo -c -o tnftp-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tnftp-util.Tpo $(DEPDIR)/tnftp-util.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='util.c' object='tnftp-util.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tnftp-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c
tnftp-util.obj: util.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tnftp-util.obj -MD -MP -MF $(DEPDIR)/tnftp-util.Tpo -c -o tnftp-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tnftp-util.Tpo $(DEPDIR)/tnftp-util.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='util.c' object='tnftp-util.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tnftp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tnftp-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi`
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
install-man1: $(man1_MANS)
@$(NORMAL_INSTALL)
test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
@list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \
{ for i in $$list; do echo "$$i"; done; \
} | while read p; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; echo "$$p"; \
done | \
sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
sed 'N;N;s,\n, ,g' | { \
list=; while read file base inst; do \
if test "$$base" = "$$inst"; then list="$$list $$file"; else \
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
fi; \
done; \
for i in $$list; do echo "$$i"; done | $(am__base_list) | \
while read files; do \
test -z "$$files" || { \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
done; }
uninstall-man1:
@$(NORMAL_UNINSTALL)
@list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \
files=`{ for i in $$list; do echo "$$i"; done; \
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
test -z "$$files" || { \
echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(man1dir)" && rm -f $$files; }
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@list='$(MANS)'; if test -n "$$list"; then \
list=`for p in $$list; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
if test -n "$$list" && \
grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \
echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \
echo " typically \`make maintainer-clean' will remove them" >&2; \
exit 1; \
else :; fi; \
else :; fi
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS) $(MANS)
installdirs:
for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am: install-man
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am: install-binPROGRAMS
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man: install-man1
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-binPROGRAMS uninstall-man
uninstall-man: uninstall-man1
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
clean-generic clean-libtool ctags distclean distclean-compile \
distclean-generic distclean-libtool distclean-tags distdir dvi \
dvi-am html html-am info info-am install install-am \
install-binPROGRAMS install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-man1 install-pdf install-pdf-am install-ps \
install-ps-am install-strip installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
uninstall-am uninstall-binPROGRAMS uninstall-man \
uninstall-man1
tnftp.1: ftp.1
cp $(srcdir)/ftp.1 tnftp.1
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,8 @@
/* $NetBSD: cmdtab.c,v 1.44 2005/04/11 01:49:31 lukem Exp $ */ /* $NetBSD: cmdtab.c,v 1.11 2009/05/20 12:53:47 lukem Exp $ */
/* from NetBSD: cmdtab.c,v 1.51 2009/04/12 10:18:52 lukem Exp */
/*- /*-
* Copyright (c) 1996-2000 The NetBSD Foundation, Inc. * Copyright (c) 1996-2009 The NetBSD Foundation, Inc.
* All rights reserved. * All rights reserved.
* *
* This code is derived from software contributed to The NetBSD Foundation * This code is derived from software contributed to The NetBSD Foundation
@ -15,13 +16,6 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * 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 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
@ -65,16 +59,23 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include "tnftp.h"
#if 0 /* tnftp */
#include <sys/cdefs.h> #include <sys/cdefs.h>
#ifndef lint #ifndef lint
#if 0 #if 0
static char sccsid[] = "@(#)cmdtab.c 8.4 (Berkeley) 10/9/94"; static char sccsid[] = "@(#)cmdtab.c 8.4 (Berkeley) 10/9/94";
#else #else
__RCSID("$NetBSD: cmdtab.c,v 1.44 2005/04/11 01:49:31 lukem Exp $"); __RCSID(" NetBSD: cmdtab.c,v 1.51 2009/04/12 10:18:52 lukem Exp ");
#endif #endif
#endif /* not lint */ #endif /* not lint */
#include <stdio.h> #include <stdio.h>
#endif /* tnftp */
#include "ftp_var.h" #include "ftp_var.h"
/* /*
@ -100,7 +101,9 @@ HSTR deletehelp[] = "delete remote file";
HSTR disconhelp[] = "terminate ftp session"; HSTR disconhelp[] = "terminate ftp session";
HSTR domachelp[] = "execute macro"; HSTR domachelp[] = "execute macro";
HSTR edithelp[] = "toggle command line editing"; HSTR edithelp[] = "toggle command line editing";
HSTR epsvhelp[] = "toggle use of EPSV/EPRT on both IPv4 and IPV6 ftp";
HSTR epsv4help[] = "toggle use of EPSV/EPRT on IPv4 ftp"; HSTR epsv4help[] = "toggle use of EPSV/EPRT on IPv4 ftp";
HSTR epsv6help[] = "toggle use of EPSV/EPRT on IPv6 ftp";
HSTR feathelp[] = "show FEATures supported by remote system"; HSTR feathelp[] = "show FEATures supported by remote system";
HSTR formhelp[] = "set file transfer format"; HSTR formhelp[] = "set file transfer format";
HSTR gatehelp[] = "toggle gate-ftp; specify host[:port] to change proxy"; HSTR gatehelp[] = "toggle gate-ftp; specify host[:port] to change proxy";
@ -211,7 +214,9 @@ struct cmd cmdtab[] = {
{ "dir", H(lshelp), 1, 1, 1, CMPL(rl) ls }, { "dir", H(lshelp), 1, 1, 1, CMPL(rl) ls },
{ "disconnect", H(disconhelp), 0, 1, 1, CMPL0 disconnect }, { "disconnect", H(disconhelp), 0, 1, 1, CMPL0 disconnect },
{ "edit", H(edithelp), 0, 0, 0, CMPL0 setedit }, { "edit", H(edithelp), 0, 0, 0, CMPL0 setedit },
{ "epsv", H(epsvhelp), 0, 0, 0, CMPL0 setepsv },
{ "epsv4", H(epsv4help), 0, 0, 0, CMPL0 setepsv4 }, { "epsv4", H(epsv4help), 0, 0, 0, CMPL0 setepsv4 },
{ "epsv6", H(epsv6help), 0, 0, 0, CMPL0 setepsv6 },
{ "exit", H(quithelp), 0, 0, 0, CMPL0 quit }, { "exit", H(quithelp), 0, 0, 0, CMPL0 quit },
{ "features", H(feathelp), 0, 1, 1, CMPL0 feat }, { "features", H(feathelp), 0, 1, 1, CMPL0 feat },
{ "fget", H(fgethelp), 1, 1, 1, CMPL(l) fget }, { "fget", H(fgethelp), 1, 1, 1, CMPL(l) fget },
@ -294,7 +299,7 @@ struct cmd cmdtab[] = {
{ "verbose", H(verbosehelp), 0, 0, 0, CMPL0 setverbose }, { "verbose", H(verbosehelp), 0, 0, 0, CMPL0 setverbose },
{ "xferbuf", H(xferbufhelp), 0, 0, 0, CMPL0 setxferbuf }, { "xferbuf", H(xferbufhelp), 0, 0, 0, CMPL0 setxferbuf },
{ "?", H(helphelp), 0, 0, 1, CMPL(C) help }, { "?", H(helphelp), 0, 0, 1, CMPL(C) help },
{ 0 }, { NULL, NULL, 0, 0, 0, CMPL0 NULL },
}; };
struct option optiontab[] = { struct option optiontab[] = {
@ -305,5 +310,5 @@ struct option optiontab[] = {
{ "pager", NULL }, { "pager", NULL },
{ "prompt", NULL }, { "prompt", NULL },
{ "rprompt", NULL }, { "rprompt", NULL },
{ 0 }, { NULL, NULL },
}; };

View File

@ -1,7 +1,8 @@
/* $NetBSD: complete.c,v 1.38 2000/05/01 10:35:17 lukem Exp $ */ /* $NetBSD: complete.c,v 1.10 2009/05/20 12:53:47 lukem Exp $ */
/* from NetBSD: complete.c,v 1.46 2009/04/12 10:18:52 lukem Exp */
/*- /*-
* Copyright (c) 1997-2000 The NetBSD Foundation, Inc. * Copyright (c) 1997-2009 The NetBSD Foundation, Inc.
* All rights reserved. * All rights reserved.
* *
* This code is derived from software contributed to The NetBSD Foundation * This code is derived from software contributed to The NetBSD Foundation
@ -15,13 +16,6 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * 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 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
@ -36,9 +30,13 @@
* POSSIBILITY OF SUCH DAMAGE. * POSSIBILITY OF SUCH DAMAGE.
*/ */
#include "tnftp.h"
#if 0 /* tnftp */
#include <sys/cdefs.h> #include <sys/cdefs.h>
#ifndef lint #ifndef lint
__RCSID("$NetBSD: complete.c,v 1.38 2000/05/01 10:35:17 lukem Exp $"); __RCSID(" NetBSD: complete.c,v 1.46 2009/04/12 10:18:52 lukem Exp ");
#endif /* not lint */ #endif /* not lint */
/* /*
@ -54,6 +52,8 @@ __RCSID("$NetBSD: complete.c,v 1.38 2000/05/01 10:35:17 lukem Exp $");
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#endif /* tnftp */
#include "ftp_var.h" #include "ftp_var.h"
#ifndef NO_EDITCOMPLETE #ifndef NO_EDITCOMPLETE
@ -68,7 +68,7 @@ static unsigned char complete_remote (char *, int);
static int static int
comparstr(const void *a, const void *b) comparstr(const void *a, const void *b)
{ {
return (strcmp(*(const char **)a, *(const char **)b)); return (strcmp(*(const char * const *)a, *(const char * const *)b));
} }
/* /*
@ -87,7 +87,7 @@ complete_ambiguous(char *word, int list, StringList *words)
{ {
char insertstr[MAXPATHLEN]; char insertstr[MAXPATHLEN];
char *lastmatch, *p; char *lastmatch, *p;
int i, j; size_t i, j;
size_t matchlen, wordlen; size_t matchlen, wordlen;
wordlen = strlen(word); wordlen = strlen(word);
@ -143,14 +143,14 @@ complete_command(char *word, int list)
size_t wordlen; size_t wordlen;
unsigned char rv; unsigned char rv;
words = xsl_init(); words = ftp_sl_init();
wordlen = strlen(word); wordlen = strlen(word);
for (c = cmdtab; c->c_name != NULL; c++) { for (c = cmdtab; c->c_name != NULL; c++) {
if (wordlen > strlen(c->c_name)) if (wordlen > strlen(c->c_name))
continue; continue;
if (strncmp(word, c->c_name, wordlen) == 0) if (strncmp(word, c->c_name, wordlen) == 0)
xsl_add(words, c->c_name); ftp_sl_add(words, ftp_strdup(c->c_name));
} }
rv = complete_ambiguous(word, list, words); rv = complete_ambiguous(word, list, words);
@ -158,7 +158,7 @@ complete_command(char *word, int list)
if (el_insertstr(el, " ") == -1) if (el_insertstr(el, " ") == -1)
rv = CC_ERROR; rv = CC_ERROR;
} }
sl_free(words, 0); sl_free(words, 1);
return (rv); return (rv);
} }
@ -200,7 +200,7 @@ complete_local(char *word, int list)
if ((dd = opendir(dir)) == NULL) if ((dd = opendir(dir)) == NULL)
return (CC_ERROR); return (CC_ERROR);
words = xsl_init(); words = ftp_sl_init();
len = strlen(file); len = strlen(file);
for (dp = readdir(dd); dp != NULL; dp = readdir(dd)) { for (dp = readdir(dd); dp != NULL; dp = readdir(dd)) {
@ -217,8 +217,8 @@ complete_local(char *word, int list)
if (strncmp(file, dp->d_name, len) == 0) { if (strncmp(file, dp->d_name, len) == 0) {
char *tcp; char *tcp;
tcp = xstrdup(dp->d_name); tcp = ftp_strdup(dp->d_name);
xsl_add(words, tcp); ftp_sl_add(words, tcp);
} }
} }
closedir(dd); closedir(dd);
@ -255,14 +255,14 @@ complete_option(char *word, int list)
size_t wordlen; size_t wordlen;
unsigned char rv; unsigned char rv;
words = xsl_init(); words = ftp_sl_init();
wordlen = strlen(word); wordlen = strlen(word);
for (o = optiontab; o->name != NULL; o++) { for (o = optiontab; o->name != NULL; o++) {
if (wordlen > strlen(o->name)) if (wordlen > strlen(o->name))
continue; continue;
if (strncmp(word, o->name, wordlen) == 0) if (strncmp(word, o->name, wordlen) == 0)
xsl_add(words, o->name); ftp_sl_add(words, ftp_strdup(o->name));
} }
rv = complete_ambiguous(word, list, words); rv = complete_ambiguous(word, list, words);
@ -270,7 +270,7 @@ complete_option(char *word, int list)
if (el_insertstr(el, " ") == -1) if (el_insertstr(el, " ") == -1)
rv = CC_ERROR; rv = CC_ERROR;
} }
sl_free(words, 0); sl_free(words, 1);
return (rv); return (rv);
} }
@ -285,10 +285,13 @@ complete_remote(char *word, int list)
StringList *words; StringList *words;
char dir[MAXPATHLEN]; char dir[MAXPATHLEN];
char *file, *cp; char *file, *cp;
int i; size_t i;
unsigned char rv; unsigned char rv;
char cmdbuf[MAX_C_NAME];
char *dummyargv[3] = { NULL, NULL, NULL };
char *dummyargv[] = { "complete", NULL, NULL }; (void)strlcpy(cmdbuf, "complete", sizeof(cmdbuf));
dummyargv[0] = cmdbuf;
dummyargv[1] = dir; dummyargv[1] = dir;
if ((file = strrchr(word, '/')) == NULL) { if ((file = strrchr(word, '/')) == NULL) {
@ -304,11 +307,11 @@ complete_remote(char *word, int list)
if (dirchange || dirlist == NULL || if (dirchange || dirlist == NULL ||
strcmp(dir, lastdir) != 0) { /* dir not cached */ strcmp(dir, lastdir) != 0) { /* dir not cached */
char *emesg; const char *emesg;
if (dirlist != NULL) if (dirlist != NULL)
sl_free(dirlist, 1); sl_free(dirlist, 1);
dirlist = xsl_init(); dirlist = ftp_sl_init();
mflag = 1; mflag = 1;
emesg = NULL; emesg = NULL;
@ -326,8 +329,8 @@ complete_remote(char *word, int list)
tcp++; tcp++;
else else
tcp = cp; tcp = cp;
tcp = xstrdup(tcp); tcp = ftp_strdup(tcp);
xsl_add(dirlist, tcp); ftp_sl_add(dirlist, tcp);
} }
if (emesg != NULL) { if (emesg != NULL) {
fprintf(ttyout, "\n%s\n", emesg); fprintf(ttyout, "\n%s\n", emesg);
@ -337,13 +340,13 @@ complete_remote(char *word, int list)
dirchange = 0; dirchange = 0;
} }
words = xsl_init(); words = ftp_sl_init();
for (i = 0; i < dirlist->sl_cur; i++) { for (i = 0; i < dirlist->sl_cur; i++) {
cp = dirlist->sl_str[i]; cp = dirlist->sl_str[i];
if (strlen(file) > strlen(cp)) if (strlen(file) > strlen(cp))
continue; continue;
if (strncmp(file, cp, strlen(file)) == 0) if (strncmp(file, cp, strlen(file)) == 0)
xsl_add(words, cp); ftp_sl_add(words, cp);
} }
rv = complete_ambiguous(file, list, words); rv = complete_ambiguous(file, list, words);
sl_free(words, 0); sl_free(words, 0);
@ -354,17 +357,17 @@ complete_remote(char *word, int list)
* Generic complete routine * Generic complete routine
*/ */
unsigned char unsigned char
complete(EditLine *el, int ch) complete(EditLine *cel, int ch)
{ {
static char word[FTPBUFLEN]; static char word[FTPBUFLEN];
static int lastc_argc, lastc_argo; static size_t lastc_argc, lastc_argo;
struct cmd *c; struct cmd *c;
const LineInfo *lf; const LineInfo *lf;
int celems, dolist, cmpltype; int dolist, cmpltype;
size_t len; size_t celems, len;
lf = el_line(el); lf = el_line(cel);
len = lf->lastchar - lf->buffer; len = lf->lastchar - lf->buffer;
if (len >= sizeof(line)) if (len >= sizeof(line))
return (CC_ERROR); return (CC_ERROR);
@ -383,7 +386,7 @@ complete(EditLine *el, int ch)
&& strncmp(word, margv[cursor_argc] ? margv[cursor_argc] : "", && strncmp(word, margv[cursor_argc] ? margv[cursor_argc] : "",
cursor_argo) == 0) cursor_argo) == 0)
dolist = 1; dolist = 1;
else if (cursor_argc < margc) else if (cursor_argc < (size_t)margc)
(void)strlcpy(word, margv[cursor_argc], cursor_argo + 1); (void)strlcpy(word, margv[cursor_argc], cursor_argo + 1);
word[cursor_argo] = '\0'; word[cursor_argo] = '\0';
@ -426,7 +429,8 @@ complete(EditLine *el, int ch)
} }
return (complete_remote(word, dolist)); return (complete_remote(word, dolist));
default: default:
errx(1, "unknown complete type `%c'", cmpltype); errx(1, "complete: unknown complete type `%c'",
cmpltype);
return (CC_ERROR); return (CC_ERROR);
} }
/* NOTREACHED */ /* NOTREACHED */

View File

@ -1,4 +1,5 @@
/* $NetBSD: domacro.c,v 1.20 2003/08/07 11:13:53 agc Exp $ */ /* $NetBSD: domacro.c,v 1.8 2009/05/20 12:53:47 lukem Exp $ */
/* from NetBSD: domacro.c,v 1.22 2009/04/12 10:18:52 lukem Exp */
/* /*
* Copyright (c) 1985, 1993, 1994 * Copyright (c) 1985, 1993, 1994
@ -29,12 +30,16 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include "tnftp.h"
#if 0 /* tnftp */
#include <sys/cdefs.h> #include <sys/cdefs.h>
#ifndef lint #ifndef lint
#if 0 #if 0
static char sccsid[] = "@(#)domacro.c 8.3 (Berkeley) 4/2/94"; static char sccsid[] = "@(#)domacro.c 8.3 (Berkeley) 4/2/94";
#else #else
__RCSID("$NetBSD: domacro.c,v 1.20 2003/08/07 11:13:53 agc Exp $"); __RCSID(" NetBSD: domacro.c,v 1.22 2009/04/12 10:18:52 lukem Exp ");
#endif #endif
#endif /* not lint */ #endif /* not lint */
@ -42,6 +47,8 @@ __RCSID("$NetBSD: domacro.c,v 1.20 2003/08/07 11:13:53 agc Exp $");
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#endif /* tnftp */
#include "ftp_var.h" #include "ftp_var.h"
void void
@ -50,10 +57,11 @@ domacro(int argc, char *argv[])
int i, j, count = 2, loopflg = 0; int i, j, count = 2, loopflg = 0;
char *cp1, *cp2, line2[FTPBUFLEN]; char *cp1, *cp2, line2[FTPBUFLEN];
struct cmd *c; struct cmd *c;
char cmdbuf[MAX_C_NAME];
if ((argc == 0 && argv != NULL) || if ((argc == 0 && argv != NULL) ||
(argc < 2 && !another(&argc, &argv, "macro name"))) { (argc < 2 && !another(&argc, &argv, "macro name"))) {
fprintf(ttyout, "usage: %s macro_name [args]\n", argv[0]); UPRINTF("usage: %s macro_name [args]\n", argv[0]);
code = -1; code = -1;
return; return;
} }
@ -126,7 +134,8 @@ domacro(int argc, char *argv[])
fputs(line, ttyout); fputs(line, ttyout);
putc('\n', ttyout); putc('\n', ttyout);
} }
margv[0] = c->c_name; (void)strlcpy(cmdbuf, c->c_name, sizeof(cmdbuf));
margv[0] = cmdbuf;
(*c->c_handler)(margc, margv); (*c->c_handler)(margc, margv);
if (bell && c->c_bell) if (bell && c->c_bell)
(void)putc('\007', ttyout); (void)putc('\007', ttyout);

View File

@ -1,7 +1,8 @@
/* $NetBSD: extern.h,v 1.67 2005/05/14 15:26:43 lukem Exp $ */ /* $NetBSD: extern.h,v 1.12 2009/11/15 10:12:37 lukem Exp $ */
/* from NetBSD: extern.h,v 1.77 2009/07/13 19:05:41 roy Exp */
/*- /*-
* Copyright (c) 1996-2005 The NetBSD Foundation, Inc. * Copyright (c) 1996-2009 The NetBSD Foundation, Inc.
* All rights reserved. * All rights reserved.
* *
* This code is derived from software contributed to The NetBSD Foundation * This code is derived from software contributed to The NetBSD Foundation
@ -15,13 +16,6 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * 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 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
@ -118,7 +112,7 @@ void cmdabort(int);
void cmdtimeout(int); void cmdtimeout(int);
void cmdscanner(void); void cmdscanner(void);
int command(const char *, ...) int command(const char *, ...)
__attribute__((__format__(__printf__, 1, 2))); ;
#ifndef NO_EDITCOMPLETE #ifndef NO_EDITCOMPLETE
unsigned char complete(EditLine *, int); unsigned char complete(EditLine *, int);
void controlediting(void); void controlediting(void);
@ -141,6 +135,7 @@ int ftp_login(const char *, const char *, const char *);
void get(int, char **); void get(int, char **);
struct cmd *getcmd(const char *); struct cmd *getcmd(const char *);
int getit(int, char **, int, const char *); int getit(int, char **, int, const char *);
int get_line(FILE *, char *, size_t, const char **);
struct option *getoption(const char *); struct option *getoption(const char *);
char *getoptionvalue(const char *); char *getoptionvalue(const char *);
void getremoteinfo(void); void getremoteinfo(void);
@ -148,7 +143,7 @@ int getreply(int);
char *globulize(const char *); char *globulize(const char *);
char *gunique(const char *); char *gunique(const char *);
void help(int, char **); void help(int, char **);
char *hookup(char *, char *); char *hookup(const char *, const char *);
void idlecmd(int, char **); void idlecmd(int, char **);
int initconn(void); int initconn(void);
void intr(int); void intr(int);
@ -159,22 +154,19 @@ void lostpeer(int);
void lpage(int, char **); void lpage(int, char **);
void lpwd(int, char **); void lpwd(int, char **);
void ls(int, char **); void ls(int, char **);
void mabort(void);
void macdef(int, char **); void macdef(int, char **);
void makeargv(void); void makeargv(void);
void makedir(int, char **); void makedir(int, char **);
void mdelete(int, char **); void mdelete(int, char **);
void mget(int, char **); void mget(int, char **);
void mintr(int);
void mls(int, char **); void mls(int, char **);
void mlst(int, char **); void mlst(int, char **);
void modtime(int, char **); void modtime(int, char **);
void mput(int, char **); void mput(int, char **);
char *onoff(int); const char *onoff(int);
void opts(int, char **); void opts(int, char **);
void newer(int, char **); void newer(int, char **);
void page(int, char **); void page(int, char **);
int parseport(const char *, int);
int parserate(int, char **, int); int parserate(int, char **, int);
char *prompt(void); char *prompt(void);
void proxabort(int); void proxabort(int);
@ -189,18 +181,18 @@ void quote1(const char *, int, char **);
void recvrequest(const char *, const char *, const char *, void recvrequest(const char *, const char *, const char *,
const char *, int, int); const char *, int, int);
void reget(int, char **); void reget(int, char **);
char *remglob(char **, int, char **); char *remglob(char **, int, const char **);
time_t remotemodtime(const char *, int); time_t remotemodtime(const char *, int);
off_t remotesize(const char *, int); off_t remotesize(const char *, int);
void removedir(int, char **); void removedir(int, char **);
void renamefile(int, char **); void renamefile(int, char **);
void reset(int, char **); void reset(int, char **);
void restart(int, char **); void restart(int, char **);
const char *rfc2822time(const struct tm *);
void rmthelp(int, char **); void rmthelp(int, char **);
void rmtstatus(int, char **); void rmtstatus(int, char **);
char *rprompt(void); char *rprompt(void);
int ruserpass(const char *, const char **, const char **, int ruserpass(const char *, char **, char **, char **);
const char **);
void sendrequest(const char *, const char *, const char *, int); void sendrequest(const char *, const char *, const char *, int);
void setascii(int, char **); void setascii(int, char **);
void setbell(int, char **); void setbell(int, char **);
@ -210,6 +202,8 @@ void setcr(int, char **);
void setdebug(int, char **); void setdebug(int, char **);
void setedit(int, char **); void setedit(int, char **);
void setepsv4(int, char **); void setepsv4(int, char **);
void setepsv6(int, char **);
void setepsv(int, char **);
void setform(int, char **); void setform(int, char **);
void setftmode(int, char **); void setftmode(int, char **);
void setgate(int, char **); void setgate(int, char **);
@ -235,6 +229,7 @@ void settype(int, char **);
void setupsockbufsize(int); void setupsockbufsize(int);
void setverbose(int, char **); void setverbose(int, char **);
void setxferbuf(int, char **); void setxferbuf(int, char **);
void set_option(const char *, const char *, int);
void shell(int, char **); void shell(int, char **);
void site(int, char **); void site(int, char **);
void sizecmd(int, char **); void sizecmd(int, char **);
@ -248,10 +243,10 @@ void updatelocalcwd(void);
void updateremotecwd(void); void updateremotecwd(void);
void usage(void); void usage(void);
void user(int, char **); void user(int, char **);
int xconnect(int, const struct sockaddr *, socklen_t); int ftp_connect(int, const struct sockaddr *, socklen_t);
int xlisten(int, int); int ftp_listen(int, int);
int xpoll(struct pollfd *, int, int); int ftp_poll(struct pollfd *, int, int);
void *xmalloc(size_t); void *ftp_malloc(size_t);
StringList *xsl_init(void); StringList *ftp_sl_init(void);
void xsl_add(StringList *, char *); void ftp_sl_add(StringList *, char *);
char *xstrdup(const char *); char *ftp_strdup(const char *);

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,7 @@
.\" $NetBSD: ftp.1,v 1.109 2005/02/20 20:54:01 wiz Exp $ .\" $NetBSD: ftp.1,v 1.13 2009/11/15 10:12:37 lukem Exp $
.\" from NetBSD: ftp.1,v 1.130 2009/07/11 18:35:48 joerg Exp
.\" .\"
.\" Copyright (c) 1996-2004 The NetBSD Foundation, Inc. .\" Copyright (c) 1996-2008 The NetBSD Foundation, Inc.
.\" All rights reserved. .\" All rights reserved.
.\" .\"
.\" This code is derived from software contributed to The NetBSD Foundation .\" This code is derived from software contributed to The NetBSD Foundation
@ -14,13 +15,6 @@
.\" 2. Redistributions in binary form must reproduce the above copyright .\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the .\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution. .\" 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 .\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED .\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
@ -64,16 +58,15 @@
.\" .\"
.\" @(#)ftp.1 8.3 (Berkeley) 10/9/94 .\" @(#)ftp.1 8.3 (Berkeley) 10/9/94
.\" .\"
.Dd January 15, 2005 .Dd May 10, 2008
.Dt FTP 1 .Dt FTP 1
.Os .Os
.Sh NAME .Sh NAME
.Nm ftp .Nm ftp
.Nd .Nd Internet file transfer program
Internet file transfer program
.Sh SYNOPSIS .Sh SYNOPSIS
.Nm .Nm
.Op Fl 46AadefginpRtvV .Op Fl 46AadefginpRtVv
.Bk -words .Bk -words
.Op Fl N Ar netrc .Op Fl N Ar netrc
.Ek .Ek
@ -89,6 +82,7 @@ Internet file transfer program
.Bk -words .Bk -words
.Op Fl r Ar retry .Op Fl r Ar retry
.Ek .Ek
.Op Fl s Ar srcaddr
.Bk -words .Bk -words
.\" [-T dir,max[,inc]] .\" [-T dir,max[,inc]]
.Oo .Oo
@ -179,7 +173,7 @@ below for more information.
.Pp .Pp
Options may be specified at the command line, or to the Options may be specified at the command line, or to the
command interpreter. command interpreter.
.Bl -tag -width "port " .Bl -tag -width Fl
.It Fl 4 .It Fl 4
Forces Forces
.Nm .Nm
@ -219,6 +213,14 @@ Disables file name globbing.
.It Fl i .It Fl i
Turns off interactive prompting during Turns off interactive prompting during
multiple file transfers. multiple file transfers.
.It Fl N Ar netrc
Use
.Ar netrc
instead of
.Pa ~/.netrc .
Refer to
.Sx THE .netrc FILE
for more information.
.It Fl n .It Fl n
Restrains Restrains
.Nm .Nm
@ -238,14 +240,6 @@ identity on the local machine), and, if necessary, prompt for a password
and an account with which to login. and an account with which to login.
To override the auto-login for auto-fetch transfers, specify the To override the auto-login for auto-fetch transfers, specify the
username (and optionally, password) as appropriate. username (and optionally, password) as appropriate.
.It Fl N Ar netrc
Use
.Ar netrc
instead of
.Pa ~/.netrc .
Refer to
.Sx THE .netrc FILE
for more information.
.It Fl o Ar output .It Fl o Ar output
When auto-fetching files, save the contents in When auto-fetching files, save the contents in
.Ar output . .Ar output .
@ -263,35 +257,32 @@ then only the first file specified will be retrieved into
.Ar output ; .Ar output ;
all other files will be retrieved into the basename of their all other files will be retrieved into the basename of their
remote name. remote name.
.It Fl P Ar port
Sets the port number to
.Ar port .
.It Fl p .It Fl p
Enable passive mode operation for use behind connection filtering firewalls. Enable passive mode operation for use behind connection filtering firewalls.
This option has been deprecated as This option has been deprecated as
.Nm .Nm
now tries to use passive mode by default, falling back to active mode now tries to use passive mode by default, falling back to active mode
if the server does not support passive connections. if the server does not support passive connections.
.It Fl P Ar port
Sets the port number to
.Ar port .
.It Fl r Ar wait
Retry the connection attempt if it failed, pausing for
.Ar wait
seconds.
.It Fl q Ar quittime .It Fl q Ar quittime
Quit if the connection has stalled for Quit if the connection has stalled for
.Ar quittime .Ar quittime
seconds. seconds.
.It Fl R .It Fl R
Restart all non-proxied auto-fetches. Restart all non-proxied auto-fetches.
.It Fl r Ar wait
Retry the connection attempt if it failed, pausing for
.Ar wait
seconds.
.It Fl s Ar srcaddr
Uses
.Ar srcaddr
as the local IP address for all connections.
.It Fl t .It Fl t
Enables packet tracing. Enables packet tracing.
.It Xo .It Fl T Ar direction Ns , Ns Ar maximum Ns Oo , Ns Ar increment Oc
.Fl T
.Sm off
.Ar direction ,
.Ar maximum
.Op , Ar increment
.Sm on
.Xc
Set the maximum transfer rate for Set the maximum transfer rate for
.Ar direction .Ar direction
to to
@ -312,6 +303,12 @@ is one of the ftp URL types as supported by auto-fetch
(with an optional target filename for single file uploads), and (with an optional target filename for single file uploads), and
.Ar file .Ar file
is one or more local files to be uploaded. is one or more local files to be uploaded.
.It Fl V
Disable
.Ic verbose
and
.Ic progress ,
overriding the default of enabled when output is to a terminal.
.It Fl v .It Fl v
Enable Enable
.Ic verbose .Ic verbose
@ -325,12 +322,6 @@ Forces
.Nm .Nm
to show all responses from the remote server, as well to show all responses from the remote server, as well
as report on data transfer statistics. as report on data transfer statistics.
.It Fl V
Disable
.Ic verbose
and
.Ic progress ,
overriding the default of enabled when output is to a terminal.
.El .El
.Pp .Pp
The client host with which The client host with which
@ -351,8 +342,8 @@ is awaiting commands from the user the prompt
is provided to the user. is provided to the user.
The following commands are recognized The following commands are recognized
by by
.Nm ftp : .Nm ftp :
.Bl -tag -width Fl .Bl -tag -width Ic
.It Ic \&! Op Ar command Op Ar args .It Ic \&! Op Ar command Op Ar args
Invoke an interactive shell on the local machine. Invoke an interactive shell on the local machine.
If there are arguments, the first is taken to be a command to execute If there are arguments, the first is taken to be a command to execute
@ -455,16 +446,6 @@ when an ascii type transfer is made, these linefeeds may be
distinguished from a record delimiter only when distinguished from a record delimiter only when
.Ic \&cr .Ic \&cr
is off. is off.
.It Ic debug Op Ar debug-value
Toggle debugging mode.
If an optional
.Ar debug-value
is specified it is used to set the debugging level.
When debugging is on,
.Nm
prints each command sent to the remote machine, preceded
by the string
.Ql \-\-\*[Gt]
.It Ic delete Ar remote-file .It Ic delete Ar remote-file
Delete the file Delete the file
.Ar remote-file .Ar remote-file
@ -500,12 +481,13 @@ Toggle command line editing, and context sensitive command and file
completion. completion.
This is automatically enabled if input is from a terminal, and This is automatically enabled if input is from a terminal, and
disabled otherwise. disabled otherwise.
.It Ic epsv4 .It Ic epsv epsv4 epsv6
Toggle the use of the extended Toggle the use of the extended
.Dv EPSV .Dv EPSV
and and
.Dv EPRT .Dv EPRT
commands on IPv4 connections; first try commands on all IP, IPv4, and IPv6 connections respectively.
First try
.Dv EPSV / .Dv EPSV /
.Dv EPRT , .Dv EPRT ,
and then and then
@ -514,7 +496,10 @@ and then
This is enabled by default. This is enabled by default.
If an extended command fails then this option will be temporarily If an extended command fails then this option will be temporarily
disabled for the duration of the current connection, or until disabled for the duration of the current connection, or until
.Ic epsv4 .Ic epsv ,
.Ic epsv4 ,
or
.Ic epsv6
is executed again. is executed again.
.It Ic exit .It Ic exit
A synonym for A synonym for
@ -538,6 +523,16 @@ format is
.It Ic ftp Ar host Op Ar port .It Ic ftp Ar host Op Ar port
A synonym for A synonym for
.Ic open . .Ic open .
.It Ic ftp_debug Op Ar ftp_debug-value
Toggle debugging mode.
If an optional
.Ar ftp_debug-value
is specified it is used to set the debugging level.
When debugging is on,
.Nm
prints each command sent to the remote machine, preceded
by the string
.Ql \-\-\*[Gt] .
.It Ic gate Op Ar host Op Ar port .It Ic gate Op Ar host Op Ar port
Toggle gate-ftp mode, which used to connect through the Toggle gate-ftp mode, which used to connect through the
TIS FWTK and Gauntlet ftp proxies. TIS FWTK and Gauntlet ftp proxies.
@ -613,8 +608,9 @@ transferring a
.Xr tar 1 .Xr tar 1
archive of the subtree (in binary mode). archive of the subtree (in binary mode).
.It Ic hash Op Ar size .It Ic hash Op Ar size
Toggle hash-sign (``#'') printing for each data block Toggle hash-sign
transferred. .Pq Sq #
printing for each data block transferred.
The size of a data block defaults to 1024 bytes. The size of a data block defaults to 1024 bytes.
This can be changed by specifying This can be changed by specifying
.Ar size .Ar size
@ -663,24 +659,49 @@ A synonym for
Define a macro. Define a macro.
Subsequent lines are stored as the macro Subsequent lines are stored as the macro
.Ar macro-name ; .Ar macro-name ;
a null line (consecutive newline characters a null line (consecutive newline characters in a file or carriage
in a file or returns from the terminal) terminates macro input mode.
carriage returns from the terminal) terminates macro input mode.
There is a limit of 16 macros and 4096 total characters in all There is a limit of 16 macros and 4096 total characters in all
defined macros. defined macros.
Macros remain defined until a Macro names can be a maximum of 8 characters.
Macros are only applicable to the current session they are
defined within (or if defined outside a session, to the session
invoked with the next
.Ic open
command), and remain defined until a
.Ic close .Ic close
command is executed. command is executed.
The macro processor interprets `$' and `\e' as special characters. To invoke a macro, use the
A `$' followed by a number (or numbers) is replaced by the .Ic $
command (see above).
.Pp
The macro processor interprets
.Sq $
and
.Sq \e
as special characters.
A
.Sq $
followed by a number (or numbers) is replaced by the
corresponding argument on the macro invocation command line. corresponding argument on the macro invocation command line.
A `$' followed by an `i' signals that macro processor that the A
executing macro is to be looped. .Sq $
On the first pass `$i' is followed by an
replaced by the first argument on the macro invocation command line, .Sq i
on the second pass it is replaced by the second argument, and so on. signals the macro processor that the executing macro is to be
A `\e' followed by any character is replaced by that character. looped.
Use the `\e' to prevent special treatment of the `$'. On the first pass
.Dq $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
.Sq \e
followed by any character is replaced by that character.
Use the
.Sq \e
to prevent special treatment of the
.Sq $ .
.It Ic mdelete Op Ar remote-files .It Ic mdelete Op Ar remote-files
Delete the Delete the
.Ar remote-files .Ar remote-files
@ -756,7 +777,9 @@ The default (and only supported)
mode is mode is
.Dq stream . .Dq stream .
.It Ic modtime Ar remote-file .It Ic modtime Ar remote-file
Show the last modification time of the file on the remote machine. Show the last modification time of the file on the remote machine, in
.Li RFC2822
format.
.It Ic more Ar file .It Ic more Ar file
A synonym for A synonym for
.Ic page . .Ic page .
@ -823,9 +846,18 @@ and
.Ic case .Ic case
settings). settings).
Variable templating is accomplished by including the Variable templating is accomplished by including the
sequences `$1', `$2', ..., `$9' in sequences
.Dq $1 ,
.Dq $2 ,
\&...
.Dq $9
in
.Ar inpattern . .Ar inpattern .
Use `\\' to prevent this special treatment of the `$' character. Use
.Sq \e
to prevent this special treatment of the
.Sq $
character.
All other characters are treated literally, and are used to determine the All other characters are treated literally, and are used to determine the
.Ic nmap .Ic nmap
.Op Ar inpattern .Op Ar inpattern
@ -837,13 +869,19 @@ $1.$2 and the remote file name "mydata.data", $1 would have the value
The The
.Ar outpattern .Ar outpattern
determines the resulting mapped filename. determines the resulting mapped filename.
The sequences `$1', `$2', ...., `$9' are replaced by any value resulting The sequences
from the .Dq $1 ,
.Dq $2 ,
\&...
.Dq $9
are replaced by any value resulting from the
.Ar inpattern .Ar inpattern
template. template.
The sequence `$0' is replace by the original filename. The sequence
.Dq $0
is replaced by the original filename.
Additionally, the sequence Additionally, the sequence
.Ql Op Ar seq1 , Ar seq2 .Dq Op Ar seq1 , Ar seq2
is replaced by is replaced by
.Op Ar seq1 .Op Ar seq1
if if
@ -862,9 +900,18 @@ the output filename "myfile.data" for input filenames "myfile.data" and
"myfile.myfile" for the input filename ".myfile". "myfile.myfile" for the input filename ".myfile".
Spaces may be included in Spaces may be included in
.Ar outpattern , .Ar outpattern ,
as in the example: `nmap $1 sed "s/ *$//" \*[Gt] $1' . as in the example:
Use the `\e' character to prevent special treatment .Dl nmap $1 sed "s/ *$//" \*[Gt] $1
of the `$','[',']', and `,' characters. Use the
.Sq \e
character to prevent special treatment
of the
.Sq $ ,
.Sq \&[ ,
.Sq \&] ,
and
.Sq \&,
characters.
.It Ic ntrans Op Ar inchars Op Ar outchars .It Ic ntrans Op Ar inchars Op Ar outchars
Set or unset the filename character translation mechanism. Set or unset the filename character translation mechanism.
If no arguments are specified, the filename character If no arguments are specified, the filename character
@ -952,7 +999,7 @@ traffic.
servers are required to support the servers are required to support the
.Dv PASV .Dv PASV
command by command by
.Li RFC 1123 , .Li RFC1123 ,
some do not.) some do not.)
.It Ic pdir Op Ar remote-path .It Ic pdir Op Ar remote-path
Perform Perform
@ -1100,10 +1147,7 @@ A synonym for
The arguments specified are sent, verbatim, to the remote The arguments specified are sent, verbatim, to the remote
.Tn FTP .Tn FTP
server. server.
.It Xo .It Ic rate Ar direction Oo Ar maximum Oo Ar increment Oc Oc
.Ic rate Ar direction
.Op Ar maximum Op Ar increment
.Xc
Throttle the maximum transfer rate to Throttle the maximum transfer rate to
.Ar maximum .Ar maximum
bytes/second. bytes/second.
@ -1126,7 +1170,6 @@ Outgoing transfers.
can be modified on the fly by can be modified on the fly by
.Ar increment .Ar increment
bytes (default: 1024) each time a given signal is received: bytes (default: 1024) each time a given signal is received:
.B
.Bl -tag -width "SIGUSR1" -offset indent .Bl -tag -width "SIGUSR1" -offset indent
.It Dv SIGUSR1 .It Dv SIGUSR1
Increment Increment
@ -1388,10 +1431,7 @@ for more information.
.It Ic usage Ar command .It Ic usage Ar command
Print the usage message for Print the usage message for
.Ar command . .Ar command .
.It Xo .It Ic user Ar user-name Oo Ar password Oo Ar account Oc Oc
.Ic user Ar user-name
.Op Ar password Op Ar account
.Xc
Identify yourself to the remote Identify yourself to the remote
.Tn FTP .Tn FTP
server. server.
@ -1439,7 +1479,9 @@ A synonym for
.El .El
.Pp .Pp
Command arguments which have embedded spaces may be quoted with Command arguments which have embedded spaces may be quoted with
quote `"' marks. quote
.Sq \&"
marks.
.Pp .Pp
Commands which toggle settings can take an explicit Commands which toggle settings can take an explicit
.Ic on .Ic on
@ -1491,14 +1533,8 @@ on the command line.
The following formats are valid syntax for an auto-fetch element: The following formats are valid syntax for an auto-fetch element:
.Bl -tag -width "FOO " .Bl -tag -width "FOO "
.\" [user@]host:[path][/] .\" [user@]host:[path][/]
.It Xo .It Oo Ar user Ns Li \&@ Oc Ns Ar host Ns Li \&: Ns Oo Ar path Oc \
.Sm off Ns Oo Li / Oc
.Op Ar user Li \&@
.Ar host Li \&:
.Op Ar path
.Op Li /
.Sm on
.Xc
.Dq Classic .Dq Classic
.Tn FTP .Tn FTP
format. format.
@ -1523,18 +1559,9 @@ in the current directory.
Otherwise, the full remote name is used as the local name, Otherwise, the full remote name is used as the local name,
relative to the local root directory. relative to the local root directory.
.\" ftp://[user[:password]@]host[:port]/path[/][;type=X] .\" ftp://[user[:password]@]host[:port]/path[/][;type=X]
.It Xo .It Li ftp:// Ns Oo Ar user Ns Oo Ns Li \&: Ns Ar password Oc Ns Li \&@ Oc \
.Sm off Ns Ar host Ns Oo Li \&: Ns Ar port Oc Ns Li / Ns Ar path Ns Oo Li / Oc \
.Li ftp:// Ns Oo Li ;type= Ns Ar X Oc
.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 An
.Tn FTP .Tn FTP
URL, retrieved using the URL, retrieved using the
@ -1565,7 +1592,7 @@ ascii or binary (respectively).
The default transfer type is binary. The default transfer type is binary.
.Pp .Pp
In order to be compliant with In order to be compliant with
.Li RFC 1738 , .Li RFC3986 ,
.Nm .Nm
interprets the interprets the
.Ar path .Ar path
@ -1618,7 +1645,7 @@ Any
.Sq Li \&% Ns Ar XX .Sq Li \&% Ns Ar XX
codes codes
(per (per
.Li RFC 1738 ) .Li RFC3986 )
within the path components are decoded, with within the path components are decoded, with
.Ar XX .Ar XX
representing a character code in hexadecimal. representing a character code in hexadecimal.
@ -1705,16 +1732,8 @@ intermediate directories that is used in the equivalent of a
command. command.
.El .El
.\" http://[user[:password]@]host[:port]/path .\" http://[user[:password]@]host[:port]/path
.It Xo .It Li http:// Ns Oo Ar user Ns Oo Li \&: Ns Ar password Oc Ns Li \&@ Oc \
.Sm off Ns Ar host Ns Oo Li \&: Ns Ar port Oc Ns Li / Ns Ar path
.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 An
.Tn HTTP .Tn HTTP
URL, retrieved using the URL, retrieved using the
@ -1735,14 +1754,25 @@ and
.Sq password ) .Sq password )
is in the URL, use them for the first attempt to authenticate. is in the URL, use them for the first attempt to authenticate.
.\" file:///path .\" file:///path
.It Xo .It Li file:/// Ns Ar path
.Sm off
.Li file:/// Ar path
.Sm on
.Xc
A local URL, copied from A local URL, copied from
.Pa / Ns Ar path .Pa / Ns Ar path
on the local host. on the local host.
.\" about:
.It Li about: Ns Ar topic
Display information regarding
.Ar topic ;
no file is retrieved for this auto-fetched element.
Supported values include:
.Bl -tag -width "about:version"
.It Li about:ftp
Information about
.Nm ftp .
.It Li about:version
The version of
.Nm ftp .
Useful to provide when reporting problems.
.El
.El .El
.Pp .Pp
Unless noted otherwise above, and Unless noted otherwise above, and
@ -1868,11 +1898,12 @@ A particularly
useful example of this mechanism is: useful example of this mechanism is:
.Dq Li dir \&"\&" \&|more . .Dq Li dir \&"\&" \&|more .
.It .It
Failing the above checks, if ``globbing'' is enabled, Failing the above checks, if
local file names are expanded .Dq globbing
according to the rules used in the is enabled, local file names are expanded according to the rules
used in the
.Xr csh 1 ; .Xr csh 1 ;
c.f. the see the
.Ic glob .Ic glob
command. command.
If the If the
@ -2038,6 +2069,20 @@ next
.Pa .netrc .Pa .netrc
line and continue until a blank line (consecutive new-line line and continue until a blank line (consecutive new-line
characters) is encountered. characters) is encountered.
Like the other tokens in the
.Pa .netrc
file, a
.Ic macdef
is applicable only to the
.Ic machine
definition preceding it.
A
.Ic macdef
entry cannot be used by multiple
.Ic machine
definitions; rather, it must be defined following each
.Ic machine
it is intended to be used with.
If a macro named If a macro named
.Ic init .Ic init
is defined, it is automatically executed as the last step in the is defined, it is automatically executed as the last step in the
@ -2100,14 +2145,7 @@ information:
.It Li \&%/ .It Li \&%/
The current remote working directory. The current remote working directory.
.\" %c[[0]n], %.[[0]n] .\" %c[[0]n], %.[[0]n]
.It Xo .It \&%c Ns Oo Oo Li 0 Oc Ns Ar n Oc , Ns Li \&%. Ns Oo Oo Li 0 Oc Ns Ar n Oc
.Sm off
.Li \&%c
.Op Oo Li 0 Oc Ar n Ns ,
.Li \&%.
.Op Oo Li 0 Oc Ar n
.Sm on
.Xc
The trailing component of the current remote working directory, or The trailing component of the current remote working directory, or
.Em n .Em n
trailing components if a digit trailing components if a digit
@ -2248,7 +2286,7 @@ URL characters are required in the username or password
or or
.Sq / ) , .Sq / ) ,
encode them with encode them with
.Li RFC 1738 .Li RFC3986
.Sq Li \&% Ns Ar XX .Sq Li \&% Ns Ar XX
encoding. encoding.
.Pp .Pp
@ -2291,16 +2329,27 @@ for an example of how to make this automatic.
.Xr ftpd 8 .Xr ftpd 8
.Sh STANDARDS .Sh STANDARDS
.Nm .Nm
attempts to be compliant with attempts to be compliant with:
.Li RFC 959 , .Bl -tag -offset indent -width 8n
.Li RFC 1123 , .It Li RFC0959
.Li RFC 1738 , .Em File Transfer Protocol
.Li RFC 2068 , .It Li RFC1123
.Li RFC 2389 , .Em Requirements for Internet Hosts - Application and Support
.Li RFC 2428 , .It Li RFC1635
.Li RFC 2732 , .Em How to Use Anonymous FTP
and .It Li RFC2389
.Cm draft-ietf-ftpext-mlst-11 . .Em Feature negotiation mechanism for the File Transfer Protocol
.It Li RFC2428
.Em FTP Extensions for IPv6 and NATs
.It Li RFC2616
.Em Hypertext Transfer Protocol -- HTTP/1.1
.It Li RFC2822
.Em Internet Message Format
.It Li RFC3659
.Em Extensions to FTP
.It Li RFC3986
.Em Uniform Resource Identifier (URI)
.El
.Sh HISTORY .Sh HISTORY
The The
.Nm .Nm

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,8 @@
/* $NetBSD: ftp_var.h,v 1.71 2005/04/11 01:49:31 lukem Exp $ */ /* $NetBSD: ftp_var.h,v 1.10 2009/05/20 12:53:47 lukem Exp $ */
/* from NetBSD: ftp_var.h,v 1.81 2009/04/12 10:18:52 lukem Exp */
/*- /*-
* Copyright (c) 1996-2005 The NetBSD Foundation, Inc. * Copyright (c) 1996-2009 The NetBSD Foundation, Inc.
* All rights reserved. * All rights reserved.
* *
* This code is derived from software contributed to The NetBSD Foundation * This code is derived from software contributed to The NetBSD Foundation
@ -15,13 +16,6 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * 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 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
@ -107,6 +101,8 @@
#define NO_PROGRESS #define NO_PROGRESS
#endif #endif
#if 0 /* tnftp */
#include <sys/param.h> #include <sys/param.h>
#include <netinet/in.h> #include <netinet/in.h>
@ -117,6 +113,8 @@
#include <setjmp.h> #include <setjmp.h>
#include <stringlist.h> #include <stringlist.h>
#endif /* tnftp */
#ifndef NO_EDITCOMPLETE #ifndef NO_EDITCOMPLETE
#include <histedit.h> #include <histedit.h>
#endif /* !NO_EDITCOMPLETE */ #endif /* !NO_EDITCOMPLETE */
@ -128,7 +126,7 @@
* Format of command table. * Format of command table.
*/ */
struct cmd { struct cmd {
char *c_name; /* name of command */ const char *c_name; /* name of command */
const char *c_help; /* help string */ const char *c_help; /* help string */
char c_bell; /* give bell when command completes */ char c_bell; /* give bell when command completes */
char c_conn; /* must be connected to use command */ char c_conn; /* must be connected to use command */
@ -139,6 +137,8 @@ struct cmd {
void (*c_handler)(int, char **); /* function to call */ void (*c_handler)(int, char **); /* function to call */
}; };
#define MAX_C_NAME 12 /* maximum length of cmd.c_name */
/* /*
* Format of macro table * Format of macro table
*/ */
@ -152,8 +152,8 @@ struct macel {
* Format of option table * Format of option table
*/ */
struct option { struct option {
char *name; const char *name;
char *value; char *value;
}; };
/* /*
@ -210,14 +210,14 @@ GLOBAL int sendport; /* use PORT/LPRT cmd for each data connection */
GLOBAL int connected; /* 1 = connected to server, -1 = logged in */ GLOBAL int connected; /* 1 = connected to server, -1 = logged in */
GLOBAL int interactive; /* interactively prompt on m* cmds */ GLOBAL int interactive; /* interactively prompt on m* cmds */
GLOBAL int confirmrest; /* confirm rest of current m* cmd */ GLOBAL int confirmrest; /* confirm rest of current m* cmd */
GLOBAL int debug; /* debugging level */ GLOBAL int ftp_debug; /* debugging level */
GLOBAL int bell; /* ring bell on cmd completion */ GLOBAL int bell; /* ring bell on cmd completion */
GLOBAL int doglob; /* glob local file names */ GLOBAL int doglob; /* glob local file names */
GLOBAL int autologin; /* establish user account on connection */ GLOBAL int autologin; /* establish user account on connection */
GLOBAL int proxy; /* proxy server connection active */ GLOBAL int proxy; /* proxy server connection active */
GLOBAL int proxflag; /* proxy connection exists */ GLOBAL int proxflag; /* proxy connection exists */
GLOBAL int gatemode; /* use gate-ftp */ GLOBAL int gatemode; /* use gate-ftp */
GLOBAL char *gateserver; /* server to use for gate-ftp */ GLOBAL const char *gateserver; /* server to use for gate-ftp */
GLOBAL int sunique; /* store files on server with unique name */ GLOBAL int sunique; /* store files on server with unique name */
GLOBAL int runique; /* store local files with unique name */ GLOBAL int runique; /* store local files with unique name */
GLOBAL int mcase; /* map upper to lower case for mget names */ GLOBAL int mcase; /* map upper to lower case for mget names */
@ -252,9 +252,11 @@ GLOBAL int rate_get_incr; /* increment for get xfer rate */
GLOBAL int rate_put; /* maximum put xfer rate */ GLOBAL int rate_put; /* maximum put xfer rate */
GLOBAL int rate_put_incr; /* increment for put xfer rate */ GLOBAL int rate_put_incr; /* increment for put xfer rate */
GLOBAL int retry_connect; /* seconds between retrying connection */ GLOBAL int retry_connect; /* seconds between retrying connection */
GLOBAL char *tmpdir; /* temporary directory */ GLOBAL const char *tmpdir; /* temporary directory */
GLOBAL int epsv4; /* use EPSV/EPRT on IPv4 connections */ GLOBAL int epsv4; /* use EPSV/EPRT on IPv4 connections */
GLOBAL int epsv4bad; /* EPSV doesn't work on the current server */ GLOBAL int epsv4bad; /* EPSV doesn't work on the current server */
GLOBAL int epsv6; /* use EPSV/EPRT on IPv6 connections */
GLOBAL int epsv6bad; /* EPSV doesn't work on the current server */
GLOBAL int editing; /* command line editing enabled */ GLOBAL int editing; /* command line editing enabled */
GLOBAL int features[FEAT_max]; /* remote FEATures supported */ GLOBAL int features[FEAT_max]; /* remote FEATures supported */
@ -266,8 +268,6 @@ GLOBAL size_t cursor_argc; /* location of cursor in margv */
GLOBAL size_t cursor_argo; /* offset of cursor in margv[cursor_argc] */ GLOBAL size_t cursor_argo; /* offset of cursor in margv[cursor_argc] */
#endif /* !NO_EDITCOMPLETE */ #endif /* !NO_EDITCOMPLETE */
GLOBAL char *direction; /* direction transfer is occurring */
GLOBAL char *hostname; /* name of host connected to */ GLOBAL char *hostname; /* name of host connected to */
GLOBAL int unix_server; /* server is unix, can use binary for ascii */ GLOBAL int unix_server; /* server is unix, can use binary for ascii */
GLOBAL int unix_proxy; /* proxy is unix, can use binary for ascii */ GLOBAL int unix_proxy; /* proxy is unix, can use binary for ascii */
@ -276,9 +276,10 @@ GLOBAL char remotecwd[MAXPATHLEN]; /* remote dir */
GLOBAL char *username; /* name of user logged in as. (dynamic) */ GLOBAL char *username; /* name of user logged in as. (dynamic) */
GLOBAL sa_family_t family; /* address family to use for connections */ GLOBAL sa_family_t family; /* address family to use for connections */
GLOBAL char *ftpport; /* port number to use for FTP connections */ GLOBAL const char *ftpport; /* port number to use for FTP connections */
GLOBAL char *httpport; /* port number to use for HTTP connections */ GLOBAL const char *httpport; /* port number to use for HTTP connections */
GLOBAL char *gateport; /* port number to use for gateftp connections */ GLOBAL const char *gateport; /* port number to use for gateftp connections */
GLOBAL struct addrinfo *bindai; /* local address to bind as */
GLOBAL char *outfile; /* filename to output URLs to */ GLOBAL char *outfile; /* filename to output URLs to */
GLOBAL int restartautofetch; /* restart auto-fetch */ GLOBAL int restartautofetch; /* restart auto-fetch */
@ -327,7 +328,7 @@ extern struct option optiontab[];
#define FREEPTR(x) if ((x) != NULL) { free(x); (x) = NULL; } #define FREEPTR(x) if ((x) != NULL) { free(x); (x) = NULL; }
#ifdef BSD4_4 #ifdef BSD4_4
# define HAVE_SOCKADDR_SA_LEN 1 # define HAVE_STRUCT_SOCKADDR_IN_SIN_LEN 1
#endif #endif
#ifdef NO_LONG_LONG #ifdef NO_LONG_LONG
@ -335,3 +336,20 @@ extern struct option optiontab[];
#else #else
# define STRTOLL(x,y,z) strtoll(x,y,z) # define STRTOLL(x,y,z) strtoll(x,y,z)
#endif #endif
#ifdef NO_DEBUG
#define DPRINTF(...)
#define DWARN(...)
#else
#define DPRINTF(...) if (ftp_debug) (void)fprintf(ttyout, __VA_ARGS__)
#define DWARN(...) if (ftp_debug) warn(__VA_ARGS__)
#endif
#define STRorNULL(s) ((s) ? (s) : "<null>")
#ifdef NO_USAGE
void xusage(void);
#define UPRINTF(...) xusage()
#else
#define UPRINTF(...) (void)fprintf(ttyout, __VA_ARGS__)
#endif

View File

@ -1,7 +1,8 @@
/* $NetBSD: main.c,v 1.94 2005/05/13 05:03:49 lukem Exp $ */ /* $NetBSD: main.c,v 1.17 2009/11/15 10:12:37 lukem Exp $ */
/* from NetBSD: main.c,v 1.117 2009/07/13 19:05:41 roy Exp */
/*- /*-
* Copyright (c) 1996-2004 The NetBSD Foundation, Inc. * Copyright (c) 1996-2009 The NetBSD Foundation, Inc.
* All rights reserved. * All rights reserved.
* *
* This code is derived from software contributed to The NetBSD Foundation * This code is derived from software contributed to The NetBSD Foundation
@ -15,13 +16,6 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * 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 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
@ -94,17 +88,22 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include "tnftp.h"
#if 0 /* tnftp */
#include <sys/cdefs.h> #include <sys/cdefs.h>
#ifndef lint #ifndef lint
__COPYRIGHT("@(#) Copyright (c) 1985, 1989, 1993, 1994\n\ __COPYRIGHT("@(#) Copyright (c) 1985, 1989, 1993, 1994\
The Regents of the University of California. All rights reserved.\n"); The Regents of the University of California. All rights reserved.\
Copyright 1996-2008 The NetBSD Foundation, Inc. All rights reserved");
#endif /* not lint */ #endif /* not lint */
#ifndef lint #ifndef lint
#if 0 #if 0
static char sccsid[] = "@(#)main.c 8.6 (Berkeley) 10/9/94"; static char sccsid[] = "@(#)main.c 8.6 (Berkeley) 10/9/94";
#else #else
__RCSID("$NetBSD: main.c,v 1.94 2005/05/13 05:03:49 lukem Exp $"); __RCSID(" NetBSD: main.c,v 1.117 2009/07/13 19:05:41 roy Exp ");
#endif #endif
#endif /* not lint */ #endif /* not lint */
@ -123,9 +122,12 @@ __RCSID("$NetBSD: main.c,v 1.94 2005/05/13 05:03:49 lukem Exp $");
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <time.h>
#include <unistd.h> #include <unistd.h>
#include <locale.h> #include <locale.h>
#endif /* tnftp */
#define GLOBAL /* force GLOBAL decls in ftp_var.h to be declared */ #define GLOBAL /* force GLOBAL decls in ftp_var.h to be declared */
#include "ftp_var.h" #include "ftp_var.h"
@ -134,19 +136,24 @@ __RCSID("$NetBSD: main.c,v 1.94 2005/05/13 05:03:49 lukem Exp $");
#define NO_PROXY "no_proxy" /* env var with list of non-proxied #define NO_PROXY "no_proxy" /* env var with list of non-proxied
* hosts, comma or space separated */ * hosts, comma or space separated */
static void setupoption(char *, char *, char *); static void setupoption(const char *, const char *, const char *);
int main(int, char *[]); int main(int, char *[]);
int int
main(int argc, char *argv[]) main(int volatile argc, char **volatile argv)
{ {
int ch, rval; int ch, rval;
struct passwd *pw; struct passwd *pw;
char *cp, *ep, *anonuser, *anonpass, *upload_path; char *cp, *ep, *anonpass, *upload_path, *src_addr;
int dumbterm, s, len, isupload; const char *anonuser;
int dumbterm, s, isupload;
size_t len;
socklen_t slen; socklen_t slen;
tzset();
#if 0 /* tnftp */ /* XXX */
setlocale(LC_ALL, ""); setlocale(LC_ALL, "");
#endif /* tnftp */
setprogname(argv[0]); setprogname(argv[0]);
sigint_raised = 0; sigint_raised = 0;
@ -184,14 +191,22 @@ main(int argc, char *argv[])
rate_put_incr = DEFAULTINCR; rate_put_incr = DEFAULTINCR;
#ifdef INET6 #ifdef INET6
epsv4 = 1; epsv4 = 1;
epsv6 = 1;
#else #else
epsv4 = 0; epsv4 = 0;
epsv6 = 0;
#endif #endif
epsv4bad = 0; epsv4bad = 0;
epsv6bad = 0;
src_addr = NULL;
upload_path = NULL; upload_path = NULL;
isupload = 0; isupload = 0;
reply_callback = NULL; reply_callback = NULL;
#ifdef INET6
family = AF_UNSPEC; family = AF_UNSPEC;
#else
family = AF_INET; /* force AF_INET if no INET6 support */
#endif
netrc[0] = '\0'; netrc[0] = '\0';
cp = getenv("NETRC"); cp = getenv("NETRC");
@ -206,15 +221,15 @@ main(int argc, char *argv[])
*/ */
s = socket(AF_INET, SOCK_STREAM, 0); s = socket(AF_INET, SOCK_STREAM, 0);
if (s == -1) if (s == -1)
err(1, "can't create socket"); err(1, "Can't create socket to determine default socket sizes");
slen = sizeof(rcvbuf_size); slen = sizeof(rcvbuf_size);
if (getsockopt(s, SOL_SOCKET, SO_RCVBUF, if (getsockopt(s, SOL_SOCKET, SO_RCVBUF,
(void *)&rcvbuf_size, &slen) == -1) (void *)&rcvbuf_size, &slen) == -1)
err(1, "unable to get default rcvbuf size"); err(1, "Unable to get default rcvbuf size");
slen = sizeof(sndbuf_size); slen = sizeof(sndbuf_size);
if (getsockopt(s, SOL_SOCKET, SO_SNDBUF, if (getsockopt(s, SOL_SOCKET, SO_SNDBUF,
(void *)&sndbuf_size, &slen) == -1) (void *)&sndbuf_size, &slen) == -1)
err(1, "unable to get default sndbuf size"); err(1, "Unable to get default sndbuf size");
(void)close(s); (void)close(s);
/* sanity check returned buffer sizes */ /* sanity check returned buffer sizes */
if (rcvbuf_size <= 0) if (rcvbuf_size <= 0)
@ -227,7 +242,7 @@ main(int argc, char *argv[])
if (rcvbuf_size > 8 * 1024 * 1024) if (rcvbuf_size > 8 * 1024 * 1024)
rcvbuf_size = 8 * 1024 * 1024; rcvbuf_size = 8 * 1024 * 1024;
marg_sl = xsl_init(); marg_sl = ftp_sl_init();
if ((tmpdir = getenv("TMPDIR")) == NULL) if ((tmpdir = getenv("TMPDIR")) == NULL)
tmpdir = _PATH_TMP; tmpdir = _PATH_TMP;
@ -245,7 +260,7 @@ main(int argc, char *argv[])
passivemode = 1; passivemode = 1;
activefallback = 1; activefallback = 1;
} else } else
warnx("unknown $FTPMODE '%s'; using defaults", cp); warnx("Unknown $FTPMODE `%s'; using defaults", cp);
} }
if (strcmp(getprogname(), "pftp") == 0) { if (strcmp(getprogname(), "pftp") == 0) {
@ -286,7 +301,7 @@ main(int argc, char *argv[])
} }
} }
while ((ch = getopt(argc, argv, "46AadefginN:o:pP:q:r:RtT:u:vV")) != -1) { while ((ch = getopt(argc, argv, "46AadefginN:o:pP:q:r:Rs:tT:u:vV")) != -1) {
switch (ch) { switch (ch) {
case '4': case '4':
family = AF_INET; family = AF_INET;
@ -311,7 +326,7 @@ main(int argc, char *argv[])
case 'd': case 'd':
options |= SO_DEBUG; options |= SO_DEBUG;
debug++; ftp_debug++;
break; break;
case 'e': case 'e':
@ -361,19 +376,23 @@ main(int argc, char *argv[])
case 'q': case 'q':
quit_time = strtol(optarg, &ep, 10); quit_time = strtol(optarg, &ep, 10);
if (quit_time < 1 || *ep != '\0') if (quit_time < 1 || *ep != '\0')
errx(1, "bad quit value: %s", optarg); errx(1, "Bad quit value: %s", optarg);
break; break;
case 'r': case 'r':
retry_connect = strtol(optarg, &ep, 10); retry_connect = strtol(optarg, &ep, 10);
if (retry_connect < 1 || *ep != '\0') if (retry_connect < 1 || *ep != '\0')
errx(1, "bad retry value: %s", optarg); errx(1, "Bad retry value: %s", optarg);
break; break;
case 'R': case 'R':
restartautofetch = 1; restartautofetch = 1;
break; break;
case 's':
src_addr = optarg;
break;
case 't': case 't':
trace = 1; trace = 1;
break; break;
@ -382,15 +401,18 @@ main(int argc, char *argv[])
{ {
int targc; int targc;
char *targv[6], *oac; char *targv[6], *oac;
char cmdbuf[MAX_C_NAME];
/* look for `dir,max[,incr]' */ /* look for `dir,max[,incr]' */
targc = 0; targc = 0;
targv[targc++] = "-T"; (void)strlcpy(cmdbuf, "-T", sizeof(cmdbuf));
oac = xstrdup(optarg); targv[targc++] = cmdbuf;
oac = ftp_strdup(optarg);
while ((cp = strsep(&oac, ",")) != NULL) { while ((cp = strsep(&oac, ",")) != NULL) {
if (*cp == '\0') { if (*cp == '\0') {
warnx("bad throttle value: %s", optarg); warnx("Bad throttle value `%s'",
optarg);
usage(); usage();
/* NOTREACHED */ /* NOTREACHED */
} }
@ -408,7 +430,7 @@ main(int argc, char *argv[])
{ {
isupload = 1; isupload = 1;
interactive = 0; interactive = 0;
upload_path = xstrdup(optarg); upload_path = ftp_strdup(optarg);
break; break;
} }
@ -435,6 +457,22 @@ main(int argc, char *argv[])
crflag = 1; /* strip c.r. on ascii gets */ crflag = 1; /* strip c.r. on ascii gets */
sendport = -1; /* not using ports */ sendport = -1; /* not using ports */
if (src_addr != NULL) {
struct addrinfo hints;
int error;
memset(&hints, 0, sizeof(hints));
hints.ai_family = family;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
error = getaddrinfo(src_addr, NULL, &hints, &bindai);
if (error) {
errx(1, "Can't lookup `%s': %s", src_addr,
(error == EAI_SYSTEM) ? strerror(errno)
: gai_strerror(error));
}
}
/* /*
* Cache the user name and home directory. * Cache the user name and home directory.
*/ */
@ -443,7 +481,7 @@ main(int argc, char *argv[])
anonuser = "anonymous"; anonuser = "anonymous";
cp = getenv("HOME"); cp = getenv("HOME");
if (! EMPTYSTRING(cp)) if (! EMPTYSTRING(cp))
localhome = xstrdup(cp); localhome = ftp_strdup(cp);
pw = NULL; pw = NULL;
cp = getlogin(); cp = getlogin();
if (cp != NULL) if (cp != NULL)
@ -452,8 +490,8 @@ main(int argc, char *argv[])
pw = getpwuid(getuid()); pw = getpwuid(getuid());
if (pw != NULL) { if (pw != NULL) {
if (localhome == NULL && !EMPTYSTRING(pw->pw_dir)) if (localhome == NULL && !EMPTYSTRING(pw->pw_dir))
localhome = xstrdup(pw->pw_dir); localhome = ftp_strdup(pw->pw_dir);
localname = xstrdup(pw->pw_name); localname = ftp_strdup(pw->pw_name);
anonuser = localname; anonuser = localname;
} }
if (netrc[0] == '\0' && localhome != NULL) { if (netrc[0] == '\0' && localhome != NULL) {
@ -465,7 +503,7 @@ main(int argc, char *argv[])
} }
} }
if (localhome == NULL) if (localhome == NULL)
localhome = xstrdup("/"); localhome = ftp_strdup("/");
/* /*
* Every anonymous FTP server I've encountered will accept the * Every anonymous FTP server I've encountered will accept the
@ -475,7 +513,7 @@ main(int argc, char *argv[])
* - thorpej@NetBSD.org * - thorpej@NetBSD.org
*/ */
len = strlen(anonuser) + 2; len = strlen(anonuser) + 2;
anonpass = xmalloc(len); anonpass = ftp_malloc(len);
(void)strlcpy(anonpass, anonuser, len); (void)strlcpy(anonpass, anonuser, len);
(void)strlcat(anonpass, "@", len); (void)strlcat(anonpass, "@", len);
@ -502,11 +540,6 @@ main(int argc, char *argv[])
(void)xsignal(SIGUSR2, crankrate); (void)xsignal(SIGUSR2, crankrate);
(void)xsignal(SIGWINCH, setttywidth); (void)xsignal(SIGWINCH, setttywidth);
#ifdef __GNUC__ /* to shut up gcc warnings */
(void)&argc;
(void)&argv;
#endif
if (argc > 0) { if (argc > 0) {
if (isupload) { if (isupload) {
rval = auto_put(argc, argv, upload_path); rval = auto_put(argc, argv, upload_path);
@ -522,22 +555,23 @@ main(int argc, char *argv[])
if (rval >= 0) /* -1 == connected and cd-ed */ if (rval >= 0) /* -1 == connected and cd-ed */
goto sigint_or_rval_exit; goto sigint_or_rval_exit;
} else { } else {
char *xargv[4], *user, *host; char *xargv[4], *uuser, *host;
char cmdbuf[MAXPATHLEN];
if ((rval = sigsetjmp(toplevel, 1))) if ((rval = sigsetjmp(toplevel, 1)))
goto sigint_or_rval_exit; goto sigint_or_rval_exit;
(void)xsignal(SIGINT, intr); (void)xsignal(SIGINT, intr);
(void)xsignal(SIGPIPE, lostpeer); (void)xsignal(SIGPIPE, lostpeer);
user = NULL; uuser = NULL;
host = argv[0]; host = argv[0];
cp = strchr(host, '@'); cp = strchr(host, '@');
if (cp) { if (cp) {
*cp = '\0'; *cp = '\0';
user = host; uuser = host;
host = cp + 1; host = cp + 1;
} }
/* XXX discards const */ (void)strlcpy(cmdbuf, getprogname(), sizeof(cmdbuf));
xargv[0] = (char *)getprogname(); xargv[0] = cmdbuf;
xargv[1] = host; xargv[1] = host;
xargv[2] = argv[1]; xargv[2] = argv[1];
xargv[3] = NULL; xargv[3] = NULL;
@ -545,14 +579,14 @@ main(int argc, char *argv[])
int oautologin; int oautologin;
oautologin = autologin; oautologin = autologin;
if (user != NULL) { if (uuser != NULL) {
anonftp = 0; anonftp = 0;
autologin = 0; autologin = 0;
} }
setpeer(argc+1, xargv); setpeer(argc+1, xargv);
autologin = oautologin; autologin = oautologin;
if (connected == 1 && user != NULL) if (connected == 1 && uuser != NULL)
(void)ftp_login(host, user, NULL); (void)ftp_login(host, uuser, NULL);
if (!retry_connect) if (!retry_connect)
break; break;
if (!connected) { if (!connected) {
@ -586,18 +620,18 @@ main(int argc, char *argv[])
char * char *
prompt(void) prompt(void)
{ {
static char **prompt; static char **promptopt;
static char buf[MAXPATHLEN]; static char buf[MAXPATHLEN];
if (prompt == NULL) { if (promptopt == NULL) {
struct option *o; struct option *o;
o = getoption("prompt"); o = getoption("prompt");
if (o == NULL) if (o == NULL)
errx(1, "no such option `prompt'"); errx(1, "prompt: no such option `prompt'");
prompt = &(o->value); promptopt = &(o->value);
} }
formatbuf(buf, sizeof(buf), *prompt ? *prompt : DEFAULTPROMPT); formatbuf(buf, sizeof(buf), *promptopt ? *promptopt : DEFAULTPROMPT);
return (buf); return (buf);
} }
@ -607,18 +641,18 @@ prompt(void)
char * char *
rprompt(void) rprompt(void)
{ {
static char **rprompt; static char **rpromptopt;
static char buf[MAXPATHLEN]; static char buf[MAXPATHLEN];
if (rprompt == NULL) { if (rpromptopt == NULL) {
struct option *o; struct option *o;
o = getoption("rprompt"); o = getoption("rprompt");
if (o == NULL) if (o == NULL)
errx(1, "no such option `rprompt'"); errx(1, "rprompt: no such option `rprompt'");
rprompt = &(o->value); rpromptopt = &(o->value);
} }
formatbuf(buf, sizeof(buf), *rprompt ? *rprompt : DEFAULTRPROMPT); formatbuf(buf, sizeof(buf), *rpromptopt ? *rpromptopt : DEFAULTRPROMPT);
return (buf); return (buf);
} }
@ -630,7 +664,12 @@ cmdscanner(void)
{ {
struct cmd *c; struct cmd *c;
char *p; char *p;
int num; #ifndef NO_EDITCOMPLETE
int ch;
size_t num;
#endif
int len;
char cmdbuf[MAX_C_NAME];
for (;;) { for (;;) {
#ifndef NO_EDITCOMPLETE #ifndef NO_EDITCOMPLETE
@ -641,34 +680,33 @@ cmdscanner(void)
p = rprompt(); p = rprompt();
if (*p) if (*p)
fprintf(ttyout, "%s ", p); fprintf(ttyout, "%s ", p);
(void)fflush(ttyout);
} }
if (fgets(line, sizeof(line), stdin) == NULL) { (void)fflush(ttyout);
len = get_line(stdin, line, sizeof(line), NULL);
switch (len) {
case -1: /* EOF */
case -2: /* error */
if (fromatty) if (fromatty)
putc('\n', ttyout); putc('\n', ttyout);
quit(0, NULL); quit(0, NULL);
} /* NOTREACHED */
num = strlen(line); case -3: /* too long; try again */
if (num == 0)
break;
if (line[--num] == '\n') {
if (num == 0)
break;
line[num] = '\0';
} else if (num == sizeof(line) - 2) {
fputs("Sorry, input line is too long.\n", fputs("Sorry, input line is too long.\n",
ttyout); ttyout);
while ((num = getchar()) != '\n' && num != EOF) continue;
/* void */; case 0: /* empty; try again */
continue;
default: /* all ok */
break; break;
} /* else it was a line without a newline */ }
#ifndef NO_EDITCOMPLETE #ifndef NO_EDITCOMPLETE
} else { } else {
const char *buf; const char *buf;
HistEvent ev; HistEvent ev;
cursor_pos = NULL; cursor_pos = NULL;
buf = el_gets(el, &num); buf = el_gets(el, &ch);
num = ch;
if (buf == NULL || num == 0) { if (buf == NULL || num == 0) {
if (fromatty) if (fromatty)
putc('\n', ttyout); putc('\n', ttyout);
@ -718,7 +756,8 @@ cmdscanner(void)
continue; continue;
} }
confirmrest = 0; confirmrest = 0;
margv[0] = c->c_name; (void)strlcpy(cmdbuf, c->c_name, sizeof(cmdbuf));
margv[0] = cmdbuf;
(*c->c_handler)(margc, margv); (*c->c_handler)(margc, margv);
if (bell && c->c_bell) if (bell && c->c_bell)
(void)putc('\007', ttyout); (void)putc('\007', ttyout);
@ -777,7 +816,7 @@ makeargv(void)
marg_sl->sl_cur = 0; /* reset to start of marg_sl */ marg_sl->sl_cur = 0; /* reset to start of marg_sl */
for (margc = 0; ; margc++) { for (margc = 0; ; margc++) {
argp = slurpstring(); argp = slurpstring();
xsl_add(marg_sl, argp); ftp_sl_add(marg_sl, argp);
if (argp == NULL) if (argp == NULL)
break; break;
} }
@ -812,6 +851,8 @@ makeargv(void)
char * char *
slurpstring(void) slurpstring(void)
{ {
static char bangstr[2] = { '!', '\0' };
static char dollarstr[2] = { '$', '\0' };
int got_one = 0; int got_one = 0;
char *sb = stringbase; char *sb = stringbase;
char *ap = argbase; char *ap = argbase;
@ -822,7 +863,7 @@ slurpstring(void)
case 0: case 0:
slrflag++; slrflag++;
INC_CHKCURSOR(stringbase); INC_CHKCURSOR(stringbase);
return ((*sb == '!') ? "!" : "$"); return ((*sb == '!') ? bangstr : dollarstr);
/* NOTREACHED */ /* NOTREACHED */
case 1: case 1:
slrflag++; slrflag++;
@ -945,27 +986,28 @@ void
help(int argc, char *argv[]) help(int argc, char *argv[])
{ {
struct cmd *c; struct cmd *c;
char *nargv[1], *p, *cmd; char *nargv[1], *cmd;
const char *p;
int isusage; int isusage;
cmd = argv[0]; cmd = argv[0];
isusage = (strcmp(cmd, "usage") == 0); isusage = (strcmp(cmd, "usage") == 0);
if (argc == 0 || (isusage && argc == 1)) { if (argc == 0 || (isusage && argc == 1)) {
fprintf(ttyout, "usage: %s [command [...]]\n", cmd); UPRINTF("usage: %s [command [...]]\n", cmd);
return; return;
} }
if (argc == 1) { if (argc == 1) {
StringList *buf; StringList *buf;
buf = xsl_init(); buf = ftp_sl_init();
fprintf(ttyout, fprintf(ttyout,
"%sommands may be abbreviated. Commands are:\n\n", "%sommands may be abbreviated. Commands are:\n\n",
proxy ? "Proxy c" : "C"); proxy ? "Proxy c" : "C");
for (c = cmdtab; (p = c->c_name) != NULL; c++) for (c = cmdtab; (p = c->c_name) != NULL; c++)
if (!proxy || c->c_proxy) if (!proxy || c->c_proxy)
xsl_add(buf, p); ftp_sl_add(buf, ftp_strdup(p));
list_vertical(buf); list_vertical(buf);
sl_free(buf, 0); sl_free(buf, 1);
return; return;
} }
@ -973,6 +1015,7 @@ help(int argc, char *argv[])
while (--argc > 0) { while (--argc > 0) {
char *arg; char *arg;
char cmdbuf[MAX_C_NAME];
arg = *++argv; arg = *++argv;
c = getcmd(arg); c = getcmd(arg);
@ -984,7 +1027,8 @@ help(int argc, char *argv[])
cmd, arg); cmd, arg);
else { else {
if (isusage) { if (isusage) {
nargv[0] = c->c_name; (void)strlcpy(cmdbuf, c->c_name, sizeof(cmdbuf));
nargv[0] = cmdbuf;
(*c->c_handler)(0, nargv); (*c->c_handler)(0, nargv);
} else } else
fprintf(ttyout, "%-*s\t%s\n", HELPINDENT, fprintf(ttyout, "%-*s\t%s\n", HELPINDENT,
@ -1014,27 +1058,18 @@ getoptionvalue(const char *name)
struct option *c; struct option *c;
if (name == NULL) if (name == NULL)
errx(1, "getoptionvalue() invoked with NULL name"); errx(1, "getoptionvalue: invoked with NULL name");
c = getoption(name); c = getoption(name);
if (c != NULL) if (c != NULL)
return (c->value); return (c->value);
errx(1, "getoptionvalue() invoked with unknown option `%s'", name); errx(1, "getoptionvalue: invoked with unknown option `%s'", name);
/* NOTREACHED */ /* NOTREACHED */
} }
static void static void
setupoption(char *name, char *value, char *defaultvalue) setupoption(const char *name, const char *value, const char *defaultvalue)
{ {
char *nargv[3]; set_option(name, value ? value : defaultvalue, 0);
int overbose;
nargv[0] = "setupoption()";
nargv[1] = name;
nargv[2] = (value ? value : defaultvalue);
overbose = verbose;
verbose = 0;
setoption(3, nargv);
verbose = overbose;
} }
void void
@ -1043,9 +1078,10 @@ usage(void)
const char *progname = getprogname(); const char *progname = getprogname();
(void)fprintf(stderr, (void)fprintf(stderr,
"usage: %s [-46AadefginpRtvV] [-N netrc] [-o outfile] [-P port] [-q quittime]\n" "usage: %s [-46AadefginpRtVv] [-N netrc] [-o outfile] [-P port] [-q quittime]\n"
" [-r retry] [-T dir,max[,inc][[user@]host [port]]] [host:path[/]]\n" " [-r retry] [-s srcaddr] [-T dir,max[,inc]]\n"
" [file:///file] [ftp://[user[:pass]@]host[:port]/path[/]]\n" " [[user@]host [port]] [host:path[/]] [file:///file]\n"
" [ftp://[user[:pass]@]host[:port]/path[/]]\n"
" [http://[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); exit(1);

View File

@ -1,7 +1,8 @@
/* $NetBSD: progressbar.c,v 1.7 2005/04/11 01:49:31 lukem Exp $ */ /* $NetBSD: progressbar.c,v 1.14 2009/05/20 12:53:47 lukem Exp $ */
/* from NetBSD: progressbar.c,v 1.21 2009/04/12 10:18:52 lukem Exp */
/*- /*-
* Copyright (c) 1997-2003 The NetBSD Foundation, Inc. * Copyright (c) 1997-2009 The NetBSD Foundation, Inc.
* All rights reserved. * All rights reserved.
* *
* This code is derived from software contributed to The NetBSD Foundation * This code is derived from software contributed to The NetBSD Foundation
@ -15,13 +16,6 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * 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 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
@ -36,9 +30,13 @@
* POSSIBILITY OF SUCH DAMAGE. * POSSIBILITY OF SUCH DAMAGE.
*/ */
#include "tnftp.h"
#if 0 /* tnftp */
#include <sys/cdefs.h> #include <sys/cdefs.h>
#ifndef lint #ifndef lint
__RCSID("$NetBSD: progressbar.c,v 1.7 2005/04/11 01:49:31 lukem Exp $"); __RCSID(" NetBSD: progressbar.c,v 1.21 2009/04/12 10:18:52 lukem Exp ");
#endif /* not lint */ #endif /* not lint */
/* /*
@ -46,7 +44,6 @@ __RCSID("$NetBSD: progressbar.c,v 1.7 2005/04/11 01:49:31 lukem Exp $");
*/ */
#include <sys/types.h> #include <sys/types.h>
#include <sys/param.h> #include <sys/param.h>
#include <sys/time.h>
#include <err.h> #include <err.h>
#include <errno.h> #include <errno.h>
@ -55,12 +52,12 @@ __RCSID("$NetBSD: progressbar.c,v 1.7 2005/04/11 01:49:31 lukem Exp $");
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <time.h> #include <time.h>
#include <tzfile.h>
#include <unistd.h> #include <unistd.h>
#include "progressbar.h" #endif /* tnftp */
#define SECSPERHOUR (60 * 60) #include "progressbar.h"
#define SECSPERDAY ((long)60 * 60 * 24)
#if !defined(NO_PROGRESS) #if !defined(NO_PROGRESS)
/* /*
@ -72,7 +69,11 @@ foregroundproc(void)
static pid_t pgrp = -1; static pid_t pgrp = -1;
if (pgrp == -1) if (pgrp == -1)
#if GETPGRP_VOID
pgrp = getpgrp(); pgrp = getpgrp();
#else /* ! GETPGRP_VOID */
pgrp = getpgrp(0);
#endif /* ! GETPGRP_VOID */
return (tcgetpgrp(fileno(ttyout)) == pgrp); return (tcgetpgrp(fileno(ttyout)) == pgrp);
} }
@ -94,10 +95,23 @@ updateprogressmeter(int dummy)
} }
/* /*
* List of order of magnitude prefixes. * List of order of magnitude suffixes, per IEC 60027-2.
* The last is `P', as 2^64 = 16384 Petabytes
*/ */
static const char prefixes[] = " KMGTP"; static const char * const suffixes[] = {
"", /* 2^0 (byte) */
"KiB", /* 2^10 Kibibyte */
"MiB", /* 2^20 Mebibyte */
"GiB", /* 2^30 Gibibyte */
"TiB", /* 2^40 Tebibyte */
"PiB", /* 2^50 Pebibyte */
"EiB", /* 2^60 Exbibyte */
#if 0
/* The following are not necessary for signed 64-bit off_t */
"ZiB", /* 2^70 Zebibyte */
"YiB", /* 2^80 Yobibyte */
#endif
};
#define NSUFFIXES (int)(sizeof(suffixes) / sizeof(suffixes[0]))
/* /*
* Display a transfer progress bar if progress is non-zero. * Display a transfer progress bar if progress is non-zero.
@ -124,7 +138,7 @@ progressmeter(int flag)
struct timeval td; struct timeval td;
off_t abbrevsize, bytespersec; off_t abbrevsize, bytespersec;
double elapsed; double elapsed;
int ratio, barlength, i, remaining; int ratio, i, remaining, barlength;
/* /*
* Work variables for progress bar. * Work variables for progress bar.
@ -135,10 +149,10 @@ progressmeter(int flag)
* these appropriately. * these appropriately.
*/ */
#endif #endif
int len; size_t len;
char buf[256]; /* workspace for progress bar */ char buf[256]; /* workspace for progress bar */
#ifndef NO_PROGRESS #ifndef NO_PROGRESS
#define BAROVERHEAD 43 /* non `*' portion of progress bar */ #define BAROVERHEAD 45 /* non `*' portion of progress bar */
/* /*
* stars should contain at least * stars should contain at least
* sizeof(buf) - BAROVERHEAD entries * sizeof(buf) - BAROVERHEAD entries
@ -170,8 +184,8 @@ progressmeter(int flag)
"transfer aborted because stalled for %lu sec.\r\n", "transfer aborted because stalled for %lu sec.\r\n",
getprogname(), (unsigned long)wait.tv_sec); getprogname(), (unsigned long)wait.tv_sec);
(void)write(fileno(ttyout), buf, len); (void)write(fileno(ttyout), buf, len);
(void)xsignal(SIGALRM, SIG_DFL);
alarmtimer(0); alarmtimer(0);
(void)xsignal(SIGALRM, SIG_DFL);
siglongjmp(toplevel, 1); siglongjmp(toplevel, 1);
} }
#endif /* !STANDALONE_PROGRESS */ #endif /* !STANDALONE_PROGRESS */
@ -188,8 +202,8 @@ progressmeter(int flag)
(void)xsignal_restart(SIGALRM, updateprogressmeter, 1); (void)xsignal_restart(SIGALRM, updateprogressmeter, 1);
alarmtimer(1); /* set alarm timer for 1 Hz */ alarmtimer(1); /* set alarm timer for 1 Hz */
} else if (flag == 1) { } else if (flag == 1) {
(void)xsignal(SIGALRM, SIG_DFL);
alarmtimer(0); alarmtimer(0);
(void)xsignal(SIGALRM, SIG_DFL);
} }
} }
#ifndef NO_PROGRESS #ifndef NO_PROGRESS
@ -216,23 +230,24 @@ progressmeter(int flag)
* calculate the length of the `*' bar, ensuring that * calculate the length of the `*' bar, ensuring that
* the number of stars won't exceed the buffer size * the number of stars won't exceed the buffer size
*/ */
barlength = MIN(sizeof(buf) - 1, ttywidth) - BAROVERHEAD; barlength = MIN((int)(sizeof(buf) - 1), ttywidth) - BAROVERHEAD;
if (prefix) if (prefix)
barlength -= strlen(prefix); barlength -= (int)strlen(prefix);
if (barlength > 0) { if (barlength > 0) {
i = barlength * ratio / 100; i = barlength * ratio / 100;
len += snprintf(buf + len, BUFLEFT, len += snprintf(buf + len, BUFLEFT,
"|%.*s%*s|", i, stars, barlength - i, ""); "|%.*s%*s|", i, stars, (int)(barlength - i), "");
} }
} }
abbrevsize = cursize; abbrevsize = cursize;
for (i = 0; abbrevsize >= 100000 && i < sizeof(prefixes); i++) for (i = 0; abbrevsize >= 100000 && i < NSUFFIXES; i++)
abbrevsize >>= 10; abbrevsize >>= 10;
len += snprintf(buf + len, BUFLEFT, " " LLFP("5") " %c%c ", if (i == NSUFFIXES)
i--;
len += snprintf(buf + len, BUFLEFT, " " LLFP("5") " %-3s ",
(LLT)abbrevsize, (LLT)abbrevsize,
prefixes[i], suffixes[i]);
i == 0 ? ' ' : 'B');
timersub(&now, &start, &td); timersub(&now, &start, &td);
elapsed = td.tv_sec + (td.tv_usec / 1000000.0); elapsed = td.tv_sec + (td.tv_usec / 1000000.0);
@ -243,13 +258,13 @@ progressmeter(int flag)
if (elapsed > 0.0) if (elapsed > 0.0)
bytespersec /= elapsed; bytespersec /= elapsed;
} }
for (i = 1; bytespersec >= 1024000 && i < sizeof(prefixes); i++) for (i = 1; bytespersec >= 1024000 && i < NSUFFIXES; i++)
bytespersec >>= 10; bytespersec >>= 10;
len += snprintf(buf + len, BUFLEFT, len += snprintf(buf + len, BUFLEFT,
" " LLFP("3") ".%02d %cB/s ", " " LLFP("3") ".%02d %.2sB/s ",
(LLT)(bytespersec / 1024), (LLT)(bytespersec / 1024),
(int)((bytespersec % 1024) * 100 / 1024), (int)((bytespersec % 1024) * 100 / 1024),
prefixes[i]); suffixes[i]);
if (filesize > 0) { if (filesize > 0) {
if (bytes <= 0 || elapsed <= 0.0 || cursize > filesize) { if (bytes <= 0 || elapsed <= 0.0 || cursize > filesize) {
@ -299,7 +314,8 @@ ptransfer(int siginfo)
struct timeval now, td, wait; struct timeval now, td, wait;
double elapsed; double elapsed;
off_t bytespersec; off_t bytespersec;
int remaining, hh, i, len; int remaining, hh, i;
size_t len;
char buf[256]; /* Work variable for transfer status. */ char buf[256]; /* Work variable for transfer status. */
@ -334,12 +350,14 @@ ptransfer(int siginfo)
len += snprintf(buf + len, BUFLEFT, len += snprintf(buf + len, BUFLEFT,
"%02d:%02d ", remaining / 60, remaining % 60); "%02d:%02d ", remaining / 60, remaining % 60);
for (i = 1; bytespersec >= 1024000 && i < sizeof(prefixes); i++) for (i = 1; bytespersec >= 1024000 && i < NSUFFIXES; i++)
bytespersec >>= 10; bytespersec >>= 10;
len += snprintf(buf + len, BUFLEFT, "(" LLF ".%02d %cB/s)", if (i == NSUFFIXES)
i--;
len += snprintf(buf + len, BUFLEFT, "(" LLF ".%02d %.2sB/s)",
(LLT)(bytespersec / 1024), (LLT)(bytespersec / 1024),
(int)((bytespersec % 1024) * 100 / 1024), (int)((bytespersec % 1024) * 100 / 1024),
prefixes[i]); suffixes[i]);
if (siginfo && bytes > 0 && elapsed > 0.0 && filesize >= 0 if (siginfo && bytes > 0 && elapsed > 0.0 && filesize >= 0
&& bytes + restart_point <= filesize) { && bytes + restart_point <= filesize) {
@ -400,6 +418,16 @@ alarmtimer(int wait)
sigfunc sigfunc
xsignal_restart(int sig, sigfunc func, int restartable) 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; struct sigaction act, oact;
act.sa_handler = func; act.sa_handler = func;
@ -414,6 +442,7 @@ xsignal_restart(int sig, sigfunc func, int restartable)
if (sigaction(sig, &act, &oact) < 0) if (sigaction(sig, &act, &oact) < 0)
return (SIG_ERR); return (SIG_ERR);
return (oact.sa_handler); return (oact.sa_handler);
#endif /* ! ultrix */
} }
/* /*
@ -457,7 +486,7 @@ xsignal(int sig, sigfunc func)
* This is unpleasant, but I don't know what would be better. * This is unpleasant, but I don't know what would be better.
* Right now, this "can't happen" * Right now, this "can't happen"
*/ */
errx(1, "xsignal_restart called with signal %d", sig); errx(1, "xsignal_restart: called with signal %d", sig);
} }
return(xsignal_restart(sig, func, restartable)); return(xsignal_restart(sig, func, restartable));

View File

@ -1,7 +1,8 @@
/* $NetBSD: progressbar.h,v 1.5 2005/02/10 16:00:38 jmc Exp $ */ /* $NetBSD: progressbar.h,v 1.9 2009/05/20 12:53:47 lukem Exp $ */
/* from NetBSD: progressbar.h,v 1.8 2009/04/12 10:18:52 lukem Exp */
/*- /*-
* Copyright (c) 1996-2003 The NetBSD Foundation, Inc. * Copyright (c) 1996-2009 The NetBSD Foundation, Inc.
* All rights reserved. * All rights reserved.
* *
* This code is derived from software contributed to The NetBSD Foundation * This code is derived from software contributed to The NetBSD Foundation
@ -15,13 +16,6 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * 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 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
@ -66,7 +60,7 @@ GLOBAL int fromatty; /* input is from a terminal */
GLOBAL int verbose; /* print messages coming back from server */ GLOBAL int verbose; /* print messages coming back from server */
GLOBAL int quit_time; /* maximum time to wait if stalled */ GLOBAL int quit_time; /* maximum time to wait if stalled */
GLOBAL char *direction; /* direction transfer is occurring */ GLOBAL const char *direction; /* direction transfer is occurring */
GLOBAL sigjmp_buf toplevel; /* non-local goto stuff for cmd scanner */ GLOBAL sigjmp_buf toplevel; /* non-local goto stuff for cmd scanner */
#endif /* !STANDALONE_PROGRESS */ #endif /* !STANDALONE_PROGRESS */
@ -90,10 +84,19 @@ void ptransfer(int);
# define ULLFP(x) "%" x "lu" # define ULLFP(x) "%" x "lu"
# define ULLT unsigned long # define ULLT unsigned long
#else #else
#if defined(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
#else /* !defined(HAVE_PRINTF_QD) */
# define LLF "%lld" # define LLF "%lld"
# define LLFP(x) "%" x "lld" # define LLFP(x) "%" x "lld"
# define LLT long long # define LLT long long
# define ULLF "%llu" # define ULLF "%llu"
# define ULLFP(x) "%" x "llu" # define ULLFP(x) "%" x "llu"
# define ULLT unsigned long long # define ULLT unsigned long long
#endif /* !defined(HAVE_PRINTF_QD) */
#endif #endif

View File

@ -1,4 +1,5 @@
/* $NetBSD: ruserpass.c,v 1.29 2003/08/07 11:13:57 agc Exp $ */ /* $NetBSD: ruserpass.c,v 1.8 2007/08/06 04:33:24 lukem Exp $ */
/* from NetBSD: ruserpass.c,v 1.33 2007/04/17 05:52:04 lukem Exp */
/* /*
* Copyright (c) 1985, 1993, 1994 * Copyright (c) 1985, 1993, 1994
@ -29,12 +30,16 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include "tnftp.h"
#if 0 /* tnftp */
#include <sys/cdefs.h> #include <sys/cdefs.h>
#ifndef lint #ifndef lint
#if 0 #if 0
static char sccsid[] = "@(#)ruserpass.c 8.4 (Berkeley) 4/27/95"; static char sccsid[] = "@(#)ruserpass.c 8.4 (Berkeley) 4/27/95";
#else #else
__RCSID("$NetBSD: ruserpass.c,v 1.29 2003/08/07 11:13:57 agc Exp $"); __RCSID(" NetBSD: ruserpass.c,v 1.33 2007/04/17 05:52:04 lukem Exp ");
#endif #endif
#endif /* not lint */ #endif /* not lint */
@ -50,6 +55,8 @@ __RCSID("$NetBSD: ruserpass.c,v 1.29 2003/08/07 11:13:57 agc Exp $");
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#endif /* tnftp */
#include "ftp_var.h" #include "ftp_var.h"
static int token(void); static int token(void);
@ -66,7 +73,7 @@ static FILE *cfile;
static char tokval[100]; static char tokval[100];
static struct toktab { static struct toktab {
char *tokstr; const char *tokstr;
int tval; int tval;
} toktab[] = { } toktab[] = {
{ "default", DEFAULT }, { "default", DEFAULT },
@ -80,11 +87,11 @@ static struct toktab {
}; };
int int
ruserpass(const char *host, const char **aname, const char **apass, ruserpass(const char *host, char **aname, char **apass, char **aacct)
const char **aacct)
{ {
char *tmp; char *tmp;
char myname[MAXHOSTNAMELEN + 1], *mydomain; const char *mydomain;
char myname[MAXHOSTNAMELEN + 1];
int t, i, c, usedefault = 0; int t, i, c, usedefault = 0;
struct stat stb; struct stat stb;
@ -93,7 +100,7 @@ ruserpass(const char *host, const char **aname, const char **apass,
cfile = fopen(netrc, "r"); cfile = fopen(netrc, "r");
if (cfile == NULL) { if (cfile == NULL) {
if (errno != ENOENT) if (errno != ENOENT)
warn("%s", netrc); warn("Can't read `%s'", netrc);
return (0); return (0);
} }
if (gethostname(myname, sizeof(myname)) < 0) if (gethostname(myname, sizeof(myname)) < 0)
@ -102,7 +109,7 @@ ruserpass(const char *host, const char **aname, const char **apass,
if ((mydomain = strchr(myname, '.')) == NULL) if ((mydomain = strchr(myname, '.')) == NULL)
mydomain = ""; mydomain = "";
next: next:
while ((t = token())) switch(t) { while ((t = token()) > 0) switch(t) {
case DEFAULT: case DEFAULT:
usedefault = 1; usedefault = 1;
@ -110,7 +117,9 @@ ruserpass(const char *host, const char **aname, const char **apass,
case MACH: case MACH:
if (!usedefault) { if (!usedefault) {
if (token() != ID) if ((t = token()) == -1)
goto bad;
if (t != ID)
continue; continue;
/* /*
* Allow match either for user's input host name * Allow match either for user's input host name
@ -134,12 +143,15 @@ ruserpass(const char *host, const char **aname, const char **apass,
continue; continue;
} }
match: match:
while ((t = token()) && t != MACH && t != DEFAULT) switch(t) { while ((t = token()) > 0 &&
t != MACH && t != DEFAULT) switch(t) {
case LOGIN: case LOGIN:
if (token()) { if ((t = token()) == -1)
goto bad;
if (t) {
if (*aname == NULL) if (*aname == NULL)
*aname = xstrdup(tokval); *aname = ftp_strdup(tokval);
else { else {
if (strcmp(*aname, tokval)) if (strcmp(*aname, tokval))
goto next; goto next;
@ -150,22 +162,26 @@ ruserpass(const char *host, const char **aname, const char **apass,
if ((*aname == NULL || strcmp(*aname, "anonymous")) && if ((*aname == NULL || strcmp(*aname, "anonymous")) &&
fstat(fileno(cfile), &stb) >= 0 && fstat(fileno(cfile), &stb) >= 0 &&
(stb.st_mode & 077) != 0) { (stb.st_mode & 077) != 0) {
warnx("Error: .netrc file is readable by others."); warnx("Error: .netrc file is readable by others");
warnx("Remove password or make file unreadable by others."); warnx("Remove password or make file unreadable by others");
goto bad; goto bad;
} }
if (token() && *apass == NULL) if ((t = token()) == -1)
*apass = xstrdup(tokval); goto bad;
if (t && *apass == NULL)
*apass = ftp_strdup(tokval);
break; break;
case ACCOUNT: case ACCOUNT:
if (fstat(fileno(cfile), &stb) >= 0 if (fstat(fileno(cfile), &stb) >= 0
&& (stb.st_mode & 077) != 0) { && (stb.st_mode & 077) != 0) {
warnx("Error: .netrc file is readable by others."); warnx("Error: .netrc file is readable by others");
warnx("Remove account or make file unreadable by others."); warnx("Remove account or make file unreadable by others");
goto bad; goto bad;
} }
if (token() && *aacct == NULL) if ((t = token()) == -1)
*aacct = xstrdup(tokval); goto bad;
if (t && *aacct == NULL)
*aacct = ftp_strdup(tokval);
break; break;
case MACDEF: case MACDEF:
if (proxy) { if (proxy) {
@ -225,9 +241,13 @@ ruserpass(const char *host, const char **aname, const char **apass,
} }
*tmp = c; *tmp = c;
if (*tmp == '\n') { if (*tmp == '\n') {
if (*(tmp-1) == '\0') { if (tmp == macros[macnum].mac_start) {
macros[macnum++].mac_end = tmp - 1; macros[macnum++].mac_end = tmp;
break; break;
} else if (*(tmp - 1) == '\0') {
macros[macnum++].mac_end =
tmp - 1;
break;
} }
*tmp = '\0'; *tmp = '\0';
} }
@ -240,12 +260,14 @@ ruserpass(const char *host, const char **aname, const char **apass,
} }
break; break;
default: default:
warnx("Unknown .netrc keyword %s", tokval); warnx("Unknown .netrc keyword `%s'", tokval);
break; break;
} }
goto done; goto done;
} }
done: done:
if (t == -1)
goto bad;
(void)fclose(cfile); (void)fclose(cfile);
return (0); return (0);
bad: bad:
@ -271,16 +293,26 @@ token(void)
if (c == '"') { if (c == '"') {
while ((c = getc(cfile)) != EOF && c != '"') { while ((c = getc(cfile)) != EOF && c != '"') {
if (c == '\\') if (c == '\\')
c = getc(cfile); if ((c = getc(cfile)) == EOF)
break;
*cp++ = c; *cp++ = c;
if (cp == tokval + sizeof(tokval)) {
warnx("Token in .netrc too long");
return (-1);
}
} }
} else { } else {
*cp++ = c; *cp++ = c;
while ((c = getc(cfile)) != EOF while ((c = getc(cfile)) != EOF
&& c != '\n' && c != '\t' && c != ' ' && c != ',') { && c != '\n' && c != '\t' && c != ' ' && c != ',') {
if (c == '\\') if (c == '\\')
c = getc(cfile); if ((c = getc(cfile)) == EOF)
break;
*cp++ = c; *cp++ = c;
if (cp == tokval + sizeof(tokval)) {
warnx("Token in .netrc too long");
return (-1);
}
} }
} }
*cp = 0; *cp = 0;

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,8 @@
/* $NetBSD: version.h,v 1.50 2005/05/14 15:26:43 lukem Exp $ */ /* $NetBSD: version.h,v 1.4 2009/11/15 10:12:37 lukem Exp $ */
/* from NetBSD: version.h,v 1.80 2009/11/15 10:03:16 lukem Exp */
/*- /*-
* Copyright (c) 1999-2005 The NetBSD Foundation, Inc. * Copyright (c) 1999-2009 The NetBSD Foundation, Inc.
* All rights reserved. * All rights reserved.
* *
* This code is derived from software contributed to The NetBSD Foundation * This code is derived from software contributed to The NetBSD Foundation
@ -14,13 +16,6 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * 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 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
@ -40,5 +35,5 @@
#endif #endif
#ifndef FTP_VERSION #ifndef FTP_VERSION
#define FTP_VERSION "20050514" #define FTP_VERSION "20090915"
#endif #endif

495
contrib/tnftp/tnftp.h Normal file
View File

@ -0,0 +1,495 @@
/* $NetBSD: tnftp.h,v 1.33 2009/11/14 08:32:42 lukem Exp $ */
#define FTP_PRODUCT PACKAGE_NAME
#define FTP_VERSION PACKAGE_VERSION
#include "tnftp_config.h"
#include <stdio.h>
#include <ctype.h>
#include <errno.h>
#if defined(HAVE_SYS_TYPES_H)
# include <sys/types.h>
#endif
#if defined(STDC_HEADERS)
# include <stdarg.h>
# include <stdlib.h>
# include <string.h>
#endif
#if defined(HAVE_LIBGEN_H)
# include <libgen.h>
#endif
#if defined(HAVE_UNISTD_H)
# include <unistd.h>
#endif
#if defined(HAVE_POLL_H)
# include <poll.h>
#elif defined(HAVE_SYS_POLL_H)
# include <sys/poll.h>
#endif
#if defined(HAVE_SYS_SOCKET_H)
# include <sys/socket.h>
#endif
#if defined(HAVE_NETINET_IN_H)
# include <netinet/in.h>
#endif
#if defined(HAVE_NETINET_IN_SYSTM_H)
# include <netinet/in_systm.h>
#endif
#if defined(HAVE_NETINET_IP_H)
# include <netinet/ip.h>
#endif
#if defined(HAVE_NETDB_H)
# if HAVE_DECL_AI_NUMERICHOST
# include <netdb.h>
# else /* !HAVE_DECL_AI_NUMERICHOST */
# define getaddrinfo non_rfc2553_getaddrinfo
# include <netdb.h>
# undef getaddrinfo
# endif /* !HAVE_DECL_AI_NUMERICHOST */
#endif
#if defined(HAVE_ARPA_INET_H)
# include <arpa/inet.h>
#endif
#if defined(HAVE_DIRENT_H)
# include <dirent.h>
#else
# define dirent direct
# if defined(HAVE_SYS_NDIR_H)
# include <sys/ndir.h>
# endif
# if defined(HAVE_SYS_DIR_H)
# include <sys/dir.h>
# endif
# if defined(HAVE_NDIR_H)
# include <ndir.h>
# endif
#endif
#if defined(HAVE_SYS_IOCTL_H)
# include <sys/ioctl.h>
#endif
#if defined(HAVE_SYS_PARAM_H)
# include <sys/param.h>
#endif
#if defined(HAVE_SYS_STAT_H)
# include <sys/stat.h>
#endif
#if defined(HAVE_SYS_SYSLIMITS_H)
# include <sys/syslimits.h>
#endif
#if defined(HAVE_SYS_WAIT_H)
# include <sys/wait.h>
#endif
#if defined(HAVE_ARPA_FTP_H)
# include <arpa/ftp.h>
#endif
#if defined(HAVE_FCNTL_H)
# include <fcntl.h>
#endif
#if defined(HAVE_LIMITS_H)
# include <limits.h>
#endif
#if defined(HAVE_PWD_H)
# include <pwd.h>
#endif
#if defined(HAVE_SETJMP_H)
# include <setjmp.h>
#endif
#if defined(HAVE_SIGNAL_H)
# include <signal.h>
#endif
#if defined(HAVE_STDDEF_H)
# include <stddef.h>
#endif
#if defined(HAVE_TERMIOS_H)
# include <termios.h>
#endif
#if defined(HAVE_POLL)
/* we use poll */
#elif defined(HAVE_SELECT)
/* we use select */
#else /* !defined(HAVE_POLL) && !defined(HAVE_SELECT) */
# error "no poll() or select() found"
#endif
#if !defined(POLLIN)
# define POLLIN 0x0001
#endif
#if !defined(POLLOUT)
# define POLLOUT 0x0004
#endif
#if !defined(POLLRDNORM)
# define POLLRDNORM 0x0040
#endif
#if !defined(POLLWRNORM)
# define POLLWRNORM POLLOUT
#endif
#if !defined(POLLRDBAND)
# define POLLRDBAND 0x0080
#endif
#if !defined(INFTIM)
# define INFTIM -1
#endif
#if !defined(HAVE_STRUCT_POLLFD)
struct pollfd {
int fd;
short events;
short revents;
};
#endif
#if defined(TIME_WITH_SYS_TIME)
# include <sys/time.h>
# include <time.h>
#else
# if defined(HAVE_SYS_TIME_H)
# include <sys/time.h>
# else
# include <time.h>
# endif
#endif
#if defined(HAVE_ERR_H)
# include <err.h>
#endif
#if defined(USE_GLOB_H) /* not set by configure; used by other build systems */
# include <glob.h>
#else
# include "ftpglob.h"
#endif
#if defined(HAVE_PATHS_H)
# include <paths.h>
#endif
#if !defined(_PATH_BSHELL)
# define _PATH_BSHELL "/bin/sh"
#endif
#if !defined(_PATH_TMP)
# define _PATH_TMP "/tmp/"
#endif
typedef struct _stringlist {
char **sl_str;
size_t sl_max;
size_t sl_cur;
} StringList;
StringList *sl_init(void);
int sl_add(StringList *, char *);
void sl_free(StringList *, int);
char *sl_find(StringList *, char *);
#if defined(HAVE_TERMCAP_H)
# include <termcap.h>
#else
int tgetent(char *, const char *);
char *tgetstr(const char *, char **);
int tgetflag(const char *);
int tgetnum(const char *);
char *tgoto(const char *, int, int);
void tputs(const char *, int, int (*)(int));
#endif /* !HAVE_TERMCAP_H */
#if defined(HAVE_VIS_H) && defined(HAVE_STRVIS) && defined(HAVE_STRUNVIS)
# include <vis.h>
#else
# include "ftpvis.h"
#endif
#if !defined(HAVE_IN_PORT_T)
typedef unsigned short in_port_t;
#endif
#if !defined(HAVE_SA_FAMILY_T)
typedef unsigned short sa_family_t;
#endif
#if !defined(HAVE_SOCKLEN_T)
typedef unsigned int socklen_t;
#endif
#if defined(USE_INET6)
# define INET6
#endif
#if !HAVE_DECL_AI_NUMERICHOST
/* RFC 2553 */
#undef EAI_ADDRFAMILY
#define EAI_ADDRFAMILY 1 /* address family for hostname not supported */
#undef EAI_AGAIN
#define EAI_AGAIN 2 /* temporary failure in name resolution */
#undef EAI_BADFLAGS
#define EAI_BADFLAGS 3 /* invalid value for ai_flags */
#undef EAI_FAIL
#define EAI_FAIL 4 /* non-recoverable failure in name resolution */
#undef EAI_FAMILY
#define EAI_FAMILY 5 /* ai_family not supported */
#undef EAI_MEMORY
#define EAI_MEMORY 6 /* memory allocation failure */
#undef EAI_NODATA
#define EAI_NODATA 7 /* no address associated with hostname */
#undef EAI_NONAME
#define EAI_NONAME 8 /* hostname nor servname provided, or not known */
#undef EAI_SERVICE
#define EAI_SERVICE 9 /* servname not supported for ai_socktype */
#undef EAI_SOCKTYPE
#define EAI_SOCKTYPE 10 /* ai_socktype not supported */
#undef EAI_SYSTEM
#define EAI_SYSTEM 11 /* system error returned in errno */
/* KAME extensions? */
#undef EAI_BADHINTS
#define EAI_BADHINTS 12
#undef EAI_PROTOCOL
#define EAI_PROTOCOL 13
#undef EAI_MAX
#define EAI_MAX 14
/* RFC 2553 */
#undef NI_MAXHOST
#define NI_MAXHOST 1025
#undef NI_MAXSERV
#define NI_MAXSERV 32
#undef NI_NOFQDN
#define NI_NOFQDN 0x00000001
#undef NI_NUMERICHOST
#define NI_NUMERICHOST 0x00000002
#undef NI_NAMEREQD
#define NI_NAMEREQD 0x00000004
#undef NI_NUMERICSERV
#define NI_NUMERICSERV 0x00000008
#undef NI_DGRAM
#define NI_DGRAM 0x00000010
/* RFC 2553 */
#undef AI_PASSIVE
#define AI_PASSIVE 0x00000001 /* get address to use bind() */
#undef AI_CANONNAME
#define AI_CANONNAME 0x00000002 /* fill ai_canonname */
/* KAME extensions ? */
#undef AI_NUMERICHOST
#define AI_NUMERICHOST 0x00000004 /* prevent name resolution */
#undef AI_MASK
#define AI_MASK (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
/* RFC 2553 */
#undef AI_ALL
#define AI_ALL 0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */
#undef AI_V4MAPPED_CFG
#define AI_V4MAPPED_CFG 0x00000200 /* accept IPv4-mapped if kernel supports */
#undef AI_ADDRCONFIG
#define AI_ADDRCONFIG 0x00000400 /* only if any address is assigned */
#undef AI_V4MAPPED
#define AI_V4MAPPED 0x00000800 /* accept IPv4-mapped IPv6 address */
#endif /* !HAVE_DECL_AI_NUMERICHOST */
#if !HAVE_DECL_AI_NUMERICHOST && !defined(HAVE_STRUCT_ADDRINFO) \
&& !defined(USE_SOCKS)
struct addrinfo {
int ai_flags; /* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */
int ai_family; /* PF_xxx */
int ai_socktype; /* SOCK_xxx */
int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
socklen_t ai_addrlen; /* length of ai_addr */
char *ai_canonname; /* canonical name for hostname */
struct sockaddr *ai_addr; /* binary address */
struct addrinfo *ai_next; /* next structure in linked list */
};
int getaddrinfo(const char *, const char *,
const struct addrinfo *, struct addrinfo **);
int getnameinfo(const struct sockaddr *, socklen_t,
char *, size_t, char *, size_t, int);
void freeaddrinfo(struct addrinfo *);
const char *gai_strerror(int);
#endif /* !HAVE_DECL_AI_NUMERICHOST && !defined(HAVE_STRUCT_ADDRINFO) \
&& !defined(USE_SOCKS) */
#if !defined(HAVE_STRUCT_DIRENT_D_NAMLEN)
# define DIRENT_MISSING_D_NAMLEN
#endif
#if !HAVE_DECL_H_ERRNO
extern int h_errno;
#endif
#define HAVE_H_ERRNO 1 /* XXX: an assumption for now... */
#if !HAVE_DECL_FCLOSE
int fclose(FILE *);
#endif
#if !HAVE_DECL_GETPASS
char *getpass(const char *);
#endif
#if !HAVE_DECL_OPTARG
extern char *optarg;
#endif
#if !HAVE_DECL_OPTIND
extern int optind;
#endif
#if !HAVE_DECL_PCLOSE
int pclose(FILE *);
#endif
#if !HAVE_DECL_DIRNAME
char *dirname(char *);
#endif
#if !defined(HAVE_ERR)
void err(int, const char *, ...);
void errx(int, const char *, ...);
void warn(const char *, ...);
void warnx(const char *, ...);
#endif
#if !defined(HAVE_FGETLN)
char *fgetln(FILE *, size_t *);
#endif
#if !defined(HAVE_FSEEKO)
int fseeko(FILE *, off_t, int);
#endif
#if !defined(HAVE_INET_NTOP)
const char *inet_ntop(int, const void *, char *, socklen_t);
#endif
#if !defined(HAVE_INET_PTON)
int inet_pton(int, const char *, void *);
#endif
#if !defined(HAVE_MKSTEMP)
int mkstemp(char *);
#endif
#if !defined(HAVE_SETPROGNAME)
const char *getprogname(void);
void setprogname(const char *);
#endif
#if !defined(HAVE_SNPRINTF)
int snprintf(char *, size_t, const char *, ...);
#endif
#if !defined(HAVE_STRDUP)
char *strdup(const char *);
#endif
#if !defined(HAVE_STRERROR)
char *strerror(int);
#endif
#if !defined(HAVE_STRPTIME) || !HAVE_DECL_STRPTIME
char *strptime(const char *, const char *, struct tm *);
#endif
#if defined(HAVE_PRINTF_LONG_LONG) && defined(HAVE_LONG_LONG_INT)
# if !defined(HAVE_STRTOLL)
long long strtoll(const char *, char **, int);
# endif
# if !defined(LLONG_MIN)
# define LLONG_MIN (-0x7fffffffffffffffLL-1)
# endif
# if !defined(LLONG_MAX)
# define LLONG_MAX (0x7fffffffffffffffLL)
# endif
#else /* !(defined(HAVE_PRINTF_LONG_LONG) && defined(HAVE_LONG_LONG_INT)) */
# define NO_LONG_LONG 1
#endif /* !(defined(HAVE_PRINTF_LONG_LONG) && defined(HAVE_LONG_LONG_INT)) */
#if !defined(HAVE_TIMEGM)
time_t timegm(struct tm *);
#endif
#if !defined(HAVE_STRLCAT)
size_t strlcat(char *, const char *, size_t);
#endif
#if !defined(HAVE_STRLCPY)
size_t strlcpy(char *, const char *, size_t);
#endif
#if !defined(HAVE_STRSEP)
char *strsep(char **stringp, const char *delim);
#endif
#if !defined(HAVE_UTIMES)
int utimes(const char *, const struct timeval *);
#endif
#if !defined(HAVE_MEMMOVE)
# define memmove(a,b,c) bcopy((b),(a),(c))
/* XXX: add others #defines for borken systems? */
#endif
#if defined(HAVE_GETPASSPHRASE)
# define getpass getpassphrase
#endif
#if !defined(MIN)
# define MIN(a, b) ((a) < (b) ? (a) : (b))
#endif
#if !defined(MAX)
# define MAX(a, b) ((a) < (b) ? (b) : (a))
#endif
#if !defined(timersub)
# define timersub(tvp, uvp, vvp) \
do { \
(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \
(vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \
if ((vvp)->tv_usec < 0) { \
(vvp)->tv_sec--; \
(vvp)->tv_usec += 1000000; \
} \
} while (0)
#endif
#if !defined(S_ISLNK)
# define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK)
#endif
#define EPOCH_YEAR 1970
#define SECSPERHOUR 3600
#define SECSPERDAY 86400
#define TM_YEAR_BASE 1900
#if defined(USE_SOCKS) /* (Dante) SOCKS5 */
#define connect Rconnect
#define bind Rbind
#define getsockname Rgetsockname
#define getpeername Rgetpeername
#define accept Raccept
#define rresvport Rrresvport
#define bindresvport Rbindresvport
#define gethostbyname Rgethostbyname
#define gethostbyname2 Rgethostbyname2
#define sendto Rsendto
#define recvfrom Rrecvfrom
#define recvfrom Rrecvfrom
#define write Rwrite
#define writev Rwritev
#define send Rsend
#define sendmsg Rsendmsg
#define read Rread
#define readv Rreadv
#define recv Rrecv
#define recvmsg Rrecvmsg
#define getaddrinfo Rgetaddrinfo
#define getipnodebyname Rgetipnodebyname
#endif /* defined(USE_SOCKS) */

View File

@ -1,23 +1,23 @@
$Id: todo,v 1.30 2002/06/10 08:08:53 lukem Exp $ $NetBSD: todo,v 1.12 2008/12/20 15:17:58 lukem Exp $
update NEWS, README, ... Current Items
-------------
at end of configure, show summary of options used and features found autoconf test for HAVE_DECL_GETADDRINFO if providing getaddrinfo() override.
(required for UnixWare 7.1.1)
if socks is defined, disable ipv6 and use own getaddrinfo()/getnameinfo() Interix may need hack to fix detection of getpgrp() void args.
(for tron) (See pkgsrc/net/tnftp/files/src/progressbar.c 1.2)
Old Items
---------
add locale autoconf checks add locale autoconf checks
AC_CHECK_SIZEOF(off_t, 0) doesn't work on FreeBSD 4.0 because the
test doesn't include <sys/types.h>. fix autoconf?
in configure, check for ansi c compiler and barf if it fails in configure, check for ansi c compiler and barf if it fails
check if we need #defines for memcpy() et al check if we need #defines for memcpy() et al
check for utimes() decls [which system?]
possibly install editline.3 and editrc.5 possibly install editline.3 and editrc.5
system specific tests (to remove need for manual intervention): system specific tests (to remove need for manual intervention):

View File

@ -8,18 +8,18 @@
# #
#CFLAGS+=-DGATE_SERVER=\"ftp-gw.host\" # -DGATE_PORT=21 #CFLAGS+=-DGATE_SERVER=\"ftp-gw.host\" # -DGATE_PORT=21
LUKEMFTP= ${.CURDIR}/../../contrib/lukemftp TNFTP= ${.CURDIR}/../../contrib/tnftp
.PATH: ${LUKEMFTP}/src .PATH: ${TNFTP}/src
PROG= ftp PROG= ftp
SRCS= cmds.c cmdtab.c complete.c domacro.c fetch.c ftp.c main.c progressbar.c \ SRCS= cmds.c cmdtab.c complete.c domacro.c fetch.c ftp.c main.c \
ruserpass.c util.c progressbar.c ruserpass.c util.c
.if ${MK_INET6_SUPPORT} != "no" .if ${MK_INET6_SUPPORT} != "no"
CFLAGS+= -DINET6 CFLAGS+= -DINET6
.endif .endif
CFLAGS+= -I${.CURDIR} -I${LUKEMFTP} CFLAGS+= -I${.CURDIR} -I${TNFTP}
LDADD= -ledit -ltermcap -lutil LDADD= -ledit -ltermcap -lutil
DPADD= ${LIBEDIT} ${LIBTERMCAP} ${LIBUTIL} DPADD= ${LIBEDIT} ${LIBTERMCAP} ${LIBUTIL}

View File

@ -1,285 +0,0 @@
/* $FreeBSD$ */
/* config.h. Generated automatically by configure. */
/* config.h.in. Generated automatically from configure.in by autoheader. */
/* $Id: config.h.in,v 1.24 2000/09/18 00:40:12 lukem Exp $ */
/* Define if on AIX 3.
System headers sometimes define this.
We just want to avoid a redefinition error message. */
#ifndef _ALL_SOURCE
/* #undef _ALL_SOURCE */
#endif
/* Define if the closedir function returns void instead of int. */
/* #undef CLOSEDIR_VOID */
/* Define if the `getpgrp' function takes no argument. */
#define GETPGRP_VOID 1
/* Define if your C compiler doesn't accept -c and -o together. */
/* #undef NO_MINUS_C_MINUS_O */
/* Define if your Fortran 77 compiler doesn't accept -c and -o together. */
/* #undef F77_NO_MINUS_C_MINUS_O */
/* Define to `long' if <sys/types.h> doesn't define. */
/* #undef off_t */
/* Define to the type of arg1 for select(). */
/* #undef SELECT_TYPE_ARG1 */
/* Define to the type of args 2, 3 and 4 for select(). */
/* #undef SELECT_TYPE_ARG234 */
/* Define to the type of arg5 for select(). */
/* #undef SELECT_TYPE_ARG5 */
/* Define if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Define if you can safely include both <sys/time.h> and <time.h>. */
#define TIME_WITH_SYS_TIME 1
/* Define if the closedir function returns void instead of int. */
/* #undef VOID_CLOSEDIR */
/* The number of bytes in a off_t. */
#define SIZEOF_OFF_T 0
/* Define if you have the err function. */
#define HAVE_ERR 1
/* Define if you have the fgetln function. */
#define HAVE_FGETLN 1
/* Define if you have the fparseln function. */
#define HAVE_FPARSELN 1
/* Define if you have the fseeko function. */
#define HAVE_FSEEKO 1
/* Define if you have the getaddrinfo function. */
#define HAVE_GETADDRINFO 1
/* Define if you have the gethostbyname2 function. */
#define HAVE_GETHOSTBYNAME2 1
/* Define if you have the getnameinfo function. */
#define HAVE_GETNAMEINFO 1
/* Define if you have the getpassphrase function. */
/* #undef HAVE_GETPASSPHRASE */
/* Define if you have the getpgrp function. */
#define HAVE_GETPGRP 1
/* Define if you have the glob function. */
#define USE_GLOB_H 1
/* Define if you have the inet_ntop function. */
#define HAVE_INET_NTOP 1
/* Define if you have the inet_pton function. */
#define HAVE_INET_PTON 1
/* Define if you have the issetugid function. */
#define HAVE_ISSETUGID 1
/* Define if you have the memmove function. */
#define HAVE_MEMMOVE 1
/* Define if you have the mkstemp function. */
#define HAVE_MKSTEMP 1
/* Define if you have the poll function. */
#define HAVE_POLL 1
/* Define if you have the select function. */
#define HAVE_SELECT 1
/* Define if you have the setprogname function. */
#define HAVE_SETPROGNAME 1
/* Define if you have the sl_init function. */
#define HAVE_SL_INIT 1
/* Define if you have the snprintf function. */
#define HAVE_SNPRINTF 1
/* Define if you have the strdup function. */
#define HAVE_STRDUP 1
/* Define if you have the strerror function. */
#define HAVE_STRERROR 1
/* Define if you have the strlcat function. */
#define HAVE_STRLCAT 1
/* Define if you have the strlcpy function. */
#define HAVE_STRLCPY 1
/* Define if you have the strptime function. */
#define HAVE_STRPTIME 1
/* Define if you have the strsep function. */
#define HAVE_STRSEP 1
/* Define if you have the strtoll function. */
#define HAVE_STRTOLL 1
/* Define if you have the strunvis function. */
#define HAVE_STRUNVIS 1
/* Define if you have the strvis function. */
#define HAVE_STRVIS 1
/* Define if you have the timegm function. */
#define HAVE_TIMEGM 1
/* Define if you have the usleep function. */
#define HAVE_USLEEP 1
/* Define if you have the <arpa/nameser.h> header file. */
#define HAVE_ARPA_NAMESER_H 1
/* Define if you have the <dirent.h> header file. */
#define HAVE_DIRENT_H 1
/* Define if you have the <err.h> header file. */
#define HAVE_ERR_H 1
/* Define if you have the <libutil.h> header file. */
#define HAVE_LIBUTIL_H 1
/* Define if you have the <ndir.h> header file. */
/* #undef HAVE_NDIR_H */
/* Define if you have the <paths.h> header file. */
#define HAVE_PATHS_H 1
/* Define if you have the <poll.h> header file. */
#define HAVE_POLL_H 1
/* Define if you have the <regex.h> header file. */
#define HAVE_REGEX_H 1
/* Define if you have the <sys/dir.h> header file. */
#define HAVE_SYS_DIR_H 1
/* Define if you have the <sys/ndir.h> header file. */
/* #undef HAVE_SYS_NDIR_H */
/* Define if you have the <sys/poll.h> header file. */
#define HAVE_SYS_POLL_H 1
/* Define if you have the <termcap.h> header file. */
#define HAVE_TERMCAP_H 1
/* Define if you have the <util.h> header file. */
/* #undef HAVE_UTIL_H */
/* Define if you have the <vis.h> header file. */
#define HAVE_VIS_H 1
/* Define if you have the nsl library (-lnsl). */
/* #undef HAVE_LIBNSL */
/* Define if you have the socket library (-lsocket). */
/* #undef HAVE_LIBSOCKET */
/* Define if you have the tinfo library (-ltinfo). */
#define HAVE_LIBTINFO 1
/* Define if you have the util library (-lutil). */
#define HAVE_LIBUTIL 1
/* Define if your compiler supports `long long' */
#define HAVE_LONG_LONG 1
/* Define if in_port_t exists */
#define HAVE_IN_PORT_T 1
/* Define if sa_family_t exists in <sys/socket.h> */
#define HAVE_SA_FAMILY_T 1
/* Define if struct sockaddr.sa_len exists (implies sockaddr_in.sin_len, etc) */
#define HAVE_SOCKADDR_SA_LEN 1
/* Define if socklen_t exists */
#define HAVE_SOCKLEN_T 1
/* Define if AF_INET6 exists in <sys/socket.h> */
#define HAVE_AF_INET6 1
/* Define if `struct sockaddr_in6' exists in <netinet/in.h> */
#define HAVE_SOCKADDR_IN6 1
/* Define if `struct addrinfo' exists in <netdb.h> */
#define HAVE_ADDRINFO 1
/*
* Define if <netdb.h> contains AI_NUMERICHOST et al.
* Systems which only implement RFC2133 will need this.
*/
#define HAVE_RFC2553_NETDB 1
/* Define if `struct direct' has a d_namlen element */
#define HAVE_D_NAMLEN 1
/* Define if GLOB_BRACE exists in <glob.h> */
#define HAVE_GLOB_BRACE 1
/* Define if h_errno exists in <netdb.h> */
#define HAVE_H_ERRNO_D 1
/* Define if fclose() is declared in <stdio.h> */
#define HAVE_FCLOSE_D 1
/* Define if getpass() is declared in <stdlib.h> or <unistd.h> */
#define HAVE_GETPASS_D 1
/* Define if optarg is declared in <stdlib.h> or <unistd.h> */
#define HAVE_OPTARG_D 1
/* Define if optind is declared in <stdlib.h> or <unistd.h> */
#define HAVE_OPTIND_D 1
/* Define if pclose() is declared in <stdio.h> */
#define HAVE_PCLOSE_D 1
/* Define if `long long' is supported and sizeof(off_t) >= 8 */
#define HAVE_QUAD_SUPPORT 1
/* Define if strptime() is declared in <time.h> */
#define HAVE_STRPTIME_D 1
/*
* Define this if compiling with SOCKS (the firewall traversal library).
* Also, you must define connect, getsockname, bind, accept, listen, and
* select to their R-versions.
*/
/* #undef SOCKS */
/* #undef SOCKS4 */
/* #undef SOCKS5 */
/* #undef connect */
/* #undef getsockname */
/* #undef bind */
/* #undef accept */
/* #undef listen */
/* #undef select */
/* #undef dup */
/* #undef dup2 */
/* #undef fclose */
/* #undef gethostbyname */
/* #undef getpeername */
/* #undef read */
/* #undef recv */
/* #undef recvfrom */
/* #undef rresvport */
/* #undef send */
/* #undef sendto */
/* #undef shutdown */
/* #undef write */

514
usr.bin/ftp/tnftp_config.h Normal file
View File

@ -0,0 +1,514 @@
/* $FreeBSD$ */
/* tnftp_config.h. Generated from tnftp_config.h.in by configure. */
/* tnftp_config.h.in. Generated from configure.ac by autoheader. */
/* Define to 1 if the `closedir' function returns void instead of `int'. */
/* #undef CLOSEDIR_VOID */
/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
systems. This function is required for `alloca.c' support on those systems.
*/
/* #undef CRAY_STACKSEG_END */
/* Define to 1 if using `alloca.c'. */
/* #undef C_ALLOCA */
/* Define to 1 if the `getpgrp' function requires zero arguments. */
#define GETPGRP_VOID 1
/* Define to 1 if `TIOCGWINSZ' requires <sys/ioctl.h>. */
/* #undef GWINSZ_IN_SYS_IOCTL */
/* Define to 1 if you have `alloca', as a function or macro. */
#define HAVE_ALLOCA 1
/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
*/
/* #undef HAVE_ALLOCA_H */
/* Define to 1 if you have the <arpa/ftp.h> header file. */
#define HAVE_ARPA_FTP_H 1
/* Define to 1 if you have the <arpa/inet.h> header file. */
#define HAVE_ARPA_INET_H 1
/* Define to 1 if you have the <arpa/nameser.h> header file. */
#define HAVE_ARPA_NAMESER_H 1
/* Define to 1 if you have the declaration of `AF_INET6', and to 0 if you
don't. */
#define HAVE_DECL_AF_INET6 1
/* Define to 1 if you have the declaration of `AI_NUMERICHOST', and to 0 if
you don't. */
#define HAVE_DECL_AI_NUMERICHOST 1
/* Define to 1 if you have the declaration of `dirname', and to 0 if you
don't. */
#define HAVE_DECL_DIRNAME 1
/* Define to 1 if you have the declaration of `fclose', and to 0 if you don't.
*/
#define HAVE_DECL_FCLOSE 1
/* Define to 1 if you have the declaration of `getpass', and to 0 if you
don't. */
#define HAVE_DECL_GETPASS 1
/* Define to 1 if you have the declaration of `h_errno', and to 0 if you
don't. */
#define HAVE_DECL_H_ERRNO 1
/* Define to 1 if you have the declaration of `NS_IN6ADDRSZ', and to 0 if you
don't. */
#define HAVE_DECL_NS_IN6ADDRSZ 1
/* Define to 1 if you have the declaration of `optarg', and to 0 if you don't.
*/
#define HAVE_DECL_OPTARG 1
/* Define to 1 if you have the declaration of `optind', and to 0 if you don't.
*/
#define HAVE_DECL_OPTIND 1
/* Define to 1 if you have the declaration of `pclose', and to 0 if you don't.
*/
#define HAVE_DECL_PCLOSE 1
/* Define to 1 if you have the declaration of `strptime', and to 0 if you
don't. */
#define HAVE_DECL_STRPTIME 1
/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
*/
#define HAVE_DIRENT_H 1
/* Define to 1 if you have the `dirname' function. */
#define HAVE_DIRNAME 1
/* Define to 1 if you have the <dlfcn.h> header file. */
#define HAVE_DLFCN_H 1
/* Define to 1 if you have the `err' function. */
#define HAVE_ERR 1
/* Define to 1 if you have the <err.h> header file. */
#define HAVE_ERR_H 1
/* Define to 1 if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1
/* Define to 1 if you have the `fgetln' function. */
#define HAVE_FGETLN 1
/* Define to 1 if you have the `fork' function. */
#define HAVE_FORK 1
/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
#define HAVE_FSEEKO 1
/* Define to 1 if you have the `getaddrinfo' function. */
#define HAVE_GETADDRINFO 1
/* Define to 1 if you have the `getcwd' function. */
#define HAVE_GETCWD 1
/* Define to 1 if you have the `gethostbyaddr' function. */
#define HAVE_GETHOSTBYADDR 1
/* Define to 1 if you have the `gethostbyname' function. */
#define HAVE_GETHOSTBYNAME 1
/* Define to 1 if you have the `gethostbyname2' function. */
#define HAVE_GETHOSTBYNAME2 1
/* Define to 1 if you have the `gethostname' function. */
#define HAVE_GETHOSTNAME 1
/* Define to 1 if you have the `getnameinfo' function. */
#define HAVE_GETNAMEINFO 1
/* Define to 1 if you have the `getpass' function. */
#define HAVE_GETPASS 1
/* Define to 1 if you have the `getpassphrase' function. */
/* #undef HAVE_GETPASSPHRASE */
/* Define to 1 if you have the `getpgrp' function. */
#define HAVE_GETPGRP 1
/* Define to 1 if you have the `gettimeofday' function. */
#define HAVE_GETTIMEOFDAY 1
/* Define to 1 if you have the `inet_ntop' function. */
#define HAVE_INET_NTOP 1
/* Define to 1 if you have the `inet_pton' function. */
#define HAVE_INET_PTON 1
/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1
/* Define to 1 if the system has the type `in_port_t'. */
#define HAVE_IN_PORT_T 1
/* Define to 1 if you have the `isascii' function. */
#define HAVE_ISASCII 1
/* Define to 1 if you have the <libgen.h> header file. */
#define HAVE_LIBGEN_H 1
/* Define to 1 if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1
/* Define to 1 if the system has the type `long double'. */
#define HAVE_LONG_DOUBLE 1
/* Define to 1 if the system has the type `long long int'. */
#define HAVE_LONG_LONG_INT 1
/* Define to 1 if you have the <malloc.h> header file. */
/* #undef HAVE_MALLOC_H */
/* Define to 1 if you have the `memchr' function. */
#define HAVE_MEMCHR 1
/* Define to 1 if you have the `memmove' function. */
#define HAVE_MEMMOVE 1
/* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1
/* Define to 1 if you have the `memset' function. */
#define HAVE_MEMSET 1
/* Define to 1 if you have the `mkstemp' function. */
#define HAVE_MKSTEMP 1
/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
/* #undef HAVE_NDIR_H */
/* Define to 1 if you have the <netdb.h> header file. */
#define HAVE_NETDB_H 1
/* Define to 1 if you have the <netinet/in.h> header file. */
#define HAVE_NETINET_IN_H 1
/* Define to 1 if you have the <netinet/in_systm.h> header file. */
#define HAVE_NETINET_IN_SYSTM_H 1
/* Define to 1 if you have the <netinet/ip.h> header file. */
#define HAVE_NETINET_IP_H 1
/* Define to 1 if you have the <paths.h> header file. */
#define HAVE_PATHS_H 1
/* Define if we have poll() and it is not emulated. */
#define HAVE_POLL 1
/* Define to 1 if you have the <poll.h> header file. */
#define HAVE_POLL_H 1
/* Define if `long long' is supported and *printf() supports %lld or %qd to
print them. */
#define HAVE_PRINTF_LONG_LONG 1
/* Define if *printf() uses %qd to print `long long' (otherwise uses %lld). */
/* #undef HAVE_PRINTF_QD */
/* Define to 1 if you have the <pwd.h> header file. */
#define HAVE_PWD_H 1
/* Define to 1 if you have the `realpath' function. */
#define HAVE_REALPATH 1
/* Define to 1 if you have the `regcomp' function. */
#define HAVE_REGCOMP 1
/* Define to 1 if you have the <regex.h> header file. */
#define HAVE_REGEX_H 1
/* Define to 1 if you have the <resolv.h> header file. */
#define HAVE_RESOLV_H 1
/* Define to 1 if the system has the type `sa_family_t'. */
#define HAVE_SA_FAMILY_T 1
/* Define to 1 if you have the `select' function. */
#define HAVE_SELECT 1
/* Define to 1 if you have the <setjmp.h> header file. */
#define HAVE_SETJMP_H 1
/* Define to 1 if you have the `setlocale' function. */
#define HAVE_SETLOCALE 1
/* Define to 1 if you have the `setprogname' function. */
#define HAVE_SETPROGNAME 1
/* Define to 1 if you have the <signal.h> header file. */
#define HAVE_SIGNAL_H 1
/* Define to 1 if you have the `sl_init' function. */
#define HAVE_SL_INIT 1
/* Define to 1 if you have the `snprintf' function. */
#define HAVE_SNPRINTF 1
/* Define to 1 if you have the `socket' function. */
#define HAVE_SOCKET 1
/* Define to 1 if the system has the type `socklen_t'. */
#define HAVE_SOCKLEN_T 1
/* Define to 1 if you have the <stddef.h> header file. */
#define HAVE_STDDEF_H 1
/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1
/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
/* Define to 1 if you have the `strcasecmp' function. */
#define HAVE_STRCASECMP 1
/* Define to 1 if you have the `strchr' function. */
#define HAVE_STRCHR 1
/* Define to 1 if you have the `strcoll' function and it is properly defined.
*/
#define HAVE_STRCOLL 1
/* Define to 1 if you have the `strcspn' function. */
#define HAVE_STRCSPN 1
/* Define to 1 if you have the `strdup' function. */
#define HAVE_STRDUP 1
/* Define to 1 if you have the `strerror' function. */
#define HAVE_STRERROR 1
/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1
/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1
/* Define to 1 if you have the `strlcat' function. */
#define HAVE_STRLCAT 1
/* Define to 1 if you have the `strlcpy' function. */
#define HAVE_STRLCPY 1
/* Define to 1 if you have the `strncasecmp' function. */
#define HAVE_STRNCASECMP 1
/* Define to 1 if you have the `strpbrk' function. */
#define HAVE_STRPBRK 1
/* Define to 1 if you have the `strptime' function. */
#define HAVE_STRPTIME 1
/* Define to 1 if you have the `strrchr' function. */
#define HAVE_STRRCHR 1
/* Define to 1 if you have the `strsep' function. */
#define HAVE_STRSEP 1
/* Define to 1 if you have the `strstr' function. */
#define HAVE_STRSTR 1
/* Define to 1 if you have the `strtol' function. */
#define HAVE_STRTOL 1
/* Define to 1 if you have the `strtoll' function. */
#define HAVE_STRTOLL 1
/* Define to 1 if you have the `strtoul' function. */
#define HAVE_STRTOUL 1
/* Define to 1 if the system has the type `struct addrinfo'. */
#define HAVE_STRUCT_ADDRINFO 1
/* Define to 1 if `struct dirent' is a member of `d_namlen'. */
#define HAVE_STRUCT_DIRENT_D_NAMLEN 1
/* Define to 1 if the system has the type `struct pollfd'. */
#define HAVE_STRUCT_POLLFD 1
/* Define to 1 if the system has the type `struct sockaddr_in6'. */
#define HAVE_STRUCT_SOCKADDR_IN6 1
/* Define to 1 if `struct sockaddr_in' is a member of `sin_len'. */
#define HAVE_STRUCT_SOCKADDR_IN_SIN_LEN 1
/* Define to 1 if `struct sockaddr' is a member of `sa_len'. */
#define HAVE_STRUCT_SOCKADDR_SA_LEN 1
/* Define to 1 if you have the `strunvis' function. */
#define HAVE_STRUNVIS 1
/* Define to 1 if you have the `strvis' function. */
#define HAVE_STRVIS 1
/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
*/
/* #undef HAVE_SYS_DIR_H */
/* Define to 1 if you have the <sys/ioctl.h> header file. */
#define HAVE_SYS_IOCTL_H 1
/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
*/
/* #undef HAVE_SYS_NDIR_H */
/* Define to 1 if you have the <sys/param.h> header file. */
#define HAVE_SYS_PARAM_H 1
/* Define to 1 if you have the <sys/poll.h> header file. */
#define HAVE_SYS_POLL_H 1
/* Define to 1 if you have the <sys/socket.h> header file. */
#define HAVE_SYS_SOCKET_H 1
/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1
/* Define to 1 if you have the <sys/syslimits.h> header file. */
#define HAVE_SYS_SYSLIMITS_H 1
/* Define to 1 if you have the <sys/time.h> header file. */
#define HAVE_SYS_TIME_H 1
/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1
/* Define to 1 if you have the <sys/wait.h> header file. */
#define HAVE_SYS_WAIT_H 1
/* Define to 1 if you have the <termcap.h> header file. */
#define HAVE_TERMCAP_H 1
/* Define to 1 if you have the <termios.h> header file. */
#define HAVE_TERMIOS_H 1
/* Define to 1 if you have the `timegm' function. */
#define HAVE_TIMEGM 1
/* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1
/* Define to 1 if you have the `usleep' function. */
#define HAVE_USLEEP 1
/* Define to 1 if you have the `utime' function. */
#define HAVE_UTIME 1
/* Define to 1 if you have the `utimes' function. */
#define HAVE_UTIMES 1
/* Define to 1 if you have the <utime.h> header file. */
#define HAVE_UTIME_H 1
/* Define to 1 if you have the `vfork' function. */
#define HAVE_VFORK 1
/* Define to 1 if you have the <vfork.h> header file. */
/* #undef HAVE_VFORK_H */
/* Define to 1 if you have the <vis.h> header file. */
#define HAVE_VIS_H 1
/* Define to 1 if `fork' works. */
#define HAVE_WORKING_FORK 1
/* Define to 1 if `vfork' works. */
#define HAVE_WORKING_VFORK 1
/* Name of package */
#define PACKAGE "tnftp"
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "lukem@NetBSD.org"
/* Define to the full name of this package. */
#define PACKAGE_NAME "tnftp"
/* Define to the full name and version of this package. */
#define PACKAGE_STRING "tnftp 20100108"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "tnftp"
/* Define to the home page for this package. */
#define PACKAGE_URL ""
/* Define to the version of this package. */
#define PACKAGE_VERSION "20100108"
/* Define as the return type of signal handlers (`int' or `void'). */
#define RETSIGTYPE void
/* If using the C implementation of alloca, define if you know the
direction of stack growth for your system; otherwise it will be
automatically deduced at runtime.
STACK_DIRECTION > 0 => grows toward higher addresses
STACK_DIRECTION < 0 => grows toward lower addresses
STACK_DIRECTION = 0 => direction of growth unknown */
/* #undef STACK_DIRECTION */
/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
/* #undef STAT_MACROS_BROKEN */
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
#define TIME_WITH_SYS_TIME 1
/* Define to 1 if your <sys/time.h> declares `struct tm'. */
/* #undef TM_IN_SYS_TIME */
/* Define if using (Dante) SOCKS5 proxy. */
/* #undef USE_SOCKS */
/* Version number of package */
#define VERSION "20100108"
/* Number of bits in a file offset, on hosts where this is settable. */
/* #undef _FILE_OFFSET_BITS */
/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
/* #undef _LARGEFILE_SOURCE */
/* Define for large files, on AIX-style hosts. */
/* #undef _LARGE_FILES */
/* Define for Solaris 2.5.1 so the uint32_t typedef from <sys/synch.h>,
<pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
#define below would cause a syntax error. */
/* #undef _UINT32_T */
/* Define to `long int' if <sys/types.h> does not define. */
/* #undef off_t */
/* Define to `int' if <sys/types.h> does not define. */
/* #undef pid_t */
/* Define to `unsigned int' if <sys/types.h> does not define. */
/* #undef size_t */
/* Define to the type of an unsigned integer type of width exactly 32 bits if
such a type exists and the standard includes do not define it. */
/* #undef uint32_t */
/* Define as `fork' if `vfork' does not work. */
/* #undef vfork */
/* Define if using IPv6 support. */
/* Commented out so this can be selected fromt he Makefile -gavin */
/* #define USE_INET6 1 */
#define USE_GLOB_H 1