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