+++ /dev/null
-; If -E is specified (no anonymous logins) then treat "ftp" and "anonymous" logins like normal user logins
-diff -urN pure-ftpd-1.0.21.org/src/ftpd.c pure-ftpd-1.0.21/src/ftpd.c
---- pure-ftpd-1.0.21.org/src/ftpd.c 2006-02-21 14:14:49.000000000 +0100
-+++ pure-ftpd-1.0.21/src/ftpd.c 2007-06-28 13:29:57.644688176 +0200
-@@ -1153,7 +1153,7 @@
- return;
- }
- if (anon_only <= 0 && username != NULL && *username != 0 &&
-- strcasecmp(username, "ftp") && strcasecmp(username, "anonymous")) {
-+ (anon_only < 0 || (strcasecmp(username, "ftp") && strcasecmp(username, "anonymous")))) {
- strncpy(account, username, sizeof(account) - 1);
- account[sizeof(account) - (size_t) 1U] = 0;
- addreply(331, MSG_USER_OK, account);
+++ /dev/null
-diff -urN pure-ftpd-1.0.21.org/src/ftpd.c pure-ftpd-1.0.21/src/ftpd.c
---- pure-ftpd-1.0.21.org/src/ftpd.c 2006-02-16 10:28:16.000000000 +0100
-+++ pure-ftpd-1.0.21/src/ftpd.c 2006-02-21 12:58:34.192710136 +0100
-@@ -705,7 +705,7 @@
- * with a dot are only allowed to root and to users
- * chroot()ed in their home directories -Jedi. */
-
--static int checknamesanity(const char *name, int dot_ok)
-+static int checknamesanity(const char *name, int dot_ok, int is_dele)
- {
- register const char *namepnt;
-
-@@ -735,7 +735,7 @@
- return -1; /* .ftpquota => *NO* */
- }
- #endif
-- if (strstr(namepnt, PUREFTPD_TMPFILE_PREFIX) != NULL) {
-+ if ((!(is_dele && guest == 0)) && strstr(namepnt, PUREFTPD_TMPFILE_PREFIX) != NULL) {
- return -1;
- }
- while (*namepnt != 0) {
-@@ -1916,7 +1916,7 @@
- }
- }
- }
-- if (checknamesanity(where, dot_read_ok) != 0) {
-+ if (checknamesanity(where, dot_read_ok, 0) != 0) {
- addreply(550, MSG_SANITY_FILE_FAILURE, where);
- return;
- }
-@@ -2473,7 +2473,7 @@
- addreply_noformat(501, MSG_NO_FILE_NAME);
- return;
- }
-- if (checknamesanity(name, dot_write_ok) != 0) {
-+ if (checknamesanity(name, dot_write_ok, 0) != 0) {
- addreply(550, MSG_SANITY_FILE_FAILURE, name);
- return;
- }
-@@ -2531,7 +2531,7 @@
- addreply_noformat(501, MSG_NO_FILE_NAME);
- return;
- }
-- if (checknamesanity(name, dot_write_ok) != 0) {
-+ if (checknamesanity(name, dot_write_ok, 0) != 0) {
- addreply(550, MSG_SANITY_FILE_FAILURE, name);
- return;
- }
-@@ -2566,7 +2566,7 @@
- addreply_noformat(501, MSG_NO_FILE_NAME);
- return;
- }
-- if (checknamesanity(name, dot_write_ok) != 0) {
-+ if (checknamesanity(name, dot_write_ok, 1) != 0) {
- addreply(550, MSG_SANITY_FILE_FAILURE, name);
- return;
- }
-@@ -2854,7 +2854,7 @@
- goto end;
- }
- # endif
-- if (checknamesanity(name, dot_read_ok) != 0) {
-+ if (checknamesanity(name, dot_read_ok, 0) != 0) {
- addreply(550, MSG_SANITY_FILE_FAILURE, name);
- goto end;
- }
-@@ -3346,7 +3346,7 @@
- addreply_noformat(550, MSG_ANON_CANT_MKD);
- return;
- }
-- if (checknamesanity(name, dot_write_ok) != 0) {
-+ if (checknamesanity(name, dot_write_ok, 0) != 0) {
- addreply_noformat(550, MSG_SANITY_DIRECTORY_FAILURE);
- return;
- }
-@@ -3384,7 +3384,7 @@
- return;
- }
- #endif
-- if (checknamesanity(name, dot_write_ok) != 0) {
-+ if (checknamesanity(name, dot_write_ok, 0) != 0) {
- addreply_noformat(550, MSG_SANITY_DIRECTORY_FAILURE);
- return;
- }
-@@ -3686,7 +3686,7 @@
- }
- }
- cantcheckspace:
-- if (checknamesanity(name, dot_write_ok) != 0 ||
-+ if (checknamesanity(name, dot_write_ok, 0) != 0 ||
- (atomic_file = get_atomic_file(name)) == NULL) {
- addreply(553, MSG_SANITY_FILE_FAILURE, name);
- /* implicit : atomic_file = NULL */
-@@ -4093,7 +4093,7 @@
- addreply_noformat(550, MSG_RENAME_FAILURE);
- return;
- }
-- if (checknamesanity(name, dot_write_ok) != 0) {
-+ if (checknamesanity(name, dot_write_ok, 0) != 0) {
- addreply(550, MSG_SANITY_FILE_FAILURE, name);
- return;
- }
-@@ -4123,7 +4123,7 @@
- addreply_noformat(503, MSG_RENAME_NORNFR);
- goto bye;
- }
-- if (checknamesanity(name, dot_write_ok) != 0) {
-+ if (checknamesanity(name, dot_write_ok, 0) != 0) {
- addreply(550, MSG_SANITY_FILE_FAILURE, name);
- return; /* don't clear rnfrom buffer */
- }
-
+++ /dev/null
-Index: src/ftpd.c
-===================================================================
-RCS file: /cvsroot/pureftpd/pureftpd/src/ftpd.c,v
-retrieving revision 1.599
-retrieving revision 1.600
-diff -u -u -r1.599 -r1.600
---- src/ftpd.c 21 Jun 2007 15:05:06 -0000 1.599
-+++ src/ftpd.c 21 Jun 2007 15:07:36 -0000 1.600
-@@ -223,11 +223,10 @@
- snprintf(buf, sizeof buf, "%d %s\r\n", err, line);
- SSL_write(tls_cnx, buf, strlen(buf));
- } else
--#else
-+#endif
- {
- printf("%d %s\r\n", err, line);
- }
--#endif
- fflush(stdout);
- logfile(priority, "%s", line);
- va_end(va);
+++ /dev/null
---- pure-ftpd/src/ftpd.c.orig 2007-12-20 09:59:10.629736723 +0100
-+++ pure-ftpd/src/ftpd.c 2007-12-20 10:02:06.655676098 +0100
-@@ -1531,6 +1531,11 @@
- return chdir(home);
- }
-
-+static void randomsleep(unsigned int t) {
-+ usleep2((unsigned long) (zrand() % PASSWD_FAILURE_DELAY));
-+ usleep2(t * PASSWD_FAILURE_DELAY);
-+}
-+
- void dopass(char *password)
- {
- static unsigned int tapping;
-@@ -1571,27 +1576,28 @@
- }
- }
- if (authresult.auth_ok != 1) {
-- addreply_noformat(530, MSG_AUTH_FAILED);
-- doreply();
-- if (tapping >= MAX_PASSWD_TRIES) {
-- toomanytries:
-- logfile(LOG_ERR, MSG_AUTH_TOOMANY);
-- _EXIT(EXIT_FAILURE);
-- }
-- logfile(LOG_WARNING, MSG_AUTH_FAILED_LOG, account);
-- randomsleep:
- tapping++;
-- usleep2((unsigned long) (zrand() % PASSWD_FAILURE_DELAY));
-- usleep2(tapping * PASSWD_FAILURE_DELAY);
-+ randomsleep(tapping);
-+ addreply_noformat(530, MSG_AUTH_FAILED);
-+ doreply();
-+ if (tapping > MAX_PASSWD_TRIES) {
-+ logfile(LOG_ERR, MSG_AUTH_TOOMANY);
-+ _EXIT(EXIT_FAILURE);
-+ }
-+ logfile(LOG_WARNING, MSG_AUTH_FAILED_LOG, account);
- return;
- }
- if (authresult.uid < useruid) {
- logfile(LOG_WARNING, MSG_ACCOUNT_DISABLED, account);
-+ randomsleep(tapping);
- if (tapping >= MAX_PASSWD_TRIES) {
-- goto toomanytries;
-+ addreply_noformat(530, MSG_AUTH_FAILED);
-+ doreply();
-+ _EXIT(EXIT_FAILURE);
- }
-- addreply_noformat(530, MSG_NOTRUST);
-- goto randomsleep;
-+ addreply_noformat(530, MSG_NOTRUST);
-+ doreply();
-+ return;
- }
-
- #ifdef PER_USER_LIMITS