1df0cfa3bSKurt Lidl--- /dev/null 2015-01-23 17:30:40.000000000 -0500 2df0cfa3bSKurt Lidl+++ pfilter.c 2015-01-23 17:12:02.000000000 -0500 3df0cfa3bSKurt Lidl@@ -0,0 +1,24 @@ 4df0cfa3bSKurt Lidl+#include <stdio.h> 5e6a066acSEd Maste+#include <blocklist.h> 6df0cfa3bSKurt Lidl+ 7df0cfa3bSKurt Lidl+#include "pfilter.h" 8df0cfa3bSKurt Lidl+ 9e6a066acSEd Maste+static struct blocklist *blstate; 10df0cfa3bSKurt Lidl+ 11df0cfa3bSKurt Lidl+void 12df0cfa3bSKurt Lidl+pfilter_open(void) 13df0cfa3bSKurt Lidl+{ 14df0cfa3bSKurt Lidl+ if (blstate == NULL) 15e6a066acSEd Maste+ blstate = blocklist_open(); 16df0cfa3bSKurt Lidl+} 17df0cfa3bSKurt Lidl+ 18df0cfa3bSKurt Lidl+void 19df0cfa3bSKurt Lidl+pfilter_notify(int what, const char *msg) 20df0cfa3bSKurt Lidl+{ 21df0cfa3bSKurt Lidl+ pfilter_open(); 22df0cfa3bSKurt Lidl+ 23df0cfa3bSKurt Lidl+ if (blstate == NULL) 24df0cfa3bSKurt Lidl+ return; 25df0cfa3bSKurt Lidl+ 26e6a066acSEd Maste+ blocklist_r(blstate, what, 0, msg); 27df0cfa3bSKurt Lidl+} 28df0cfa3bSKurt Lidl--- /dev/null 2015-01-23 17:30:40.000000000 -0500 29df0cfa3bSKurt Lidl+++ pfilter.h 2015-01-23 17:07:25.000000000 -0500 30df0cfa3bSKurt Lidl@@ -0,0 +1,2 @@ 31df0cfa3bSKurt Lidl+void pfilter_open(void); 32df0cfa3bSKurt Lidl+void pfilter_notify(int, const char *); 33df0cfa3bSKurt LidlIndex: Makefile 34df0cfa3bSKurt Lidl=================================================================== 35df0cfa3bSKurt LidlRCS file: /cvsroot/src/libexec/ftpd/Makefile,v 36df0cfa3bSKurt Lidlretrieving revision 1.63 37df0cfa3bSKurt Lidldiff -u -p -u -r1.63 Makefile 38df0cfa3bSKurt Lidl--- Makefile 14 Aug 2011 11:46:28 -0000 1.63 39df0cfa3bSKurt Lidl+++ Makefile 23 Jan 2015 22:32:20 -0000 40df0cfa3bSKurt Lidl@@ -11,6 +11,10 @@ LDADD+= -lcrypt -lutil 41df0cfa3bSKurt Lidl MAN= ftpd.conf.5 ftpusers.5 ftpd.8 42df0cfa3bSKurt Lidl MLINKS= ftpusers.5 ftpchroot.5 43df0cfa3bSKurt Lidl 44df0cfa3bSKurt Lidl+SRCS+= pfilter.c 45e6a066acSEd Maste+LDADD+= -lblocklist 46e6a066acSEd Maste+DPADD+= ${LIBBLOCKLIST} 47df0cfa3bSKurt Lidl+ 48df0cfa3bSKurt Lidl .if defined(NO_INTERNAL_LS) 49df0cfa3bSKurt Lidl CPPFLAGS+=-DNO_INTERNAL_LS 50df0cfa3bSKurt Lidl .else 51df0cfa3bSKurt LidlIndex: ftpd.c 52df0cfa3bSKurt Lidl=================================================================== 53df0cfa3bSKurt LidlRCS file: /cvsroot/src/libexec/ftpd/ftpd.c,v 54df0cfa3bSKurt Lidlretrieving revision 1.200 55df0cfa3bSKurt Lidldiff -u -p -u -r1.200 ftpd.c 56df0cfa3bSKurt Lidl--- ftpd.c 31 Jul 2013 19:50:47 -0000 1.200 57df0cfa3bSKurt Lidl+++ ftpd.c 23 Jan 2015 22:32:20 -0000 58df0cfa3bSKurt Lidl@@ -165,6 +165,8 @@ __RCSID("$NetBSD: ftpd.c,v 1.200 2013/07 59df0cfa3bSKurt Lidl #include <security/pam_appl.h> 60df0cfa3bSKurt Lidl #endif 61df0cfa3bSKurt Lidl 62df0cfa3bSKurt Lidl+#include "pfilter.h" 63df0cfa3bSKurt Lidl+ 64df0cfa3bSKurt Lidl #define GLOBAL 65df0cfa3bSKurt Lidl #include "extern.h" 66df0cfa3bSKurt Lidl #include "pathnames.h" 67df0cfa3bSKurt Lidl@@ -471,6 +473,8 @@ main(int argc, char *argv[]) 68df0cfa3bSKurt Lidl if (EMPTYSTR(confdir)) 69df0cfa3bSKurt Lidl confdir = _DEFAULT_CONFDIR; 70df0cfa3bSKurt Lidl 71df0cfa3bSKurt Lidl+ pfilter_open(); 72df0cfa3bSKurt Lidl+ 73df0cfa3bSKurt Lidl if (dowtmp) { 74df0cfa3bSKurt Lidl #ifdef SUPPORT_UTMPX 75df0cfa3bSKurt Lidl ftpd_initwtmpx(); 76df0cfa3bSKurt Lidl@@ -1401,6 +1405,7 @@ do_pass(int pass_checked, int pass_rval, 77df0cfa3bSKurt Lidl if (rval) { 78df0cfa3bSKurt Lidl reply(530, "%s", rval == 2 ? "Password expired." : 79df0cfa3bSKurt Lidl "Login incorrect."); 80df0cfa3bSKurt Lidl+ pfilter_notify(1, rval == 2 ? "exppass" : "badpass"); 81df0cfa3bSKurt Lidl if (logging) { 82df0cfa3bSKurt Lidl syslog(LOG_NOTICE, 83df0cfa3bSKurt Lidl "FTP LOGIN FAILED FROM %s", remoteloghost); 84df0cfa3bSKurt Lidl@@ -1444,6 +1449,7 @@ do_pass(int pass_checked, int pass_rval, 85df0cfa3bSKurt Lidl *remote_ip = 0; 86df0cfa3bSKurt Lidl remote_ip[sizeof(remote_ip) - 1] = 0; 87df0cfa3bSKurt Lidl if (!auth_hostok(lc, remotehost, remote_ip)) { 88df0cfa3bSKurt Lidl+ pfilter_notify(1, "bannedhost"); 89df0cfa3bSKurt Lidl syslog(LOG_INFO|LOG_AUTH, 90df0cfa3bSKurt Lidl "FTP LOGIN FAILED (HOST) as %s: permission denied.", 91df0cfa3bSKurt Lidl pw->pw_name); 92