Upgrade to Academ 2.4.2-beta-12 as recommended by AUSCERT security

advisory.

P.S. this version is much improved comparing to what we have previously,
f.e. it already contains most of our fixes.
This commit is contained in:
Andrey A. Chernov 1997-01-30 17:00:56 +00:00
parent a2310bfff1
commit 624195f076
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=5473
20 changed files with 516 additions and 1306 deletions

View File

@ -1,17 +1,20 @@
# New ports collection makefile for: wu-ftpd
# Version required: 2.4
# Version required: 2.4.2-beta-12
# Date created: 18 Oct 1994
# Whom: torstenb
#
# $Id: Makefile,v 1.8 1996/12/01 01:23:20 obrien Exp $
# $Id: Makefile,v 1.9 1996/12/01 01:34:11 obrien Exp $
#
DISTNAME= wu-ftpd-2.4
DISTNAME= wu-ftpd-2.4.2-beta-12
CATEGORIES= net
MASTER_SITES= ftp://ftp.wustl.edu/packages/wuarchive-ftpd/ \
http://wuarchive.wustl.edu/packages/wuarchive-ftpd/
# AUSCERT recommendation
MASTER_SITES= ftp://ftp.academ.com/pub/wu-ftpd/private/
EXTRACT_SUFX= .tar.Z
do-build:
cd ${WRKSRC} && ./build fbs
MAINTAINER= torstenb@FreeBSD.org
MAN1= ftpcount.1 ftpwho.1

View File

@ -1 +1 @@
MD5 (wu-ftpd-2.4.tar.Z) = a1780e6a1e2b18b6614028fa8f945e14
MD5 (wu-ftpd-2.4.2-beta-12.tar.Z) = 9c9a38d9de9611f6e9a8d30582ba4b5b

View File

