Garbage collect all of the builtin ftp client support.
authorKen Hornstein <kenh@pobox.com>
Fri, 6 Jan 2012 15:48:03 +0000 (10:48 -0500)
committerKen Hornstein <kenh@pobox.com>
Fri, 6 Jan 2012 15:48:03 +0000 (10:48 -0500)
acconfig.h
docs/pending-release-notes
h/arpa_ftp.h [deleted file]
uip/Makefile.in
uip/ftpsbr.c [deleted file]
uip/mhbuildsbr.c
uip/mhparse.c

index a326761..a6d8742 100644 (file)
 /* #define REALLYDUMB  1 */
 
 /*
- * Compile simple ftp client into mhn.  This will be used by mhn
- * for ftp access unless you have specified another access method
- * in your .mh_profile or mhn.defaults.  Use the "mhn-access-ftp"
- * profile entry to override this.  Check mhn(1) man page for
- * details.
- */
-#define BUILTIN_FTP 1
-
-/*
  * If you enable POP support, this is the the port name that nmh will use.  Make
  * sure this is defined in your /etc/services file (or its NIS/NIS+ equivalent).
  * If you are using KPOP, you will need to change this to "kpop" unless you want
index 14ad579..83c39ee 100644 (file)
@@ -8,3 +8,7 @@ Things to add to the release notes for the next full release:
 - Old code enabled by the UCI preprocessor definition has been
   garbage-collected.
 - LOCKDIR is now configurable via --enable-lockdir
+- All configuration options that were formerly only adjustable via editing
+  config.h have been removed.
+- Support for the built-in ftp client (used when dealing with external body
+  message parts in MIME messages) has been removed.
diff --git a/h/arpa_ftp.h b/h/arpa_ftp.h
deleted file mode 100644 (file)
index 64532b9..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 1983, 1989, 1993
- *     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. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. 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.h       8.1 (Berkeley) 6/2/93
- */
-
-#ifndef _FTP_H_
-#define        _FTP_H_
-
-/* Definitions for FTP; see RFC-765. */
-
-/*
- * Reply codes.
- */
-#define PRELIM         1       /* positive preliminary */
-#define COMPLETE       2       /* positive completion */
-#define CONTINUE       3       /* positive intermediate */
-#define TRANSIENT      4       /* transient negative completion */
-#define ERROR          5       /* permanent negative completion */
-
-/*
- * Type codes
- */
-#define        TYPE_A          1       /* ASCII */
-#define        TYPE_E          2       /* EBCDIC */
-#define        TYPE_I          3       /* image */
-#define        TYPE_L          4       /* local byte size */
-
-#ifdef FTP_NAMES
-char *typenames[] =  {"0", "ASCII", "EBCDIC", "Image", "Local" };
-#endif
-
-/*
- * Form codes
- */
-#define        FORM_N          1       /* non-print */
-#define        FORM_T          2       /* telnet format effectors */
-#define        FORM_C          3       /* carriage control (ASA) */
-#ifdef FTP_NAMES
-char *formnames[] =  {"0", "Nonprint", "Telnet", "Carriage-control" };
-#endif
-
-/*
- * Structure codes
- */
-#define        STRU_F          1       /* file (no record structure) */
-#define        STRU_R          2       /* record structure */
-#define        STRU_P          3       /* page structure */
-#ifdef FTP_NAMES
-char *strunames[] =  {"0", "File", "Record", "Page" };
-#endif
-
-/*
- * Mode types
- */
-#define        MODE_S          1       /* stream */
-#define        MODE_B          2       /* block */
-#define        MODE_C          3       /* compressed */
-#ifdef FTP_NAMES
-char *modenames[] =  {"0", "Stream", "Block", "Compressed" };
-#endif
-
-/*
- * Record Tokens
- */
-#define        REC_ESC         '\377'  /* Record-mode Escape */
-#define        REC_EOR         '\001'  /* Record-mode End-of-Record */
-#define REC_EOF                '\002'  /* Record-mode End-of-File */
-
-/*
- * Block Header
- */
-#define        BLK_EOR         0x80    /* Block is End-of-Record */
-#define        BLK_EOF         0x40    /* Block is End-of-File */
-#define BLK_ERRORS     0x20    /* Block is suspected of containing errors */
-#define        BLK_RESTART     0x10    /* Block is Restart Marker */
-
-#define        BLK_BYTECOUNT   2       /* Bytes in this block */
-
-#endif /* !_FTP_H_ */
index 5b5ed02..d676db0 100644 (file)
@@ -68,7 +68,7 @@ SCMDS = inc
 # source files
 SRCS = ali.c aliasbr.c anno.c annosbr.c ap.c burst.c comp.c              \
        conflict.c dist.c distsbr.c dp.c dropsbr.c flist.c fmtdump.c      \
