summaryrefslogtreecommitdiff
path: root/ftp/wu-ftpd+ipv6/files/patch-ad
diff options
context:
space:
mode:
authorAndrey A. Chernov <ache@FreeBSD.org>1997-01-30 17:00:56 +0000
committerAndrey A. Chernov <ache@FreeBSD.org>1997-01-30 17:00:56 +0000
commit624195f0764367c99cc3c640d7fcda1f86a322e4 (patch)
tree453a32509d088cc39a5467b701a4ef68bbd788da /ftp/wu-ftpd+ipv6/files/patch-ad
parentUpdate (diff)
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.
Notes
Notes: svn path=/head/; revision=5473
Diffstat (limited to 'ftp/wu-ftpd+ipv6/files/patch-ad')
-rw-r--r--ftp/wu-ftpd+ipv6/files/patch-ad580
1 files changed, 47 insertions, 533 deletions
diff --git a/ftp/wu-ftpd+ipv6/files/patch-ad b/ftp/wu-ftpd+ipv6/files/patch-ad
index 8a6749a4e6de..c94318c267f6 100644
--- a/ftp/wu-ftpd+ipv6/files/patch-ad
+++ b/ftp/wu-ftpd+ipv6/files/patch-ad
@@ -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
-***************
-*** 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;
-
-***************
-*** 237,242 ****
---- 237,247 ----
-
- #endif /* SETPROCTITLE */
-
-+ #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
+*** src/ftpd.c.bak Mon Jan 20 08:05:11 1997
+--- src/ftpd.c Thu Jan 30 17:46:16 1997
+***************
+*** 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 ----
+***************
+*** 1201,1212 ****
+ acl_setfunctions();
+
+ #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);
-+ #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)
- {
+--- 1195,1205 ----
+ acl_setfunctions();
-***************
-*** 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
- xpasswd = crypt(passwd, salt);
- #endif
-+ #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",
+ #ifdef SKEY
+! pwok = skeyaccess(name, NULL, remotehost, remoteaddr);
+! reply(331, "%s", skey_challenge(name, pw, pwok));
! #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");
+ reply(331, "Password required for %s.", name);
+ #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)
+ askpasswd = 1;
+ /* Delay before reading passwd after first failed attempt to slow down
+ * passwd-guessing programs. */
***************
-*** 2144,2160 ****
---- 2221,2240 ----
- }
+*** 1378,1389 ****
+ xpasswd = crypt(passwd, salt);
#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
+- #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
-! /* 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;
+ #ifdef ULTRIX_AUTH
+ if ((numfails = ultrix_check_pass(passwd, xpasswd)) < 0) {
+--- 1371,1376 ----