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