-       folder.c forw.c ftpsbr.c inc.c install-mh.c mark.c md5.c mhbuild.c \
+       folder.c forw.c inc.c install-mh.c mark.c md5.c mhbuild.c         \
        mhbuildsbr.c mhcachesbr.c mhfree.c mhl.c mhlist.c mhlistsbr.c     \
        mhlsbr.c mhmail.c mhmisc.c mhn.c mhoutsbr.c mhparam.c mhparse.c   \
        mhpath.c mhshow.c mhshowsbr.c mhstore.c mhstoresbr.c mhtest.c     \
@@ -135,20 +135,20 @@ install-mh: install-mh.o $(LOCALLIBS)
 mark: mark.o $(LOCALLIBS)
        $(LINK) mark.o $(LINKLIBS)
 
-mhbuild: mhbuild.o mhbuildsbr.o mhcachesbr.o mhlistsbr.o mhoutsbr.o mhmisc.o mhfree.o mhparse.o ftpsbr.o termsbr.o md5.o $(LOCALLIBS)
-       $(LINK) mhbuild.o mhbuildsbr.o mhcachesbr.o mhlistsbr.o mhoutsbr.o mhmisc.o mhfree.o mhparse.o ftpsbr.o md5.o $(LINKLIBS) $(TERMLIB)
+mhbuild: mhbuild.o mhbuildsbr.o mhcachesbr.o mhlistsbr.o mhoutsbr.o mhmisc.o mhfree.o mhparse.o termsbr.o md5.o $(LOCALLIBS)
+       $(LINK) mhbuild.o mhbuildsbr.o mhcachesbr.o mhlistsbr.o mhoutsbr.o mhmisc.o mhfree.o mhparse.o md5.o $(LINKLIBS) $(TERMLIB)
 
 mhl: mhl.o mhlsbr.o termsbr.o $(LOCALLIBS)
        $(LINK) mhl.o mhlsbr.o termsbr.o $(LINKLIBS) $(TERMLIB)
 
-mhlist: mhlist.o mhparse.o mhcachesbr.o mhlistsbr.o mhmisc.o mhfree.o ftpsbr.o termsbr.o md5.o $(LOCALLIBS)
-       $(LINK) mhlist.o mhparse.o mhcachesbr.o mhlistsbr.o mhmisc.o mhfree.o ftpsbr.o termsbr.o md5.o $(LINKLIBS) $(TERMLIB)
+mhlist: mhlist.o mhparse.o mhcachesbr.o mhlistsbr.o mhmisc.o mhfree.o termsbr.o md5.o $(LOCALLIBS)
+       $(LINK) mhlist.o mhparse.o mhcachesbr.o mhlistsbr.o mhmisc.o mhfree.o termsbr.o md5.o $(LINKLIBS) $(TERMLIB)
 
 mhmail: mhmail.o $(LOCALLIBS)
        $(LINK) mhmail.o $(LINKLIBS)
 
