ports/134545: spamlogd does not use proper white expiration time

Doug Hardie bc979 at lafn.org
Thu May 14 18:40:02 UTC 2009


>Number:         134545
>Category:       ports
>Synopsis:       spamlogd does not use proper white expiration time
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu May 14 18:40:01 UTC 2009
>Closed-Date:
>Last-Modified:
>Originator:     Doug Hardie
>Release:        FreeBSD 7.2-RELEASE i386
>Organization:
>Environment:
System: FreeBSD zool.lafn.org 7.2-RELEASE FreeBSD 7.2-RELEASE #0: Thu May 7 01:54:57 PDT 2009 doug at zool.lafn.org:/usr2/obj/usr2/src/sys/LAFN i386


	
>Description:
	If you use a different spamd white expiration time (via the -G 
	argument then spamlogd will use the default when it updates the
	real expriration date in the database.  As a result, entries will
	be expired at an unexpected time.
>How-To-Repeat:
	Setup spamd with a -G argument where the white expiration time is
	different from the default.  Activate spamlogd.  Send mail to get
	an address white listed.  Check the expiration date for that source.
	send additional mail from that source.  Check the expiration date
	again.  It will not be what you expect but will be the default
	white expiration date.
>Fix:

	Attached patch to spamlogd to include the -G argument to enable it
	to use the proper white expiration time.



--- spamlogd/spamlogd.c.orig	2007-06-03 08:22:33.000000000 -0700
+++ spamlogd/spamlogd.c	2009-05-14 10:47:22.000000000 -0700
@@ -87,6 +87,11 @@
 int use_pf = 1;
 #endif
 
+time_t passtime = PASSTIME;
+time_t greyexp = GREYEXP;
+time_t whiteexp = WHITEEXP;
+
+
 extern char		*__progname;
 
 void	logmsg(int , const char *, ...);
@@ -158,10 +163,12 @@
 
 	pcap_freecode(&bpfp);
 
+#ifdef BIOCLOCK
 	if (ioctl(pcap_fileno(hpcap), BIOCLOCK) < 0) {
 		logmsg(LOG_ERR, "BIOCLOCK: %s", strerror(errno));
 		return (-1);
 	}
+#endif
 
 	return (0);
 }
@@ -269,7 +276,7 @@
 		gd.first = now;
 		gd.bcount = 1;
 		gd.pass = now;
-		gd.expire = now + WHITEEXP;
+		gd.expire = now + whiteexp;
 		memset(&dbk, 0, sizeof(dbk));
 		dbk.size = strlen(ip);
 		dbk.data = ip;
@@ -289,7 +296,7 @@
 		}
 		memcpy(&gd, dbd.data, sizeof(gd));
 		gd.pcount++;
-		gd.expire = now + WHITEEXP;
+		gd.expire = now + whiteexp;
 		memset(&dbk, 0, sizeof(dbk));
 		dbk.size = strlen(ip);
 		dbk.data = ip;
@@ -305,7 +312,7 @@
 	db->close(db);
 	db = NULL;
 	if (syncsend)
-		sync_white(now, now + WHITEEXP, ip);
+		sync_white(now, now + whiteexp, ip);
 	return (0);
  bad:
 	db->close(db);
@@ -318,6 +325,8 @@
 {
 	fprintf(stderr,
 	    "usage: %s [-DI] [-i interface] [-l pflog_interface] [-Y synctarget]\n"
+            "\t[-G passtime:greyexp:whiteexp]\n"
+
 #ifdef __FreeBSD__
 		"\t[-m mode]\n"
 #endif
@@ -343,9 +352,9 @@
 		errx(1, "Can't find service \"spamd-sync\" in /etc/services");
 	sync_port = ntohs(ent->s_port);
 #ifndef __FreeBSD__
-	while ((ch = getopt(argc, argv, "DIi:l:Y:")) != -1) {
+	while ((ch = getopt(argc, argv, "DIi:l:Y:G:")) != -1) {
 #else
-	while ((ch = getopt(argc, argv, "DIi:l:Y:m:")) != -1) {
+	while ((ch = getopt(argc, argv, "DIi:l:Y:m:G:")) != -1) {
 #endif
 		switch (ch) {
 		case 'D':
@@ -371,6 +380,18 @@
 				use_pf=0;
 			break;
 #endif
+
+                case 'G':
+                        if (sscanf(optarg, "%d:%d:%d", &passtime, &greyexp,
+                            &whiteexp) != 3)
+                                usage();
+                        /* convert to seconds from minutes */
+                        passtime *= 60;
+                        /* convert to seconds from hours */
+                        whiteexp *= (60 * 60);
+                        /* convert to seconds from hours */
+                        greyexp *= (60 * 60);
+                        break;
 			
 		default:
 			usage();
--- spamlogd/spamlogd.8.orig	2007-04-02 04:27:07.000000000 -0700
+++ spamlogd/spamlogd.8	2009-05-14 10:49:20.000000000 -0700
@@ -23,6 +23,10 @@
 .Sh SYNOPSIS
 .Nm spamlogd
 .Op Fl DI
+.Oo
+.Fl G
+.Ar passtime : Ns Ar greyexp : Ns Ar whiteexp
+.Oc
 .Op Fl i Ar interface
 .Op Fl l Ar pflog_interface
 .Op Fl Y Ar synctarget
@@ -60,6 +64,18 @@
 Debugging mode.
 .Nm
 does not disassociate from the controlling terminal.
+.It Xo
+.Fl G
+.Ar passtime : Ns Ar greyexp : Ns Ar whiteexp
+.Xc
+Adjust the three time parameters for greylisting.
+.Ar passtime
+defaults to 25 (minutes),
+.Ar greyexp
+to 4 (hours),
+and
+.Ar whiteexp
+to 864 (hours, approximately 36 days).
 .It Fl I
 Specify that
 .Nm


>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list