Home | History | Annotate | Line # | Download | only in diff
      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 <blocklist.h>
      6 +
      7 +#include "pfilter.h"
      8 +
      9 +static struct blocklist *blstate;
     10 +
     11 +void
     12 +pfilter_open(void)
     13 +{
     14 +	if (blstate == NULL)
     15 +		blstate = blocklist_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 +	blocklist_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 *);
     33 Index: Makefile
     34 ===================================================================
     35 RCS file: /cvsroot/src/libexec/ftpd/Makefile,v
     36 retrieving revision 1.63
     37 diff -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+=	-lblocklist
     46 +DPADD+=	${LIBBLOCKLIST}
     47 +
     48  .if defined(NO_INTERNAL_LS)
     49  CPPFLAGS+=-DNO_INTERNAL_LS
     50  .else
     51 Index: ftpd.c
     52 ===================================================================
     53 RCS file: /cvsroot/src/libexec/ftpd/ftpd.c,v
     54 retrieving revision 1.200
     55 diff -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