-mhn: mhn.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhstoresbr.o mhmisc.o mhfree.o ftpsbr.o termsbr.o md5.o $(LOCALLIBS)
-       $(LINK) mhn.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhstoresbr.o mhmisc.o mhfree.o ftpsbr.o termsbr.o md5.o $(LINKLIBS) $(TERMLIB)
+mhn: mhn.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhstoresbr.o mhmisc.o mhfree.o termsbr.o md5.o $(LOCALLIBS)
+       $(LINK) mhn.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhstoresbr.o mhmisc.o mhfree.o termsbr.o md5.o $(LINKLIBS) $(TERMLIB)
 
 mhparam: mhparam.o $(LOCALLIBS)
        $(LINK) mhparam.o $(LINKLIBS)
@@ -156,14 +156,14 @@ mhparam: mhparam.o $(LOCALLIBS)
 mhpath: mhpath.o $(LOCALLIBS)
        $(LINK) mhpath.o $(LINKLIBS)
 
-mhshow: mhshow.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhmisc.o mhfree.o ftpsbr.o termsbr.o md5.o $(LOCALLIBS)
-       $(LINK) mhshow.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhmisc.o mhfree.o ftpsbr.o termsbr.o md5.o $(LINKLIBS) $(TERMLIB)
+mhshow: mhshow.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhmisc.o mhfree.o termsbr.o md5.o $(LOCALLIBS)
+       $(LINK) mhshow.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhmisc.o mhfree.o termsbr.o md5.o $(LINKLIBS) $(TERMLIB)
 
-mhstore: mhstore.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhstoresbr.o mhmisc.o mhfree.o ftpsbr.o termsbr.o md5.o $(LOCALLIBS)
-       $(LINK) mhstore.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhstoresbr.o mhmisc.o mhfree.o ftpsbr.o termsbr.o md5.o $(LINKLIBS) $(TERMLIB)
+mhstore: mhstore.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhstoresbr.o mhmisc.o mhfree.o termsbr.o md5.o $(LOCALLIBS)
+       $(LINK) mhstore.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhstoresbr.o mhmisc.o mhfree.o termsbr.o md5.o $(LINKLIBS) $(TERMLIB)
 
-mhtest: mhtest.o mhparse.o mhcachesbr.o mhoutsbr.o mhmisc.o mhfree.o ftpsbr.o termsbr.o md5.o $(LOCALLIBS)
-       $(LINK) mhtest.o mhparse.o mhcachesbr.o mhoutsbr.o mhmisc.o mhfree.o ftpsbr.o termsbr.o md5.o $(LINKLIBS) $(TERMLIB)
+mhtest: mhtest.o mhparse.o mhcachesbr.o mhoutsbr.o mhmisc.o mhfree.o termsbr.o md5.o $(LOCALLIBS)
+       $(LINK) mhtest.o mhparse.o mhcachesbr.o mhoutsbr.o mhmisc.o mhfree.o termsbr.o md5.o $(LINKLIBS) $(TERMLIB)
 
 msgchk: msgchk.o $(POPLIB) $(LOCALLIBS)
        $(LINK) msgchk.o $(POPLIB) $(LINKLIBS)