@ -1,19 +0,0 @@
*** src/realpath.c.orig Wed Jan 18 22:39:04 1995
--- src/realpath.c Wed Jan 18 22:38:48 1995
***************
*** 42,48 ****
#endif
char *
! realpath(char *pathname, char *result)
{
struct stat sbuf;
char curpath[MAXPATHLEN],
--- 42,48 ----
#endif
char *
! realpath(const char *pathname, char *result)
{
struct stat sbuf;
char curpath[MAXPATHLEN],

View File

@ -1,51 +1,87 @@
--- Makefile.orig Fri Apr 1 11:03:58 1994
+++ Makefile Sat Nov 30 17:31:22 1996
@@ -1,25 +1,32 @@
-BINDIR= /usr/local/bin
-ETCDIR= /usr/local/etc
-MANDIR= /usr/local/man
+BINDIR= ${PREFIX}/bin
+LIBEXECDIR= ${PREFIX}/libexec
+ETCDIR= ${PREFIX}/etc
+MANDIR= ${PREFIX}/man
MANEXT= 8
all:
+ /bin/sh build fb2
@ echo 'Use the "build" command (shell script) to make ftpd.'
@ echo 'You can say "build help" for details on how it works.'
install: bin/ftpd bin/ftpcount bin/ftpshut
- -mv -f ${ETCDIR}/ftpd ${ETCDIR}/ftpd-old
+ -mv -f ${LIBEXECDIR}/ftpd ${LIBEXECDIR}/ftpd-old
@echo Installing binaries.
- install -o bin -g bin -m 755 bin/ftpd ${ETCDIR}/ftpd
- install -o bin -g bin -m 755 bin/ftpshut ${BINDIR}/ftpshut
- install -o bin -g bin -m 755 bin/ftpcount ${BINDIR}/ftpcount
- install -o bin -g bin -m 755 bin/ftpwho ${BINDIR}/ftpwho
+ install -c -o bin -g bin -m 755 bin/ftpd ${LIBEXECDIR}/ftpd
+ install -c -o bin -g bin -m 755 bin/ftpshut ${BINDIR}/ftpshut
+ install -c -o bin -g bin -m 755 bin/ftpcount ${BINDIR}/ftpcount
+ install -c -o bin -g bin -m 755 bin/ftpwho ${BINDIR}/ftpwho
+ install -c -o bin -g bin -m 755 bin/ckconfig ${BINDIR}/ftpckconfig
+ @echo Installing basic configuration
+ install -c -o root -g bin -m 644 doc/examples/ftpaccess ${ETCDIR}/ftpaccess.example
+ install -c -o root -g bin -m 644 doc/examples/ftpusers ${ETCDIR}/ftpusers.example
+ install -c -o root -g bin -m 644 doc/examples/ftpconversions ${ETCDIR}/ftpconversions.example
@echo Installing manpages.
- install -o bin -g bin -m 755 doc/ftpd.8 ${MANDIR}/man8/ftpd.8
- install -o bin -g bin -m 755 doc/ftpcount.1 ${MANDIR}/man1/ftpcount.1
- install -o bin -g bin -m 755 doc/ftpwho.1 ${MANDIR}/man1/ftpwho.1
- install -o bin -g bin -m 755 doc/ftpshut.8 ${MANDIR}/man8/ftpshut.8
- install -o bin -g bin -m 755 doc/ftpaccess.5 ${MANDIR}/man5/ftpaccess.5
- install -o bin -g bin -m 755 doc/ftphosts.5 ${MANDIR}/man5/ftphosts.5
- install -o bin -g bin -m 755 doc/ftpconversions.5 ${MANDIR}/man5/ftpconversions.5
- install -o bin -g bin -m 755 doc/xferlog.5 ${MANDIR}/man5/xferlog.5
+ install -c -o bin -g bin -m 644 doc/ftpd.8 ${MANDIR}/man8/ftpd.8
+ install -c -o bin -g bin -m 644 doc/ftpcount.1 ${MANDIR}/man1/ftpcount.1
+ install -c -o bin -g bin -m 644 doc/ftpwho.1 ${MANDIR}/man1/ftpwho.1
+ install -c -o bin -g bin -m 644 doc/ftpshut.8 ${MANDIR}/man8/ftpshut.8
+ install -c -o bin -g bin -m 644 doc/ftpaccess.5 ${MANDIR}/man5/ftpaccess.5
+ install -c -o bin -g bin -m 644 doc/ftphosts.5 ${MANDIR}/man5/ftphosts.5
+ install -c -o bin -g bin -m 644 doc/ftpconversions.5 ${MANDIR}/man5/ftpconversions.5
+ install -c -o bin -g bin -m 644 doc/xferlog.5 ${MANDIR}/man5/xferlog.5
*** makefiles/Makefile.fbs.bak Thu Jan 16 19:57:40 1997
--- makefiles/Makefile.fbs Thu Jan 30 17:06:29 1997
***************
*** 1,7 ****
! PREFIX= /usr/local
BINDIR= ${PREFIX}/bin
ETCDIR= ${PREFIX}/etc
MANDIR= ${PREFIX}/man
MANEXT= 8
INSTALL= install
--- 1,8 ----
! PREFIX?= /usr/local
BINDIR= ${PREFIX}/bin
ETCDIR= ${PREFIX}/etc
MANDIR= ${PREFIX}/man
+ LIBEXECDIR= ${PREFIX}/libexec
MANEXT= 8
INSTALL= install
***************
*** 10,41 ****
@ echo 'You can say "build help" for details on how it works.'
install: bin/ftpd bin/ftpcount bin/ftpshut
! -mv -f ${ETCDIR}/ftpd ${ETCDIR}/ftpd-old
@echo installing binaries.
! ${INSTALL} -c -o bin -g bin -m 755 bin/ftpd ${ETCDIR}/ftpd
${INSTALL} -c -o bin -g bin -m 755 bin/ftpshut ${BINDIR}/ftpshut
${INSTALL} -c -o bin -g bin -m 755 bin/ftpcount ${BINDIR}/ftpcount
${INSTALL} -c -o bin -g bin -m 755 bin/ftpwho ${BINDIR}/ftpwho
install -c -o bin -g bin -m 755 bin/ckconfig ${BINDIR}/ftpckconfig
@echo NOT Installing basic configuration
! # install -c -o root -g bin -m 755 doc/examples/ftpaccess ${ETCDIR}/ftpaccess
! # install -c -o root -g bin -m 755 doc/examples/ftpusers ${ETCDIR}/ftpusers
! # install -c -o root -g bin -m 755 doc/examples/ftpconversions ${ETCDIR}/ftpconversions
@echo installing manpages.
! ${INSTALL} -c -o bin -g bin -m 755 doc/ftpd.8 ${MANDIR}/man8/ftpd.8
! ${INSTALL} -c -o bin -g bin -m 755 doc/ftpcount.1 ${MANDIR}/man1/ftpcount.1
! ${INSTALL} -c -o bin -g bin -m 755 doc/ftpwho.1 ${MANDIR}/man1/ftpwho.1
! ${INSTALL} -c -o bin -g bin -m 755 doc/ftpshut.8 ${MANDIR}/man8/ftpshut.8
! ${INSTALL} -c -o bin -g bin -m 755 doc/ftpaccess.5 ${MANDIR}/man5/ftpaccess.5
! ${INSTALL} -c -o bin -g bin -m 755 doc/ftphosts.5 ${MANDIR}/man5/ftphosts.5
! ${INSTALL} -c -o bin -g bin -m 755 doc/ftpconversions.5 ${MANDIR}/man5/ftpconversions.5
! ${INSTALL} -c -o bin -g bin -m 755 doc/xferlog.5 ${MANDIR}/man5/xferlog.5
! @echo Compressing manpages
! gzip -f -9 ${MANDIR}/man8/ftpd.8
! gzip -f -9 ${MANDIR}/man1/ftpcount.1
! gzip -f -9 ${MANDIR}/man1/ftpwho.1
! gzip -f -9 ${MANDIR}/man8/ftpshut.8
! gzip -f -9 ${MANDIR}/man5/ftpaccess.5
! gzip -f -9 ${MANDIR}/man5/ftphosts.5
! gzip -f -9 ${MANDIR}/man5/ftpconversions.5
! gzip -f -9 ${MANDIR}/man5/xferlog.5
--- 11,42 ----
@ echo 'You can say "build help" for details on how it works.'
install: bin/ftpd bin/ftpcount bin/ftpshut
! -mv -f ${LIBEXECDIR}/ftpd ${LIBEXECDIR}/ftpd-old
@echo installing binaries.
! ${INSTALL} -c -o bin -g bin -m 755 bin/ftpd ${LIBEXECDIR}/ftpd
${INSTALL} -c -o bin -g bin -m 755 bin/ftpshut ${BINDIR}/ftpshut
${INSTALL} -c -o bin -g bin -m 755 bin/ftpcount ${BINDIR}/ftpcount
${INSTALL} -c -o bin -g bin -m 755 bin/ftpwho ${BINDIR}/ftpwho
install -c -o bin -g bin -m 755 bin/ckconfig ${BINDIR}/ftpckconfig
@echo NOT Installing basic configuration
! install -c -o root -g bin -m 755 doc/examples/ftpaccess ${ETCDIR}/ftpaccess.example
! install -c -o root -g bin -m 755 doc/examples/ftpusers ${ETCDIR}/ftpusers.example
! install -c -o root -g bin -m 755 doc/examples/ftpconversions ${ETCDIR}/ftpconversions.example
@echo installing manpages.
! ${INSTALL} -c -o bin -g bin -m 644 doc/ftpd.8 ${MANDIR}/man8/ftpd.8
! ${INSTALL} -c -o bin -g bin -m 644 doc/ftpcount.1 ${MANDIR}/man1/ftpcount.1
! ${INSTALL} -c -o bin -g bin -m 644 doc/ftpwho.1 ${MANDIR}/man1/ftpwho.1
! ${INSTALL} -c -o bin -g bin -m 644 doc/ftpshut.8 ${MANDIR}/man8/ftpshut.8
! ${INSTALL} -c -o bin -g bin -m 644 doc/ftpaccess.5 ${MANDIR}/man5/ftpaccess.5
! ${INSTALL} -c -o bin -g bin -m 644 doc/ftphosts.5 ${MANDIR}/man5/ftphosts.5
! ${INSTALL} -c -o bin -g bin -m 644 doc/ftpconversions.5 ${MANDIR}/man5/ftpconversions.5
! ${INSTALL} -c -o bin -g bin -m 644 doc/xferlog.5 ${MANDIR}/man5/xferlog.5
! # @echo Compressing manpages
! # gzip -f -9 ${MANDIR}/man8/ftpd.8
! # gzip -f -9 ${MANDIR}/man1/ftpcount.1
! # gzip -f -9 ${MANDIR}/man1/ftpwho.1
! # gzip -f -9 ${MANDIR}/man8/ftpshut.8
! # gzip -f -9 ${MANDIR}/man5/ftpaccess.5
! # gzip -f -9 ${MANDIR}/man5/ftphosts.5
! # gzip -f -9 ${MANDIR}/man5/ftpconversions.5
! # gzip -f -9 ${MANDIR}/man5/xferlog.5

View File

@ -1,50 +1,42 @@
*** src/pathnames.h.orig Wed Apr 13 13:46:48 1994
--- src/pathnames.h Sun Aug 6 21:45:38 1995
*** src/pathnames.h.bak Mon Jan 20 06:21:45 1997
--- src/pathnames.h Thu Jan 30 15:42:24 1997
***************
*** 29,46 ****
*
* @(#)pathnames.h 5.2 (Berkeley) 6/1/90 */
! #define _PATH_FTPUSERS "/etc/ftpusers"
#define _PATH_FTPACCESS "/usr/local/etc/ftpaccess"
#define _PATH_EXECPATH "/bin/ftp-exec"
! #define _PATH_PIDNAMES "/usr/local/daemon/ftpd/ftp.pids-%s"
#define _PATH_CVT "/usr/local/etc/ftpconversions"
! #define _PATH_XFERLOG "/usr/adm/xferlog"
! #define _PATH_PRIVATE "/etc/ftpgroups"
#ifndef _PATH_UTMP
! #define _PATH_UTMP "/etc/utmp"
! #define _PATH_WTMP "/usr/adm/wtmp"
! #define _PATH_LASTLOG "/usr/adm/lastlog"
*** 45,54 ****
#define _PATH_CVT "/etc/ftpd/ftpconversions"
#define _PATH_PRIVATE "/etc/ftpd/ftpgroups"
#else
! #define _PATH_FTPUSERS "/usr/local/lib/ftpd/ftpusers"
! #define _PATH_FTPACCESS "/usr/local/lib/ftpd/ftpaccess"
! #define _PATH_CVT "/usr/local/lib/ftpd/ftpconversions"
! #define _PATH_PRIVATE "/usr/local/lib/ftpd/ftpgroups"
#endif
#endif
#define _PATH_BSHELL "/bin/sh"
--- 29,46 ----
*
* @(#)pathnames.h 5.2 (Berkeley) 6/1/90 */
! #define _PATH_FTPUSERS "/usr/local/etc/ftpusers"
#define _PATH_FTPACCESS "/usr/local/etc/ftpaccess"
#define _PATH_EXECPATH "/bin/ftp-exec"
! #define _PATH_PIDNAMES "/var/run/ftp.pids-%s"
#define _PATH_CVT "/usr/local/etc/ftpconversions"
! #define _PATH_XFERLOG "/var/log/xferlog"
! #define _PATH_PRIVATE "/usr/local/etc/ftpgroups"
#ifndef _PATH_UTMP
! #define _PATH_UTMP "/var/run/utmp"
! #define _PATH_WTMP "/var/log/wtmp"
! #define _PATH_LASTLOG "/var/log/lastlog"
--- 45,54 ----
#define _PATH_CVT "/etc/ftpd/ftpconversions"
#define _PATH_PRIVATE "/etc/ftpd/ftpgroups"
#else
! #define _PATH_FTPUSERS "!!PREFIX!!/etc/ftpusers"
! #define _PATH_FTPACCESS "!!PREFIX!!/etc/ftpaccess"
! #define _PATH_CVT "!!PREFIX!!/etc/ftpconversions"
! #define _PATH_PRIVATE "!!PREFIX!!/etc/ftpgroups"
#endif
#endif
#define _PATH_BSHELL "/bin/sh"
***************
*** 48,52 ****
--- 48,53 ----
#ifdef HOST_ACCESS
#define _PATH_FTPHOSTS "/usr/local/etc/ftphosts"
+ #else
*** 109,115 ****
#ifdef USE_ETC_FTPD
#define _PATH_FTPHOSTS "/etc/ftpd/ftphosts"
#else
! #define _PATH_FTPHOSTS "/usr/local/lib/ftpd/ftphosts"
#endif
#endif
#endif
--- 109,115 ----
#ifdef USE_ETC_FTPD
#define _PATH_FTPHOSTS "/etc/ftpd/ftphosts"
#else
! #define _PATH_FTPHOSTS "!!PREFIX!!/etc/ftphosts"
#endif
#endif
#endif

View File

@ -1,544 +1,58 @@
*** src/ftpd.c.orig Tue Jan 7 00:27:09 1997
--- src/ftpd.c Fri Jan 17 17:45:14 1997
*** src/ftpd.c.bak Mon Jan 20 08:05:11 1997
--- src/ftpd.c Thu Jan 30 17:46:16 1997
***************
*** 139,146 ****
*freopen(const char *, const char *, FILE *);
extern int ftpd_pclose(FILE *iop),
fclose(FILE *);
! extern char *getline(),
! *realpath(char *pathname, char *result);
extern char cbuf[];
extern off_t restart_point;
--- 139,146 ----
*freopen(const char *, const char *, FILE *);
extern int ftpd_pclose(FILE *iop),
fclose(FILE *);
! extern char *getline();
! extern char *realpath(const char *pathname, char *result);
extern char cbuf[];
extern off_t restart_point;
*** 235,246 ****
int logging = 0;
int log_commands = 0;
- #ifdef SKEY /* H* add-on. Not as elegant as Wietse's */
- #include "skey.h" /* logdaemon package, but does the job. */
- struct skey skey_blk;
- char chbuff[80];
- #endif
-
#ifdef SECUREOSF
#define SecureWare
#include <prot.h>
--- 235,240 ----
***************
*** 237,242 ****
--- 237,247 ----
*** 1201,1212 ****
acl_setfunctions();
#endif /* SETPROCTITLE */
#ifdef SKEY
! /* 0 means we found the user and the skeykeys file is open for update. */
! if (skeychallenge (&skey_blk, name, chbuff) == 0)
! reply (331, "[%s] required for %s.", chbuff, name);
! else
! #endif
reply(331, "Password required for %s.", name);
askpasswd = 1;
/* Delay before reading passwd after first failed attempt to slow down
* passwd-guessing programs. */
--- 1195,1205 ----
acl_setfunctions();
+ #ifdef SKEY
+ #include <skey.h>
+ int pwok = 0;
+ #endif
+
#ifdef KERBEROS
void init_krb();
void end_krb();
***************
*** 252,257 ****
--- 257,269 ----
char ls_short[50];
struct aclmember *entry = NULL;
+ void end_login(void);
+ void send_data(FILE *, FILE *, off_t);
+ void dolog(struct sockaddr_in *);
+ void dologout(int);
+ void perror_reply(int, char *);
+
+ void
main(int argc, char **argv, char **envp)
{
int addrlen,
***************
*** 686,691 ****
--- 698,705 ----
* does not have a standard shell as returned by getusershell(). Disallow
* anyone mentioned in the file _PATH_FTPUSERS to allow people such as root
* and uucp to be avoided. */
+
+ void
user(char *name)
{
register char *cp;
***************
*** 878,884 ****
--- 892,903 ----
} else
acl_setfunctions();
+ #ifdef SKEY
+ pwok = skeyaccess(name, NULL, remotehost, remoteaddr);
+ reply(331, "%s", skey_challenge(name, pw, pwok));
+ #else
#ifdef SKEY
! pwok = skeyaccess(name, NULL, remotehost, remoteaddr);
! reply(331, "%s", skey_challenge(name, pw, pwok));
! #else
reply(331, "Password required for %s.", name);
+ #endif
askpasswd = 1;
/* Delay before reading passwd after first failed attempt to slow down
* passwd-guessing programs. */
***************
*** 887,892 ****
--- 906,912 ----
}
/* Check if a user is in the file _PATH_FTPUSERS */
+ int
checkuser(char *name)
{
register FILE *fd;
***************
*** 911,916 ****
--- 931,937 ----
/* Terminate login as previous user, if any, resetting state; used when USER
* command is given or login fails. */
+ void
end_login(void)
{
***************
*** 965,970 ****
--- 986,992 ----
return 0;
}
+ void
pass(char *passwd)
{
char *xpasswd,
***************
*** 1007,1014 ****
--- 1029,1041 ----
#ifdef KERBEROS
xpasswd = crypt16(passwd, salt);
#else
+ #ifdef SKEY
+ xpasswd = skey_crypt(passwd, salt, pw, pwok);
+ pwok = 0;
+ #else
*** 1378,1389 ****
xpasswd = crypt(passwd, salt);
#endif
+ #endif
#endif
- #endif
- #ifdef SKEY
- /* comment the next line if you REALLY want to allow replayable passwds. */
- strcpy (xpasswd, "wrongo:spazmoid"); /* disable regular passwds */
- if (skeyverify (&skey_blk, passwd) == 0)
- strcpy (xpasswd, pw->pw_passwd); /* do it the sleazy way */
#endif
#ifdef ULTRIX_AUTH
if ((numfails = ultrix_check_pass(passwd, xpasswd)) < 0) {
***************
*** 1095,1101 ****
(void) initgroups(pw->pw_name, pw->pw_gid);
/* open wtmp before chroot */
! (void) sprintf(ttyline, "ftp%d", getpid());
logwtmp(ttyline, pw->pw_name, remotehost);
logged_in = 1;
--- 1122,1132 ----
(void) initgroups(pw->pw_name, pw->pw_gid);
/* open wtmp before chroot */
! #if (defined(BSD) && (BSD >= 199103))
! (void) sprintf(ttyline, "ftp%ld", getpid());
! #else
! (void) sprintf(ttyline, "ftpd%d", getpid());
! #endif
logwtmp(ttyline, pw->pw_name, remotehost);
logged_in = 1;
***************
*** 1190,1197 ****
reply(230, "Guest login ok, access restrictions apply.");
#ifdef SETPROCTITLE
sprintf(proctitle, "%s: anonymous/%.*s", remotehost,
! sizeof(proctitle) - sizeof(remotehost) -
! sizeof(": anonymous/"), passwd);
setproctitle("%s", proctitle);
#endif /* SETPROCTITLE */
if (logging)
--- 1221,1228 ----
reply(230, "Guest login ok, access restrictions apply.");
#ifdef SETPROCTITLE
sprintf(proctitle, "%s: anonymous/%.*s", remotehost,
! (int) (sizeof(proctitle) - sizeof(remotehost) -
! sizeof(": anonymous/")), passwd);
setproctitle("%s", proctitle);
#endif /* SETPROCTITLE */
if (logging)
***************
*** 1235,1240 ****
--- 1266,1272 ----
return (buf);
}
+ void
retrieve(char *cmd, char *name)
{
FILE *fin,
***************
*** 1403,1409 ****
if (dout == NULL)
goto done;
#ifdef HAVE_ST_BLKSIZE
! send_data(fin, dout, st.st_blksize);
#else
send_data(fin, dout, BUFSIZ);
#endif
--- 1435,1441 ----
if (dout == NULL)
goto done;
#ifdef HAVE_ST_BLKSIZE
! send_data(fin, dout, st.st_blksize*2);
#else
send_data(fin, dout, BUFSIZ);
#endif
***************
*** 1422,1428 ****
--- 1454,1464 ----
for (loop = 0; namebuf[loop]; loop++)
if (isspace(namebuf[loop]) || iscntrl(namebuf[loop]))
namebuf[loop] = '_';
+ #if (defined(BSD) && (BSD >= 199103))
+ sprintf(msg, "%.24s %d %s %qd %s %c %s %c %c %s ftp %d %s\n",
+ #else
sprintf(msg, "%.24s %d %s %d %s %c %s %c %c %s ftp %d %s\n",
+ #endif
ctime(&curtime),
xfertime,
remotehost,
***************
*** 1445,1450 ****
--- 1481,1487 ----
(*closefunc) (fin);
}
+ void
store(char *name, char *mode, int unique)
{
FILE *fout, *din;
***************
*** 1610,1616 ****
for (loop = 0; namebuf[loop]; loop++)
if (isspace(namebuf[loop]) || iscntrl(namebuf[loop]))
namebuf[loop] = '_';
! sprintf(msg, "%.24s %d %s %d %s %c %s %c %c %s ftp %d %s\n",
ctime(&curtime),
xfertime,
remotehost,
--- 1647,1657 ----
for (loop = 0; namebuf[loop]; loop++)
if (isspace(namebuf[loop]) || iscntrl(namebuf[loop]))
namebuf[loop] = '_';
! #if (defined(BSD) && (BSD >= 199103))
! sprintf(msg, "%.24s %d %s %qd %s %c %s %c %c %s ftp %d %s\n",
! #else
! sprintf(msg, "%.24s %d %s %d %s %c %s %c %c %s ftp %d %s\n",
! #endif
ctime(&curtime),
xfertime,
remotehost,
***************
*** 1678,1683 ****
--- 1719,1735 ----
if (setsockopt(s, IPPROTO_IP, IP_TOS, (char *) &on, sizeof(int)) < 0)
syslog(LOG_WARNING, "setsockopt (IP_TOS): %m");
#endif
+ #ifdef TCP_NOPUSH
+ /*
+ * Turn off push flag to keep sender TCP from sending short packets
+ * at the boundaries of each write(). Should probably do a SO_SNDBUF
+ * to set the send buffer size as well, but that may not be desirable
+ * in heavy-load situations.
+ */
+ on = 1;
+ if (setsockopt(s, IPPROTO_TCP, TCP_NOPUSH, (char *)&on, sizeof on) < 0)
+ syslog(LOG_WARNING, "setsockopt (TCP_NOPUSH): %m");
+ #endif
return (fdopen(s, mode));
bad:
***************
*** 1699,1705 ****
file_size = size;
byte_count = 0;
if (size != (off_t) - 1)
! (void) sprintf(sizebuf, " (%ld bytes)", size);
else
(void) strcpy(sizebuf, "");
if (pdata >= 0) {
--- 1751,1761 ----
file_size = size;
byte_count = 0;
if (size != (off_t) - 1)
! #if (defined(BSD) && (BSD >= 199103))
! (void) sprintf(sizebuf, " (%qd bytes)", size);
! #else
! (void) sprintf(sizebuf, " (%d bytes)", size);
! #endif
else
(void) strcpy(sizebuf, "");
if (pdata >= 0) {
***************
*** 1707,1715 ****
int s,
fromlen = sizeof(from);
! s = accept(pdata, (struct sockaddr *) &from, &fromlen);
! if (s < 0) {
! reply(425, "Can't open data connection.");
(void) close(pdata);
pdata = -1;
return (NULL);
--- 1763,1785 ----
int s,
fromlen = sizeof(from);
! #ifdef FD_ZERO
! struct timeval timeout;
! fd_set set;
!
! FD_ZERO(&set);
! FD_SET(pdata, &set);
!
! timeout.tv_usec = 0;
! timeout.tv_sec = 120;
!
! if (select(pdata+1, &set, (fd_set *) 0, (fd_set *) 0, &timeout) == 0 ||
! (s = accept(pdata, (struct sockaddr *) &from, &fromlen)) < 0) {
! #else
! s = accept(pdata, (struct sockaddr *) &from, &fromlen);
! if (s < 0) {
! #endif
! reply(425, "Can't open data connection.");
(void) close(pdata);
pdata = -1;
return (NULL);
***************
*** 1764,1769 ****
--- 1834,1840 ----
* encapsulation of the data subject to Mode, Structure, and Type.
*
* NB: Form isn't handled. */
+ void
send_data(FILE *instr, FILE *outstr, off_t blksize)
{
register int c,
***************
*** 1839,1844 ****
--- 1910,1916 ----
* the data subject to Mode, Structure, and Type.
*
* N.B.: Form isn't handled. */
+ int
receive_data(FILE *instr, FILE *outstr)
{
register int c;
***************
*** 1915,1920 ****
--- 1987,1993 ----
return (-1);
}
+ void
statfilecmd(char *filename)
{
char line[BUFSIZ];
***************
*** 1948,1953 ****
--- 2021,2027 ----
reply(211, "End of Status");
}
+ void
statcmd(void)
{
struct sockaddr_in *sin;
***************
*** 2001,2006 ****
--- 2075,2081 ----
reply(211, "End of status");
}
+ void
fatal(char *s)
{
reply(451, "Error in server: %s\n", s);
***************
*** 2095,2100 ****
--- 2170,2176 ----
#else
/* VARARGS2 */
+ void
reply(int n, char *fmt, int p0, int p1, int p2, int p3, int p4, int p5)
{
if (autospout != NULL) {
***************
*** 2129,2134 ****
--- 2205,2211 ----
}
/* VARARGS2 */
+ void
lreply(int n, char *fmt, int p0, int p1, int p2, int p3, int p4, int p5)
{
if (!dolreplies)
***************
*** 2144,2160 ****
--- 2221,2240 ----
}
#endif
+ void
ack(char *s)
{
reply(250, "%s command successful.", s);
}
+ void
nack(char *s)
{
reply(502, "%s command not implemented.", s);
}
/* ARGSUSED */
+ void
yyerror(char *s)
{
char *cp;
***************
*** 2164,2169 ****
--- 2244,2250 ----
reply(500, "'%s': command not understood.", cbuf);
}
+ void
delete(char *name)
{
struct stat st;
***************
*** 2208,2213 ****
--- 2289,2295 ----
ack("DELE");
}
+ void
cwd(char *path)
{
struct aclmember *entry = NULL;
***************
*** 2248,2253 ****
--- 2330,2336 ----
}
}
+ void
makedir(char *name)
{
uid_t uid;
***************
*** 2274,2282 ****
reply(257, "MKD command successful.");
}
removedir(char *name)
{
! int c, d; /* dummy variables */
int valid = 0;
/*
--- 2357,2366 ----
reply(257, "MKD command successful.");
}
+ void
removedir(char *name)
{
! unsigned long c, d; /* dummy variables */
int valid = 0;
/*
***************
*** 2298,2303 ****
--- 2382,2388 ----
ack("RMD");
}
+ void
pwd(void)
{
char path[MAXPATHLEN + 1];
***************
*** 2312,2318 ****
#else
if (getwd(path) == (char *) NULL)
#endif
! reply(550, "%s.", path);
else
reply(257, "\"%s\" is current directory.", path);
}
--- 2397,2404 ----
#else
if (getwd(path) == (char *) NULL)
#endif
! /* reply(550, "%s.", path); */
! reply(550, "Permission denied.");
else
reply(257, "\"%s\" is current directory.", path);
}
***************
*** 2342,2347 ****
--- 2428,2434 ----
return (name);
}
+ void
renamecmd(char *from, char *to)
{
***************
*** 2357,2362 ****
--- 2444,2450 ----
ack("RNTO");
}
+ void
dolog(struct sockaddr_in *sin)
{
struct hostent *hp;
***************
*** 2412,2417 ****
--- 2500,2506 ----
}
/* Record logout in wtmp file and exit with supplied status. */
+ void
dologout(int status)
{
/*
***************
*** 2466,2471 ****
--- 2555,2561 ----
* PASV command in RFC959. However, it has been blessed as a legitimate
* response by Jon Postel in a telephone conversation with Rick Adams on 25
* Jan 89. */
+ void
passive(void)
{
int len;
***************
*** 2537,2542 ****
--- 2627,2633 ----
}
/* Format and send reply containing system error number. */
+ void
perror_reply(int code, char *string)
{
reply(code, "%s: %s.", string, strerror(errno));
***************
*** 2545,2550 ****
--- 2636,2642 ----
static char *onefile[] =
{"", 0};
+ void
send_file_list(char *whichfiles)
{
struct stat st;
--- 1371,1376 ----

View File

@ -1,5 +1,5 @@
*** config.h Fri Apr 1 11:03:59 1994
--- config.h Sat Oct 7 10:09:48 1995
*** config.h.orig Mon Jan 20 06:21:30 1997
--- config.h Thu Jan 30 16:13:31 1997
***************
*** 30,35 ****
--- 30,43 ----
@ -17,3 +17,16 @@
* allow use of private file. (for site group and site gpass)
*/
***************
*** 64,68 ****
* See README-2.4-HOBBIT for more information on this option.
*/
! #undef SKEY
--- 72,76 ----
* See README-2.4-HOBBIT for more information on this option.
*/
! #define SKEY

View File

@ -0,0 +1,25 @@
*** support/makefiles/Makefile.fbs.bak Fri Feb 17 20:36:56 1995
--- support/makefiles/Makefile.fbs Thu Jan 30 16:32:32 1997
***************
*** 4,13 ****
LIBC = /usr/lib/libc.a
IFLAGS =
LFLAGS =
! CFLAGS = -O ${IFLAGS} ${LFLAGS} -DNO_MALLOC_PROTO
! SRCS = fnmatch.c strcasestr.c authuser.c ftw.c
! OBJS = fnmatch.o strcasestr.o authuser.o ftw.o
all: $(OBJS)
-rm -f libsupport.a
--- 4,13 ----
LIBC = /usr/lib/libc.a
IFLAGS =
LFLAGS =
! CFLAGS += ${IFLAGS} ${LFLAGS} -DNO_MALLOC_PROTO
! SRCS = strcasestr.c authuser.c ftw.c
! OBJS = strcasestr.o authuser.o ftw.o
all: $(OBJS)
-rm -f libsupport.a

View File

@ -0,0 +1,44 @@
*** src/makefiles/Makefile.fbs.orig Thu Jan 16 11:27:58 1997
--- src/makefiles/Makefile.fbs Thu Jan 30 17:50:47 1997
***************
*** 1,8 ****
CC = cc
IFLAGS = -I.. -I../support
LFLAGS = -L../support -s
! CFLAGS = -O ${IFLAGS} ${LFLAGS}
! LIBES = -lsupport -lcrypt
LIBC = /usr/lib/libc.a
LINTFLAGS=
LKERB = -lauth -lckrb -lkrb -ldes
--- 1,8 ----
CC = cc
IFLAGS = -I.. -I../support
LFLAGS = -L../support -s
! CFLAGS += ${IFLAGS} ${LFLAGS}
! LIBES = -lsupport -lutil -lskey -lmd -lcrypt
LIBC = /usr/lib/libc.a
LINTFLAGS=
LKERB = -lauth -lckrb -lkrb -ldes
***************
*** 10,19 ****
SRCS = ftpd.c ftpcmd.c glob.c logwtmp.c popen.c vers.c access.c extensions.c \
realpath.c acl.c private.c authenticate.c conversions.c hostacc.c \
! sigfix.c
OBJS = ftpd.o ftpcmd.o glob.o logwtmp.o popen.o vers.o access.o extensions.o \
realpath.o acl.o private.o authenticate.o conversions.o hostacc.o \
! sigfix.o
all: ftpd ftpcount ftpshut ckconfig
--- 10,19 ----
SRCS = ftpd.c ftpcmd.c glob.c logwtmp.c popen.c vers.c access.c extensions.c \
realpath.c acl.c private.c authenticate.c conversions.c hostacc.c \
! sigfix.c skey-stuff.c
OBJS = ftpd.o ftpcmd.o glob.o logwtmp.o popen.o vers.o access.o extensions.o \
realpath.o acl.o private.o authenticate.o conversions.o hostacc.o \
! sigfix.o skey-stuff.o
all: ftpd ftpcount ftpshut ckconfig

View File

@ -6,7 +6,4 @@
mv ${WRKSRC}/src/pathnames.h ${WRKSRC}/src/pathnames.h.bak
sed <${WRKSRC}/src/pathnames.h.bak >${WRKSRC}/src/pathnames.h s+!!PREFIX!!+$PREFIX+g
cp ${FILESDIR}/Makefile.fb2 ${WRKSRC}/src/makefiles/Makefile.fb2
cp ${FILESDIR}/config.fb2 ${WRKSRC}/src/config/config.fb2
cp ${FILESDIR}/support-Makefile.fb2 ${WRKSRC}/support/makefiles/Makefile.fb2
cp ${FILESDIR}/skey-stuff.c ${WRKSRC}/src/skey-stuff.c

View File

@ -1,17 +1,20 @@
# New ports collection makefile for: wu-ftpd
# Version required: 2.4
# Version required: 2.4.2-beta-12
# Date created: 18 Oct 1994
# Whom: torstenb
#
# $Id: Makefile,v 1.8 1996/12/01 01:23:20 obrien Exp $
# $Id: Makefile,v 1.9 1996/12/01 01:34:11 obrien Exp $
#
DISTNAME= wu-ftpd-2.4
DISTNAME= wu-ftpd-2.4.2-beta-12
CATEGORIES= net
MASTER_SITES= ftp://ftp.wustl.edu/packages/wuarchive-ftpd/ \
http://wuarchive.wustl.edu/packages/wuarchive-ftpd/
# AUSCERT recommendation
MASTER_SITES= ftp://ftp.academ.com/pub/wu-ftpd/private/
EXTRACT_SUFX= .tar.Z
do-build:
cd ${WRKSRC} && ./build fbs
MAINTAINER= torstenb@FreeBSD.org
MAN1= ftpcount.1 ftpwho.1

View File

@ -1 +1 @@
MD5 (wu-ftpd-2.4.tar.Z) = a1780e6a1e2b18b6614028fa8f945e14
MD5 (wu-ftpd-2.4.2-beta-12.tar.Z) = 9c9a38d9de9611f6e9a8d30582ba4b5b

View File

@ -1,19 +0,0 @@
*** src/realpath.c.orig Wed Jan 18 22:39:04 1995
--- src/realpath.c Wed Jan 18 22:38:48 1995
***************
*** 42,48 ****
#endif
char *
! realpath(char *pathname, char *result)
{
struct stat sbuf;
char curpath[MAXPATHLEN],
--- 42,48 ----
#endif
char *
! realpath(const char *pathname, char *result)
{
struct stat sbuf;
char curpath[MAXPATHLEN],

View File

@ -1,51 +1,87 @@
--- Makefile.orig Fri Apr 1 11:03:58 1994
+++ Makefile Sat Nov 30 17:31:22 1996
@@ -1,25 +1,32 @@
-BINDIR= /usr/local/bin
-ETCDIR= /usr/local/etc
-MANDIR= /usr/local/man
+BINDIR= ${PREFIX}/bin
+LIBEXECDIR= ${PREFIX}/libexec
+ETCDIR= ${PREFIX}/etc
+MANDIR= ${PREFIX}/man
MANEXT= 8
all:
+ /bin/sh build fb2
@ echo 'Use the "build" command (shell script) to make ftpd.'
@ echo 'You can say "build help" for details on how it works.'
install: bin/ftpd bin/ftpcount bin/ftpshut
- -mv -f ${ETCDIR}/ftpd ${ETCDIR}/ftpd-old
+ -mv -f ${LIBEXECDIR}/ftpd ${LIBEXECDIR}/ftpd-old
@echo Installing binaries.
- install -o bin -g bin -m 755 bin/ftpd ${ETCDIR}/ftpd
- install -o bin -g bin -m 755 bin/ftpshut ${BINDIR}/ftpshut
- install -o bin -g bin -m 755 bin/ftpcount ${BINDIR}/ftpcount
- install -o bin -g bin -m 755 bin/ftpwho ${BINDIR}/ftpwho
+ install -c -o bin -g bin -m 755 bin/ftpd ${LIBEXECDIR}/ftpd
+ install -c -o bin -g bin -m 755 bin/ftpshut ${BINDIR}/ftpshut
+ install -c -o bin -g bin -m 755 bin/ftpcount ${BINDIR}/ftpcount
+ install -c -o bin -g bin -m 755 bin/ftpwho ${BINDIR}/ftpwho
+ install -c -o bin -g bin -m 755 bin/ckconfig ${BINDIR}/ftpckconfig
+ @echo Installing basic configuration
+ install -c -o root -g bin -m 644 doc/examples/ftpaccess ${ETCDIR}/ftpaccess.example
+ install -c -o root -g bin -m 644 doc/examples/ftpusers ${ETCDIR}/ftpusers.example
+ install -c -o root -g bin -m 644 doc/examples/ftpconversions ${ETCDIR}/ftpconversions.example
@echo Installing manpages.
- install -o bin -g bin -m 755 doc/ftpd.8 ${MANDIR}/man8/ftpd.8
- install -o bin -g bin -m 755 doc/ftpcount.1 ${MANDIR}/man1/ftpcount.1
- install -o bin -g bin -m 755 doc/ftpwho.1 ${MANDIR}/man1/ftpwho.1
- install -o bin -g bin -m 755 doc/ftpshut.8 ${MANDIR}/man8/ftpshut.8
- install -o bin -g bin -m 755 doc/ftpaccess.5 ${MANDIR}/man5/ftpaccess.5
- install -o bin -g bin -m 755 doc/ftphosts.5 ${MANDIR}/man5/ftphosts.5
- install -o bin -g bin -m 755 doc/ftpconversions.5 ${MANDIR}/man5/ftpconversions.5
- install -o bin -g bin -m 755 doc/xferlog.5 ${MANDIR}/man5/xferlog.5
+ install -c -o bin -g bin -m 644 doc/ftpd.8 ${MANDIR}/man8/ftpd.8
+ install -c -o bin -g bin -m 644 doc/ftpcount.1 ${MANDIR}/man1/ftpcount.1
+ install -c -o bin -g bin -m 644 doc/ftpwho.1 ${MANDIR}/man1/ftpwho.1
+ install -c -o bin -g bin -m 644 doc/ftpshut.8 ${MANDIR}/man8/ftpshut.8
+ install -c -o bin -g bin -m 644 doc/ftpaccess.5 ${MANDIR}/man5/ftpaccess.5
+ install -c -o bin -g bin -m 644 doc/ftphosts.5 ${MANDIR}/man5/ftphosts.5
+ install -c -o bin -g bin -m 644 doc/ftpconversions.5 ${MANDIR}/man5/ftpconversions.5
+ install -c -o bin -g bin -m 644 doc/xferlog.5 ${MANDIR}/man5/xferlog.5
*** makefiles/Makefile.fbs.bak Thu Jan 16 19:57:40 1997
--- makefiles/Makefile.fbs Thu Jan 30 17:06:29 1997
***************
*** 1,7 ****
! PREFIX= /usr/local
BINDIR= ${PREFIX}/bin
ETCDIR= ${PREFIX}/etc
MANDIR= ${PREFIX}/man
MANEXT= 8
INSTALL= install
--- 1,8 ----
! PREFIX?= /usr/local
BINDIR= ${PREFIX}/bin
ETCDIR= ${PREFIX}/etc
MANDIR= ${PREFIX}/man
+ LIBEXECDIR= ${PREFIX}/libexec
MANEXT= 8
INSTALL= install
***************
*** 10,41 ****
@ echo 'You can say "build help" for details on how it works.'
install: bin/ftpd bin/ftpcount bin/ftpshut
! -mv -f ${ETCDIR}/ftpd ${ETCDIR}/ftpd-old
@echo installing binaries.
! ${INSTALL} -c -o bin -g bin -m 755 bin/ftpd ${ETCDIR}/ftpd
${INSTALL} -c -o bin -g bin -m 755 bin/ftpshut ${BINDIR}/ftpshut
${INSTALL} -c -o bin -g bin -m 755 bin/ftpcount ${BINDIR}/ftpcount
${INSTALL} -c -o bin -g bin -m 755 bin/ftpwho ${BINDIR}/ftpwho
install -c -o bin -g bin -m 755 bin/ckconfig ${BINDIR}/ftpckconfig
@echo NOT Installing basic configuration
! # install -c -o root -g bin -m 755 doc/examples/ftpaccess ${ETCDIR}/ftpaccess
! # install -c -o root -g bin -m 755 doc/examples/ftpusers ${ETCDIR}/ftpusers
! # install -c -o root -g bin -m 755 doc/examples/ftpconversions ${ETCDIR}/ftpconversions
@echo installing manpages.
! ${INSTALL} -c -o bin -g bin -m 755 doc/ftpd.8 ${MANDIR}/man8/ftpd.8
! ${INSTALL} -c -o bin -g bin -m 755 doc/ftpcount.1 ${MANDIR}/man1/ftpcount.1
! ${INSTALL} -c -o bin -g bin -m 755 doc/ftpwho.1 ${MANDIR}/man1/ftpwho.1
! ${INSTALL} -c -o bin -g bin -m 755 doc/ftpshut.8 ${MANDIR}/man8/ftpshut.8
! ${INSTALL} -c -o bin -g bin -m 755 doc/ftpaccess.5 ${MANDIR}/man5/ftpaccess.5
! ${INSTALL} -c -o bin -g bin -m 755 doc/ftphosts.5 ${MANDIR}/man5/ftphosts.5
! ${INSTALL} -c -o bin -g bin -m 755 doc/ftpconversions.5 ${MANDIR}/man5/ftpconversions.5
! ${INSTALL} -c -o bin -g bin -m 755 doc/xferlog.5 ${MANDIR}/man5/xferlog.5
! @echo Compressing manpages
! gzip -f -9 ${MANDIR}/man8/ftpd.8
! gzip -f -9 ${MANDIR}/man1/ftpcount.1
! gzip -f -9 ${MANDIR}/man1/ftpwho.1
! gzip -f -9 ${MANDIR}/man8/ftpshut.8
! gzip -f -9 ${MANDIR}/man5/ftpaccess.5
! gzip -f -9 ${MANDIR}/man5/ftphosts.5
! gzip -f -9 ${MANDIR}/man5/ftpconversions.5
! gzip -f -9 ${MANDIR}/man5/xferlog.5
--- 11,42 ----
@ echo 'You can say "build help" for details on how it works.'
install: bin/ftpd bin/ftpcount bin/ftpshut
! -mv -f ${LIBEXECDIR}/ftpd ${LIBEXECDIR}/ftpd-old
@echo installing binaries.
! ${INSTALL} -c -o bin -g bin -m 755 bin/ftpd ${LIBEXECDIR}/ftpd
${INSTALL} -c -o bin -g bin -m 755 bin/ftpshut ${BINDIR}/ftpshut
${INSTALL} -c -o bin -g bin -m 755 bin/ftpcount ${BINDIR}/ftpcount
${INSTALL} -c -o bin -g bin -m 755 bin/ftpwho ${BINDIR}/ftpwho
install -c -o bin -g bin -m 755 bin/ckconfig ${BINDIR}/ftpckconfig
@echo NOT Installing basic configuration
! install -c -o root -g bin -m 755 doc/examples/ftpaccess ${ETCDIR}/ftpaccess.example
! install -c -o root -g bin -m 755 doc/examples/ftpusers ${ETCDIR}/ftpusers.example
! install -c -o root -g bin -m 755 doc/examples/ftpconversions ${ETCDIR}/ftpconversions.example
@echo installing manpages.
! ${INSTALL} -c -o bin -g bin -m 644 doc/ftpd.8 ${MANDIR}/man8/ftpd.8
! ${INSTALL} -c -o bin -g bin -m 644 doc/ftpcount.1 ${MANDIR}/man1/ftpcount.1
! ${INSTALL} -c -o bin -g bin -m 644 doc/ftpwho.1 ${MANDIR}/man1/ftpwho.1
! ${INSTALL} -c -o bin -g bin -m 644 doc/ftpshut.8 ${MANDIR}/man8/ftpshut.8
! ${INSTALL} -c -o bin -g bin -m 644 doc/ftpaccess.5 ${MANDIR}/man5/ftpaccess.5
! ${INSTALL} -c -o bin -g bin -m 644 doc/ftphosts.5 ${MANDIR}/man5/ftphosts.5
! ${INSTALL} -c -o bin -g bin -m 644 doc/ftpconversions.5 ${MANDIR}/man5/ftpconversions.5
! ${INSTALL} -c -o bin -g bin -m 644 doc/xferlog.5 ${MANDIR}/man5/xferlog.5
! # @echo Compressing manpages
! # gzip -f -9 ${MANDIR}/man8/ftpd.8
! # gzip -f -9 ${MANDIR}/man1/ftpcount.1
! # gzip -f -9 ${MANDIR}/man1/ftpwho.1
! # gzip -f -9 ${MANDIR}/man8/ftpshut.8
! # gzip -f -9 ${MANDIR}/man5/ftpaccess.5
! # gzip -f -9 ${MANDIR}/man5/ftphosts.5
! # gzip -f -9 ${MANDIR}/man5/ftpconversions.5
! # gzip -f -9 ${MANDIR}/man5/xferlog.5

View File

@ -1,50 +1,42 @@
*** src/pathnames.h.orig Wed Apr 13 13:46:48 1994
--- src/pathnames.h Sun Aug 6 21:45:38 1995
*** src/pathnames.h.bak Mon Jan 20 06:21:45 1997
--- src/pathnames.h Thu Jan 30 15:42:24 1997
***************
*** 29,46 ****
*
* @(#)pathnames.h 5.2 (Berkeley) 6/1/90 */
! #define _PATH_FTPUSERS "/etc/ftpusers"
#define _PATH_FTPACCESS "/usr/local/etc/ftpaccess"
#define _PATH_EXECPATH "/bin/ftp-exec"
! #define _PATH_PIDNAMES "/usr/local/daemon/ftpd/ftp.pids-%s"
#define _PATH_CVT "/usr/local/etc/ftpconversions"
! #define _PATH_XFERLOG "/usr/adm/xferlog"
! #define _PATH_PRIVATE "/etc/ftpgroups"
#ifndef _PATH_UTMP
! #define _PATH_UTMP "/etc/utmp"
! #define _PATH_WTMP "/usr/adm/wtmp"
! #define _PATH_LASTLOG "/usr/adm/lastlog"
*** 45,54 ****
#define _PATH_CVT "/etc/ftpd/ftpconversions"
#define _PATH_PRIVATE "/etc/ftpd/ftpgroups"
#else
! #define _PATH_FTPUSERS "/usr/local/lib/ftpd/ftpusers"
! #define _PATH_FTPACCESS "/usr/local/lib/ftpd/ftpaccess"
! #define _PATH_CVT "/usr/local/lib/ftpd/ftpconversions"
! #define _PATH_PRIVATE "/usr/local/lib/ftpd/ftpgroups"
#endif
#endif
#define _PATH_BSHELL "/bin/sh"
--- 29,46 ----
*
* @(#)pathnames.h 5.2 (Berkeley) 6/1/90 */
! #define _PATH_FTPUSERS "/usr/local/etc/ftpusers"
#define _PATH_FTPACCESS "/usr/local/etc/ftpaccess"
#define _PATH_EXECPATH "/bin/ftp-exec"
! #define _PATH_PIDNAMES "/var/run/ftp.pids-%s"
#define _PATH_CVT "/usr/local/etc/ftpconversions"
! #define _PATH_XFERLOG "/var/log/xferlog"
! #define _PATH_PRIVATE "/usr/local/etc/ftpgroups"
#ifndef _PATH_UTMP
! #define _PATH_UTMP "/var/run/utmp"
! #define _PATH_WTMP "/var/log/wtmp"
! #define _PATH_LASTLOG "/var/log/lastlog"
--- 45,54 ----
#define _PATH_CVT "/etc/ftpd/ftpconversions"
#define _PATH_PRIVATE "/etc/ftpd/ftpgroups"
#else
! #define _PATH_FTPUSERS "!!PREFIX!!/etc/ftpusers"
! #define _PATH_FTPACCESS "!!PREFIX!!/etc/ftpaccess"
! #define _PATH_CVT "!!PREFIX!!/etc/ftpconversions"
! #define _PATH_PRIVATE "!!PREFIX!!/etc/ftpgroups"
#endif
#endif
#define _PATH_BSHELL "/bin/sh"
***************
*** 48,52 ****
--- 48,53 ----
#ifdef HOST_ACCESS
#define _PATH_FTPHOSTS "/usr/local/etc/ftphosts"
+ #else
*** 109,115 ****
#ifdef USE_ETC_FTPD
#define _PATH_FTPHOSTS "/etc/ftpd/ftphosts"
#else
! #define _PATH_FTPHOSTS "/usr/local/lib/ftpd/ftphosts"
#endif
#endif
#endif
--- 109,115 ----
#ifdef USE_ETC_FTPD
#define _PATH_FTPHOSTS "/etc/ftpd/ftphosts"
#else
! #define _PATH_FTPHOSTS "!!PREFIX!!/etc/ftphosts"
#endif
#endif
#endif

View File

@ -1,544 +1,58 @@
*** src/ftpd.c.orig Tue Jan 7 00:27:09 1997
--- src/ftpd.c Fri Jan 17 17:45:14 1997
*** src/ftpd.c.bak Mon Jan 20 08:05:11 1997
--- src/ftpd.c Thu Jan 30 17:46:16 1997
***************
*** 139,146 ****
*freopen(const char *, const char *, FILE *);
extern int ftpd_pclose(FILE *iop),
fclose(FILE *);
! extern char *getline(),
! *realpath(char *pathname, char *result);
extern char cbuf[];
extern off_t restart_point;
--- 139,146 ----
*freopen(const char *, const char *, FILE *);
extern int ftpd_pclose(FILE *iop),
fclose(FILE *);
! extern char *getline();
! extern char *realpath(const char *pathname, char *result);
extern char cbuf[];
extern off_t restart_point;
*** 235,246 ****
int logging = 0;
int log_commands = 0;
- #ifdef SKEY /* H* add-on. Not as elegant as Wietse's */
- #include "skey.h" /* logdaemon package, but does the job. */
- struct skey skey_blk;
- char chbuff[80];
- #endif
-
#ifdef SECUREOSF
#define SecureWare
#include <prot.h>
--- 235,240 ----
***************
*** 237,242 ****
--- 237,247 ----
*** 1201,1212 ****
acl_setfunctions();
#endif /* SETPROCTITLE */
#ifdef SKEY
! /* 0 means we found the user and the skeykeys file is open for update. */
! if (skeychallenge (&skey_blk, name, chbuff) == 0)
! reply (331, "[%s] required for %s.", chbuff, name);
! else
! #endif
reply(331, "Password required for %s.", name);
askpasswd = 1;
/* Delay before reading passwd after first failed attempt to slow down
* passwd-guessing programs. */
--- 1195,1205 ----
acl_setfunctions();
+ #ifdef SKEY
+ #include <skey.h>
+ int pwok = 0;
+ #endif
+
#ifdef KERBEROS
void init_krb();
void end_krb();
***************
*** 252,257 ****
--- 257,269 ----
char ls_short[50];
struct aclmember *entry = NULL;
+ void end_login(void);
+ void send_data(FILE *, FILE *, off_t);
+ void dolog(struct sockaddr_in *);
+ void dologout(int);
+ void perror_reply(int, char *);
+
+ void
main(int argc, char **argv, char **envp)
{
int addrlen,
***************
*** 686,691 ****
--- 698,705 ----
* does not have a standard shell as returned by getusershell(). Disallow
* anyone mentioned in the file _PATH_FTPUSERS to allow people such as root
* and uucp to be avoided. */
+
+ void
user(char *name)
{
register char *cp;
***************
*** 878,884 ****
--- 892,903 ----
} else
acl_setfunctions();
+ #ifdef SKEY
+ pwok = skeyaccess(name, NULL, remotehost, remoteaddr);
+ reply(331, "%s", skey_challenge(name, pw, pwok));
+ #else
#ifdef SKEY
! pwok = skeyaccess(name, NULL, remotehost, remoteaddr);
! reply(331, "%s", skey_challenge(name, pw, pwok));
! #else
reply(331, "Password required for %s.", name);
+ #endif
askpasswd = 1;
/* Delay before reading passwd after first failed attempt to slow down
* passwd-guessing programs. */
***************
*** 887,892 ****
--- 906,912 ----
}
/* Check if a user is in the file _PATH_FTPUSERS */
+ int
checkuser(char *name)
{
register FILE *fd;
***************
*** 911,916 ****
--- 931,937 ----
/* Terminate login as previous user, if any, resetting state; used when USER
* command is given or login fails. */
+ void
end_login(void)
{
***************
*** 965,970 ****
--- 986,992 ----
return 0;
}
+ void
pass(char *passwd)
{
char *xpasswd,
***************
*** 1007,1014 ****
--- 1029,1041 ----
#ifdef KERBEROS
xpasswd = crypt16(passwd, salt);
#else
+ #ifdef SKEY
+ xpasswd = skey_crypt(passwd, salt, pw, pwok);
+ pwok = 0;
+ #else
*** 1378,1389 ****
xpasswd = crypt(passwd, salt);
#endif
+ #endif
#endif
- #endif
- #ifdef SKEY
- /* comment the next line if you REALLY want to allow replayable passwds. */
- strcpy (xpasswd, "wrongo:spazmoid"); /* disable regular passwds */
- if (skeyverify (&skey_blk, passwd) == 0)
- strcpy (xpasswd, pw->pw_passwd); /* do it the sleazy way */
#endif
#ifdef ULTRIX_AUTH
if ((numfails = ultrix_check_pass(passwd, xpasswd)) < 0) {
***************
*** 1095,1101 ****
(void) initgroups(pw->pw_name, pw->pw_gid);
/* open wtmp before chroot */
! (void) sprintf(ttyline, "ftp%d", getpid());
logwtmp(ttyline, pw->pw_name, remotehost);
logged_in = 1;
--- 1122,1132 ----
(void) initgroups(pw->pw_name, pw->pw_gid);
/* open wtmp before chroot */
! #if (defined(BSD) && (BSD >= 199103))
! (void) sprintf(ttyline, "ftp%ld", getpid());
! #else
! (void) sprintf(ttyline, "ftpd%d", getpid());
! #endif
logwtmp(ttyline, pw->pw_name, remotehost);
logged_in = 1;
***************
*** 1190,1197 ****
reply(230, "Guest login ok, access restrictions apply.");
#ifdef SETPROCTITLE
sprintf(proctitle, "%s: anonymous/%.*s", remotehost,
! sizeof(proctitle) - sizeof(remotehost) -
! sizeof(": anonymous/"), passwd);
setproctitle("%s", proctitle);
#endif /* SETPROCTITLE */
if (logging)
--- 1221,1228 ----
reply(230, "Guest login ok, access restrictions apply.");
#ifdef SETPROCTITLE
sprintf(proctitle, "%s: anonymous/%.*s", remotehost,
! (int) (sizeof(proctitle) - sizeof(remotehost) -
! sizeof(": anonymous/")), passwd);
setproctitle("%s", proctitle);
#endif /* SETPROCTITLE */
if (logging)
***************
*** 1235,1240 ****
--- 1266,1272 ----
return (buf);
}
+ void
retrieve(char *cmd, char *name)
{
FILE *fin,
***************
*** 1403,1409 ****
if (dout == NULL)
goto done;
#ifdef HAVE_ST_BLKSIZE
! send_data(fin, dout, st.st_blksize);
#else
send_data(fin, dout, BUFSIZ);
#endif
--- 1435,1441 ----
if (dout == NULL)
goto done;
#ifdef HAVE_ST_BLKSIZE
! send_data(fin, dout, st.st_blksize*2);
#else
send_data(fin, dout, BUFSIZ);
#endif
***************
*** 1422,1428 ****
--- 1454,1464 ----
for (loop = 0; namebuf[loop]; loop++)
if (isspace(namebuf[loop]) || iscntrl(namebuf[loop]))
namebuf[loop] = '_';
+ #if (defined(BSD) && (BSD >= 199103))
+ sprintf(msg, "%.24s %d %s %qd %s %c %s %c %c %s ftp %d %s\n",
+ #else
sprintf(msg, "%.24s %d %s %d %s %c %s %c %c %s ftp %d %s\n",
+ #endif
ctime(&curtime),
xfertime,
remotehost,
***************
*** 1445,1450 ****
--- 1481,1487 ----
(*closefunc) (fin);
}
+ void
store(char *name, char *mode, int unique)
{
FILE *fout, *din;
***************
*** 1610,1616 ****
for (loop = 0; namebuf[loop]; loop++)
if (isspace(namebuf[loop]) || iscntrl(namebuf[loop]))
namebuf[loop] = '_';
! sprintf(msg, "%.24s %d %s %d %s %c %s %c %c %s ftp %d %s\n",
ctime(&curtime),
xfertime,
remotehost,
--- 1647,1657 ----
for (loop = 0; namebuf[loop]; loop++)
if (isspace(namebuf[loop]) || iscntrl(namebuf[loop]))
namebuf[loop] = '_';
! #if (defined(BSD) && (BSD >= 199103))
! sprintf(msg, "%.24s %d %s %qd %s %c %s %c %c %s ftp %d %s\n",
! #else
! sprintf(msg, "%.24s %d %s %d %s %c %s %c %c %s ftp %d %s\n",
! #endif
ctime(&curtime),
xfertime,
remotehost,
***************
*** 1678,1683 ****
--- 1719,1735 ----
if (setsockopt(s, IPPROTO_IP, IP_TOS, (char *) &on, sizeof(int)) < 0)
syslog(LOG_WARNING, "setsockopt (IP_TOS): %m");
#endif
+ #ifdef TCP_NOPUSH
+ /*
+ * Turn off push flag to keep sender TCP from sending short packets
+ * at the boundaries of each write(). Should probably do a SO_SNDBUF
+ * to set the send buffer size as well, but that may not be desirable
+ * in heavy-load situations.
+ */
+ on = 1;
+ if (setsockopt(s, IPPROTO_TCP, TCP_NOPUSH, (char *)&on, sizeof on) < 0)
+ syslog(LOG_WARNING, "setsockopt (TCP_NOPUSH): %m");
+ #endif
return (fdopen(s, mode));
bad:
***************
*** 1699,1705 ****
file_size = size;
byte_count = 0;
if (size != (off_t) - 1)
! (void) sprintf(sizebuf, " (%ld bytes)", size);
else
(void) strcpy(sizebuf, "");
if (pdata >= 0) {
--- 1751,1761 ----
file_size = size;
byte_count = 0;
if (size != (off_t) - 1)
! #if (defined(BSD) && (BSD >= 199103))
! (void) sprintf(sizebuf, " (%qd bytes)", size);
! #else
! (void) sprintf(sizebuf, " (%d bytes)", size);
! #endif
else
(void) strcpy(sizebuf, "");
if (pdata >= 0) {
***************
*** 1707,1715 ****
int s,
fromlen = sizeof(from);
! s = accept(pdata, (struct sockaddr *) &from, &fromlen);
! if (s < 0) {
! reply(425, "Can't open data connection.");
(void) close(pdata);
pdata = -1;
return (NULL);
--- 1763,1785 ----
int s,
fromlen = sizeof(from);
! #ifdef FD_ZERO
! struct timeval timeout;
! fd_set set;
!
! FD_ZERO(&set);
! FD_SET(pdata, &set);
!
! timeout.tv_usec = 0;
! timeout.tv_sec = 120;
!
! if (select(pdata+1, &set, (fd_set *) 0, (fd_set *) 0, &timeout) == 0 ||
! (s = accept(pdata, (struct sockaddr *) &from, &fromlen)) < 0) {
! #else
! s = accept(pdata, (struct sockaddr *) &from, &fromlen);
! if (s < 0) {
! #endif
! reply(425, "Can't open data connection.");
(void) close(pdata);
pdata = -1;
return (NULL);
***************
*** 1764,1769 ****
--- 1834,1840 ----
* encapsulation of the data subject to Mode, Structure, and Type.
*
* NB: Form isn't handled. */
+ void
send_data(FILE *instr, FILE *outstr, off_t blksize)
{
register int c,
***************
*** 1839,1844 ****
--- 1910,1916 ----
* the data subject to Mode, Structure, and Type.
*
* N.B.: Form isn't handled. */
+ int
receive_data(FILE *instr, FILE *outstr)
{
register int c;
***************
*** 1915,1920 ****
--- 1987,1993 ----
return (-1);
}
+ void
statfilecmd(char *filename)
{
char line[BUFSIZ];
***************
*** 1948,1953 ****
--- 2021,2027 ----
reply(211, "End of Status");
}
+ void
statcmd(void)
{
struct sockaddr_in *sin;
***************
*** 2001,2006 ****
--- 2075,2081 ----
reply(211, "End of status");
}
+ void
fatal(char *s)
{
reply(451, "Error in server: %s\n", s);
***************
*** 2095,2100 ****
--- 2170,2176 ----
#else
/* VARARGS2 */
+ void
reply(int n, char *fmt, int p0, int p1, int p2, int p3, int p4, int p5)
{
if (autospout != NULL) {
***************
*** 2129,2134 ****
--- 2205,2211 ----
}
/* VARARGS2 */
+ void
lreply(int n, char *fmt, int p0, int p1, int p2, int p3, int p4, int p5)
{
if (!dolreplies)
***************
*** 2144,2160 ****
--- 2221,2240 ----
}
#endif
+ void
ack(char *s)
{
reply(250, "%s command successful.", s);
}
+ void
nack(char *s)
{
reply(502, "%s command not implemented.", s);
}
/* ARGSUSED */
+ void
yyerror(char *s)
{
char *cp;
***************
*** 2164,2169 ****
--- 2244,2250 ----
reply(500, "'%s': command not understood.", cbuf);
}
+ void
delete(char *name)
{
struct stat st;
***************
*** 2208,2213 ****
--- 2289,2295 ----
ack("DELE");
}
+ void
cwd(char *path)
{
struct aclmember *entry = NULL;
***************
*** 2248,2253 ****
--- 2330,2336 ----
}
}
+ void
makedir(char *name)
{
uid_t uid;
***************
*** 2274,2282 ****
reply(257, "MKD command successful.");
}
removedir(char *name)
{
! int c, d; /* dummy variables */
int valid = 0;
/*
--- 2357,2366 ----
reply(257, "MKD command successful.");
}
+ void
removedir(char *name)
{
! unsigned long c, d; /* dummy variables */
int valid = 0;
/*
***************
*** 2298,2303 ****
--- 2382,2388 ----
ack("RMD");
}
+ void
pwd(void)
{
char path[MAXPATHLEN + 1];
***************
*** 2312,2318 ****
#else
if (getwd(path) == (char *) NULL)
#endif
! reply(550, "%s.", path);
else
reply(257, "\"%s\" is current directory.", path);
}
--- 2397,2404 ----
#else
if (getwd(path) == (char *) NULL)
#endif
! /* reply(550, "%s.", path); */
! reply(550, "Permission denied.");
else
reply(257, "\"%s\" is current directory.", path);
}
***************
*** 2342,2347 ****
--- 2428,2434 ----
return (name);
}
+ void
renamecmd(char *from, char *to)
{
***************
*** 2357,2362 ****
--- 2444,2450 ----
ack("RNTO");
}
+ void
dolog(struct sockaddr_in *sin)
{
struct hostent *hp;
***************
*** 2412,2417 ****
--- 2500,2506 ----
}
/* Record logout in wtmp file and exit with supplied status. */
+ void
dologout(int status)
{
/*
***************
*** 2466,2471 ****
--- 2555,2561 ----
* PASV command in RFC959. However, it has been blessed as a legitimate
* response by Jon Postel in a telephone conversation with Rick Adams on 25
* Jan 89. */
+ void
passive(void)
{
int len;
***************
*** 2537,2542 ****
--- 2627,2633 ----
}
/* Format and send reply containing system error number. */
+ void
perror_reply(int code, char *string)
{
reply(code, "%s: %s.", string, strerror(errno));
***************
*** 2545,2550 ****
--- 2636,2642 ----
static char *onefile[] =
{"", 0};
+ void
send_file_list(char *whichfiles)
{
struct stat st;
--- 1371,1376 ----

View File

@ -1,5 +1,5 @@
*** config.h Fri Apr 1 11:03:59 1994
--- config.h Sat Oct 7 10:09:48 1995
*** config.h.orig Mon Jan 20 06:21:30 1997
--- config.h Thu Jan 30 16:13:31 1997
***************
*** 30,35 ****
--- 30,43 ----
@ -17,3 +17,16 @@
* allow use of private file. (for site group and site gpass)
*/
***************
*** 64,68 ****
* See README-2.4-HOBBIT for more information on this option.
*/
! #undef SKEY
--- 72,76 ----
* See README-2.4-HOBBIT for more information on this option.
*/
! #define SKEY

View File

@ -0,0 +1,25 @@
*** support/makefiles/Makefile.fbs.bak Fri Feb 17 20:36:56 1995
--- support/makefiles/Makefile.fbs Thu Jan 30 16:32:32 1997
***************
*** 4,13 ****
LIBC = /usr/lib/libc.a
IFLAGS =
LFLAGS =
! CFLAGS = -O ${IFLAGS} ${LFLAGS} -DNO_MALLOC_PROTO
! SRCS = fnmatch.c strcasestr.c authuser.c ftw.c
! OBJS = fnmatch.o strcasestr.o authuser.o ftw.o
all: $(OBJS)
-rm -f libsupport.a
--- 4,13 ----
LIBC = /usr/lib/libc.a
IFLAGS =
LFLAGS =
! CFLAGS += ${IFLAGS} ${LFLAGS} -DNO_MALLOC_PROTO
! SRCS = strcasestr.c authuser.c ftw.c
! OBJS = strcasestr.o authuser.o ftw.o
all: $(OBJS)
-rm -f libsupport.a

View File

@ -0,0 +1,44 @@
*** src/makefiles/Makefile.fbs.orig Thu Jan 16 11:27:58 1997
--- src/makefiles/Makefile.fbs Thu Jan 30 17:50:47 1997
***************
*** 1,8 ****
CC = cc
IFLAGS = -I.. -I../support
LFLAGS = -L../support -s
! CFLAGS = -O ${IFLAGS} ${LFLAGS}
! LIBES = -lsupport -lcrypt
LIBC = /usr/lib/libc.a
LINTFLAGS=
LKERB = -lauth -lckrb -lkrb -ldes
--- 1,8 ----
CC = cc
IFLAGS = -I.. -I../support
LFLAGS = -L../support -s
! CFLAGS += ${IFLAGS} ${LFLAGS}
! LIBES = -lsupport -lutil -lskey -lmd -lcrypt
LIBC = /usr/lib/libc.a
LINTFLAGS=
LKERB = -lauth -lckrb -lkrb -ldes
***************
*** 10,19 ****
SRCS = ftpd.c ftpcmd.c glob.c logwtmp.c popen.c vers.c access.c extensions.c \
realpath.c acl.c private.c authenticate.c conversions.c hostacc.c \
! sigfix.c
OBJS = ftpd.o ftpcmd.o glob.o logwtmp.o popen.o vers.o access.o extensions.o \
realpath.o acl.o private.o authenticate.o conversions.o hostacc.o \
! sigfix.o
all: ftpd ftpcount ftpshut ckconfig
--- 10,19 ----
SRCS = ftpd.c ftpcmd.c glob.c logwtmp.c popen.c vers.c access.c extensions.c \
realpath.c acl.c private.c authenticate.c conversions.c hostacc.c \
! sigfix.c skey-stuff.c
OBJS = ftpd.o ftpcmd.o glob.o logwtmp.o popen.o vers.o access.o extensions.o \
realpath.o acl.o private.o authenticate.o conversions.o hostacc.o \
! sigfix.o skey-stuff.o
all: ftpd ftpcount ftpshut ckconfig

View File

@ -6,7 +6,4 @@
mv ${WRKSRC}/src/pathnames.h ${WRKSRC}/src/pathnames.h.bak
sed <${WRKSRC}/src/pathnames.h.bak >${WRKSRC}/src/pathnames.h s+!!PREFIX!!+$PREFIX+g
cp ${FILESDIR}/Makefile.fb2 ${WRKSRC}/src/makefiles/Makefile.fb2
cp ${FILESDIR}/config.fb2 ${WRKSRC}/src/config/config.fb2
cp ${FILESDIR}/support-Makefile.fb2 ${WRKSRC}/support/makefiles/Makefile.fb2
cp ${FILESDIR}/skey-stuff.c ${WRKSRC}/src/skey-stuff.c