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