diff --git a/uip/ftpsbr.c b/uip/ftpsbr.c
deleted file mode 100644 (file)
index 0ffca35..0000000
+++ /dev/null
@@ -1,515 +0,0 @@
-/*
- * ftpsbr.c -- simple FTP client library
- *
- * This code is Copyright (c) 2002, by the authors of nmh.  See the
- * COPYRIGHT file in the root directory of the nmh distribution for
- * complete copyright information.
- */
-
-#include <h/mh.h>
-#include <h/mime.h>
-
-#include "h/arpa_ftp.h"
-
-#define        v_debug debugsw
-#define        v_verbose verbosw
-
-static int ftp_fd = NOTOK;
-static int data_fd = NOTOK;
-
-static int v_noise;
-
-extern int v_debug;
-extern int v_verbose;
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <errno.h>
-
-#define        start_tcp_client(res) \
-       socket (res->ai_family, res->ai_socktype, res->ai_protocol)
-
-#define        join_tcp_server(fd, sock, len) \
-       connect ((fd), (struct sockaddr *) (sock), len)
-
-/*
- * prototypes
- */
-int ftp_get (char *, char *, char *, char *, char *, char *, int, int);
-int ftp_trans (char *, char *, char *, char *, char *, char *, char *, int, int);
-
-/*
- * static prototypes
- */
-static int start_tcp_server (struct sockaddr_in *, int, int, int);
-static void _asnprintf (char *, int, char *, va_list);
-static int ftp_quit (void);
-static int ftp_read (char *, char *, char *, int);
-static int initconn (void);
-static int dataconn (void);
-static int command (int arg1, ...);
-static int vcommand (int, va_list);
-static int getreply (int, int);
-
-
-static int
-start_tcp_server (struct sockaddr_in *sock, int backlog, int opt1, int opt2)
-{
-    int eindex, sd;
-
-    if ((sd = socket (AF_INET, SOCK_STREAM, 0)) == NOTOK)
-       return NOTOK;
-
-    if (bind (sd, (struct sockaddr *) sock, sizeof *sock) == NOTOK) {
-       eindex = errno;
-       close (sd);
-       errno = eindex;
-    } else {
-       listen (sd, backlog);
-    }
-
-    return sd;
-}
-
-
-static int __len__;
-
-#define        join_tcp_client(fd,sock) \
-       accept ((fd), (struct sockaddr *) (sock), \
-               (__len__ = sizeof *(sock), &__len__))
-
-#define        read_tcp_socket  read
-#define        write_tcp_socket write
-#define        close_tcp_socket close
-
-static void
-_asnprintf (char *bp, int len_bp, char *what, va_list ap)
-{
-    int eindex, len;
-    char *fmt;
-
-    eindex = errno;
-
-    *bp = '\0';
-    fmt = va_arg (ap, char *);
-
-    if (fmt) {
-       vsnprintf(bp, len_bp, fmt, ap);
-       len = strlen(bp);
-       bp += len;
-       len_bp -= len;
-    }
-
-    if (what) {
-       char *s;
-
-       if (*what) {
-           snprintf (bp, len_bp, " %s: ", what);
-           len = strlen (bp);
-           bp += len;
-           len_bp -= len;
-       }
-       if ((s = strerror(eindex)))
-           strncpy (bp, s, len_bp);
-       else
-           snprintf (bp, len_bp, "Error %d", eindex);
-       bp += strlen (bp);
-    }
-
-    errno = eindex;
-}
-
-
-int
-ftp_get (char *host, char *user, char *password, char *cwd,
-         char *remote, char *local, int ascii, int stayopen)
-{
-    return ftp_trans (host, user, password, cwd, remote, local,
-                      "RETR", ascii, stayopen);
-}
-
-
-int
-ftp_trans (char *host, char *user, char *password, char *cwd, char *remote,
-           char *local, char *cmd, int ascii, int stayopen)
-{
-    int        result;
-
-    if (stayopen <= 0) {
-       result = ftp_quit ();
-       if (host == NULL)
-           return result;
-    }
-
-    if (ftp_fd == NOTOK) {
-       struct addrinfo hints, *res;
-
-       memset(&hints, 0, sizeof(hints));
-#ifdef AI_ADDRCONFIG
-       hints.ai_flags = AI_ADDRCONFIG;
-#endif
-       hints.ai_family = PF_INET;
-       hints.ai_socktype = SOCK_STREAM;
-
-       result = getaddrinfo(host, "ftp", &hints, &res);
-
-       if (result) {
-           fprintf(stderr, "%s/ftp: %s\n", host, gai_strerror(result));
-           return NOTOK;
-       }
-
-       if ((ftp_fd = start_tcp_client (res)) == NOTOK) {
-           perror (host);
-           freeaddrinfo(res);
-           return NOTOK;
-       }
-       if (join_tcp_server (ftp_fd, res->ai_addr, res->ai_addrlen) == NOTOK) {
-           perror (host);
-           freeaddrinfo(res);
-           close_tcp_socket (ftp_fd), ftp_fd = NOTOK;
-           return NOTOK;
-       }
-       freeaddrinfo(res);
-       getreply (1, 0);
-
-       if (v_verbose) {
-           fprintf (stdout, "Connected to %s\n", host);
-           fflush (stdout);
-       }
-
-       if (user) {
-           if ((result = command (0, "USER %s", user)) == CONTINUE)
-               result = command (1, "PASS %s", password);
-           if (result != COMPLETE) {
-               result = NOTOK;
-               goto out;
-           }
-       }
-
-       if (remote == NULL)
-           return OK;
-    }
-
-    if (cwd && ((result = command (0, "CWD %s", cwd)) != COMPLETE
-                   && result != CONTINUE)) {
-       result = NOTOK;
-       goto out;
-    }
-
-    if (command (1, ascii ? "TYPE A" : "TYPE I") != COMPLETE) {
-       result = NOTOK;
-       goto out;
-    }
-
-    result = ftp_read (remote, local, cmd, ascii);
-
-out: ;
-    if (result != OK || !stayopen)
-       ftp_quit ();
-
-    return result;
-}
-
-
-static int
-ftp_quit (void)
-{
-    int        n;
-
-    if (ftp_fd == NOTOK)
-       return OK;
-
-    n = command (1, "QUIT");
-    close_tcp_socket (ftp_fd), ftp_fd = NOTOK;
-    return (n == 0 || n == COMPLETE ? OK : NOTOK);
-}
-
-static int
-ftp_read (char *remote, char *local, char *cmd, int ascii)
-{
-    int        istdio = 0, istore;
-    register int cc;
-    int        expectingreply = 0;
-    char buffer[BUFSIZ];
-    FILE *fp = NULL;
-
-    if (initconn () == NOTOK)
-       goto bad;
-
-    v_noise = v_verbose;
-    if (command (-1, *remote ? "%s %s" : "%s", cmd, remote) != PRELIM)
-       goto bad;
-
-    expectingreply++;
-    if (dataconn () == NOTOK) {
-bad: ;
-        if (fp && !istdio)
-           fclose (fp);
-       if (data_fd != NOTOK)
-           close_tcp_socket (data_fd), data_fd = NOTOK;
-       if (expectingreply)
-           getreply (-2, 0);
-
-       return NOTOK;
-    }
-
-    istore = !strcmp (cmd, "STOR");
-
-    if ((istdio = !strcmp (local, "-")))
-       fp = istore ? stdin : stdout;
-    else
-       if ((fp = fopen (local, istore ? "r" : "w")) == NULL) {
-           perror (local);
-           goto bad;
-       }
-
-    if (istore) {
-       if (ascii) {
-           int c;
-           FILE *out;
-
-           if (!(out = fdopen (data_fd, "w"))) {
-               perror ("fdopen");
-               goto bad;
-           }
-
-           while ((c = getc (fp)) != EOF) {
-               if (c == '\n')
-                   putc ('\r', out);
-               if (putc (c, out) == EOF) {
-                   perror ("putc");
-                   fclose (out);
-                   data_fd = NOTOK;
-                   goto bad;
-               }
-           }
-
-           fclose (out);
-           data_fd = NOTOK;
-       }
-       else {
-           while ((cc = fread (buffer, sizeof *buffer, sizeof buffer, fp)) > 0)
-               if (write_tcp_socket (data_fd, buffer, cc) != cc) {
-                   perror ("write_tcp_socket");
-                   goto bad;
-               }
-
-           close_tcp_socket (data_fd), data_fd = NOTOK;
-       }
-    }
-    else {
-       if (ascii) {
-           int c;
-           FILE *in;
-
-           if (!(in = fdopen (data_fd, "r"))) {
-               perror ("fdopen");
-               goto bad;
-           }
-
-           while ((c = getc (in)) != EOF) {
-               if (c == '\r')
-                   switch (c = getc (in)) {
-                       case EOF:
-                       case '\0':
-                           c = '\r';
-                           break;
-
-                       case '\n':
-                           break;
-
-                       default:
-                           putc ('\r', fp);
-                           break;
-                       }
-
-               if (putc (c, fp) == EOF) {
-                   perror ("putc");
-                   fclose (in);
-                   data_fd = NOTOK;
-                   goto bad;
-               }
-           }
-
-           fclose (in);
-           data_fd = NOTOK;
-       }
-       else {
-           while ((cc = read_tcp_socket (data_fd, buffer, sizeof buffer)) > 0)
-               if (fwrite (buffer, sizeof *buffer, cc, fp) == 0) {
-                   perror ("fwrite");
-                   goto bad;
-               }
-           if (cc < 0) {
-               perror ("read_tcp_socket");
-               goto bad;
-           }
-
-           close_tcp_socket (data_fd), data_fd = NOTOK;
-       }
-    }
-
-    if (!istdio)
-       fclose (fp);
-
-    v_noise = v_verbose;
-    return (getreply (1, 0) == COMPLETE ? OK : NOTOK);
-}
-
-
-#define        UC(b) (((int) b) & 0xff)
-
-static int
-initconn (void)
-{
-    int        len;
-    register char *a, *p;
-    struct sockaddr_in in_socket;
-
-    if (getsockname (ftp_fd, (struct sockaddr *) &in_socket,
-                    (len = sizeof(in_socket), &len)) == NOTOK) {
-       perror ("getsockname");
-       return NOTOK;
-    }
-    in_socket.sin_port = 0;
-    if ((data_fd = start_tcp_server (&in_socket, 1, 0, 0)) == NOTOK) {
-       perror ("start_tcp_server");
-       return NOTOK;
-    }
-
-    if (getsockname (data_fd, (struct sockaddr *) &in_socket,
-                    (len = sizeof in_socket, &len)) == NOTOK) {
-       perror ("getsockname");
-       return NOTOK;
-    }
-
-    a = (char *) &in_socket.sin_addr;
-    p = (char *) &in_socket.sin_port;
-
-    if (command (1, "PORT %d,%d,%d,%d,%d,%d",
-                     UC(a[0]), UC(a[1]), UC(a[2]), UC(a[3]),
-                     UC(p[0]), UC(p[1])) == COMPLETE)
-       return OK;
-
-    return NOTOK;
-}
-
-static int
-dataconn (void)
-{
-    int        fd;
-    struct sockaddr_in in_socket;
-    
-    if ((fd = join_tcp_client (data_fd, &in_socket)) == NOTOK) {
-       perror ("join_tcp_client");
-       return NOTOK;
-    }
-    close_tcp_socket (data_fd);
-    data_fd = fd;
-
-    return OK;
-}
-
-
-static int
-command (int arg1, ...)
-{
-    int        val;
-    va_list ap;
-
-    va_start (ap, arg1);
-    val = vcommand (arg1, ap);
-    va_end (ap);
-
-    return val;
-}
-
-static int
-vcommand (int complete, va_list ap)
-{
-    int        len;
-    char buffer[BUFSIZ];
-
-    if (ftp_fd == NOTOK)
-       return NOTOK;
-
-    _asnprintf (buffer, sizeof(buffer), NULL, ap);
-    if (v_debug)
-       fprintf (stderr, "<--- %s\n", buffer);
-
-    strcat (buffer, "\r\n");
-    len = strlen (buffer);
-
-    if (write_tcp_socket (ftp_fd, buffer, len) != len) {
-       perror ("write_tcp_socket");
-       return NOTOK;
-    }
-
-    return (getreply (complete, !strcmp (buffer, "QUIT")));
-}
-
-
-static int
-getreply (int complete, int expecteof)
-{
-    for (;;) {
-       register int code, dig, n;
-       int continuation;
-       register char *bp;
-       char buffer[BUFSIZ];
-
-       code = dig = n = continuation = 0;
-       bp = buffer;
-
-       for (;;) {
-           unsigned char c;
-
-           if (read_tcp_socket (ftp_fd, &c, 1) < 1) {
-               if (expecteof)
-                   return OK;
-
-               perror ("read_tcp_socket");
-               return DONE;
-           }
-           if (c == '\n')
-               break;
-           *bp++ = c != '\r' ? c : '\0';
-
-           dig++;
-           if (dig < 4) {
-               if (isdigit(c))
-                   code = code * 10 + (c - '0');
-               else                            /* XXX: naughty FTP... */
-                   if (isspace (c))
-                       continuation++;
-           }
-           else
-               if (dig == 4 && c == '-')
-                   continuation++;
-           if (n == 0)
-               n = c;
-       }
-
-       if (v_debug)
-           fprintf (stderr, "---> %s\n", buffer);
-       if (continuation)
-           continue;
-
-       n -= '0';
-
-       if (v_noise) {
-           fprintf (stdout, "%s\n", buffer);
-           fflush (stdout);
-           v_noise = 0;
-       }
-       else
-           if ((complete == -1 && n != PRELIM)
-                   || (complete == 0 && n != CONTINUE && n != COMPLETE)
-                   || (complete == 1 && n != COMPLETE))
-               fprintf (stderr, "%s\n", buffer);
-
-       return n;
-    }
-}
index a36941f..ea2bcd6 100644 (file)
@@ -71,9 +71,6 @@ void content_error (char *, CT, char *, ...);
 /* mhcachesbr.c */
 int find_cache (CT, int, int *, char *, char *, int);
 
