diff options
Diffstat (limited to 'ftp/wu-ftpd+ipv6/files/patch-ad')
-rw-r--r-- | ftp/wu-ftpd+ipv6/files/patch-ad | 580 |
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 ---- |