fail2ban

Giorgos Keramidas keramida at ceid.upatras.gr
Tue Apr 24 14:31:25 EEST 2007


On 2007-04-24 10:24, Alexandros Kosiaris <alex at noc.ntua.gr> wrote:
>Christos Ricudis wrote:
>>George Iordanou wrote:
>>> μόνο μια φορά και στη συνέχεια έχει "Last message repeated
>>> X times". Προφανώς το παραπάνω δεν γίνεται αντιληπτό από
>>> το fail2ban..  Υπάρχει κάποιος τρόπος να απενεργοποιήσω το
>>> συγκεκριμένο feature του logger;
>
> Και επειδή ξέχασα να απαντήσω, τουλάχιστον το
>
> <KeramidasBait>
> syslogd του FreeBSD έχει το -c flag που απενεργοποιεί αυτό
> το feature.  Το syslogd του debian δεν βλέπω να το έχει.
> </KeramidasBait>

Δεν είναι *τόσο* δύσκολο να το φτιάξεις αυτό, για αυτό δεν τσίμπησα.
Attached είναι π.χ. ένα καρα-experimental untested patch που έφτιαξα
μόλις για το sysklogd-1.4.1_20 του Debian, που υλοποιεί ακριβώς αυτό
το -c option, το οποίο είναι διαθέσιμο και σε plain text μορφή στη
διεύθυνση:

http://people.freebsd.org/~keramida/diff/sysklogd-1.4.1-nocompression.patch

%%%
diff -r c74c7571633b sysklogd.8
--- a/sysklogd.8	Tue Apr 24 14:14:47 2007 +0300
+++ b/sysklogd.8	Tue Apr 24 14:27:13 2007 +0300
@@ -86,6 +86,12 @@ described by the people from OpenBSD at
 described by the people from OpenBSD at
 http://www.psionic.com/papers/dns.html.
 .TP
+.B "\-c"
+Disable the compression of repeated instances of the same line into
+a single line of the form ``last message repeated N times'' when the
+output is a pipe to another program.  If specified twice disable this
+compression in all cases.
+.TP
 .B "\-d"
 Turns on debug mode.  Using this the daemon will not proceed a 
 .BR fork (2)
diff -r c74c7571633b syslogd.c
--- a/syslogd.c	Tue Apr 24 14:14:47 2007 +0300
+++ b/syslogd.c	Tue Apr 24 14:27:13 2007 +0300
@@ -720,6 +720,7 @@ struct code	FacNames[] = {
 	{NULL,           -1},
 };
 
+int	Compression = 1;	/* compression of repeated messages flag */
 int	Debug;			/* debug flag */
 char	LocalHostName[MAXHOSTNAMELEN+1];	/* our hostname */
 char	*LocalDomain;		/* our local domain name */
@@ -829,13 +830,17 @@ int main(argc, argv)
 		funix[i]  = -1;
 	}
 
-	while ((ch = getopt(argc, argv, "a:dhf:l:m:np:rs:v")) != EOF)
+	while ((ch = getopt(argc, argv, "a:cdhf:l:m:np:rs:v")) != EOF)
 		switch((char)ch) {
 		case 'a':
 			if (nfunix < MAXFUNIX)
 				funixn[nfunix++] = optarg;
 			else
 				fprintf(stderr, "Out of descriptors, ignoring %s\n", optarg);
+			break;
+		case 'c':
+			if (Compression >= 0)
+				Compression--;
 			break;
 		case 'd':		/* debug */
 			Debug = 1;
@@ -1174,7 +1179,7 @@ int main(argc, argv)
 
 int usage()
 {
-	fprintf(stderr, "usage: syslogd [-drvh] [-l hostlist] [-m markinterval] [-n] [-p path]\n" \
+	fprintf(stderr, "usage: syslogd [-cdrvh] [-l hostlist] [-m markinterval] [-n] [-p path]\n" \
 		" [-s domainlist] [-f conffile]\n");
 	exit(1);
 }
@@ -1731,7 +1736,9 @@ void fprintlog(f, from, flags, msg)
 	if (msg) {
 		v->iov_base = msg;
 		v->iov_len = strlen(msg);
-	} else if (f->f_prevcount > 1) {
+	} else if (f->f_prevcount > 1 &&
+                   ((Compression == 0 && f->f_type != F_PIPE) ||
+		    Compression > 0)) {
 		(void) snprintf(repbuf, sizeof(repbuf), "last message repeated %d times",
 		    f->f_prevcount);
 		v->iov_base = repbuf;
%%%




More information about the Linux-greek-users mailing list