-/* ftpsbr.c */
-int ftp_get (char *, char *, char *, char *, char *, char *, int, int);
-
 /* mhfree.c */
 void free_content (CT);
 void free_ctinfo (CT);
index 14322ab..4959dfe 100644 (file)
@@ -2485,10 +2485,8 @@ openFTP (CT ct, char **file)
     if ((ftp = context_find (nmhaccessftp)) && !*ftp)
        ftp = NULL;
 
-#ifndef BUILTIN_FTP
     if (!ftp)
        return NOTOK;
-#endif
 
     switch (openExternal (e->eb_parent, e->eb_content, ce, file, &fd)) {
        case NOTOK:
@@ -2587,9 +2585,6 @@ openFTP (CT ct, char **file)
        return NOTOK;
     }
 
-#ifdef BUILTIN_FTP
-    if (ftp)
-#endif
     {
        int child_id, i, vecp;
        char *vec[9];
@@ -2625,9 +2620,6 @@ openFTP (CT ct, char **file)
 
            default:
                if (pidXwait (child_id, NULL)) {
-#ifdef BUILTIN_FTP
-losing_ftp:
-#endif
                    username = password = NULL;
                    ce->ce_unlink = 1;
                    return NOTOK;
@@ -2635,14 +2627,6 @@ losing_ftp:
                break;
        }
     }
-#ifdef BUILTIN_FTP
-    else
-       if (ftp_get (e->eb_site, user, pass, e->eb_dir, e->eb_name,
-                    ce->ce_file,
-                    e->eb_mode && !mh_strcasecmp (e->eb_mode, "ascii"), 0)
-               == NOTOK)
-           goto losing_ftp;
-#endif
 
     if (cachefile[0]) {
        if (caching)