From 188e8256f3d42b46f335879205078e5c6fd79823 Mon Sep 17 00:00:00 2001 From: Stuart Gathman <stuart@gathman.org> Date: Sun, 18 Mar 2007 02:32:21 +0000 Subject: [PATCH] Gossip configuration options: client or standalone with optional peers. --- bms.py | 21 +++++++++++++++++---- milter.cfg | 15 +++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/bms.py b/bms.py index 3487255..dcb28b9 100644 --- a/bms.py +++ b/bms.py @@ -1,6 +1,9 @@ #!/usr/bin/env python # A simple milter that has grown quite a bit. # $Log$ +# Revision 1.96 2007/03/17 21:22:48 customdesigned +# New delayed DSN pattern. Retab (expandtab). +# # Revision 1.95 2007/03/03 19:18:57 customdesigned # Fix continuing findsrs when srs.reverse fails. # @@ -117,7 +120,8 @@ from email.Utils import getaddresses,parseaddr # Import gossip if available try: import gossip - from gossip.server import Gossip,Peer + import gossip.client + import gossip.server except: gossip = None # Import pysrs if available @@ -228,9 +232,6 @@ logging.basicConfig( ) milter_log = logging.getLogger('milter') -if gossip: - gossip_node = Gossip('gossip4.db',1000) - def read_config(list): cp = MilterConfigParser({ 'tempdir': "/var/log/milter/save", @@ -374,6 +375,18 @@ def read_config(list): srs_domain.add(cp.getdefault('srs','fwdomain')) banned_users = cp.getlist('srs','banned_users') + if gossip: + global gossip_node + if cp.has_option('gossip','server'): + server = cp.get('gossip','server') + host,port = gossip.splitaddr(server) + gossip_node = gossip.client.Gossip(host,port) + else: + gossip_node = gossip.server.Gossip('gossip4.db',1000) + for p in cp.getlist('gossip','peers'): + host,port = gossip.splitaddr(p) + gossip_node.peers.append(gossip.server.Peer(host,port)) + def findsrs(fp): lastln = None for ln in fp: diff --git a/milter.cfg b/milter.cfg index 7b46e60..c99e689 100644 --- a/milter.cfg +++ b/milter.cfg @@ -200,3 +200,18 @@ blind = 1 # delivered. ;dspam_screener=david,goliath # The dspam CGI can also be used: logins must match dspam users + +# Optional pygossip interface +# +# GOSSiP tracks reputation of domain:qualifier pairs. For instance, +# the reputation of example.com:SPF is tracked separately from +# example.com:neutral. Currently qualifiers are +# SPF,neutral,softfail,fail,permerror,GUESS,HELO +[gossip] +# Use a dedicated GOSSiP server. If not specified, a local database +# will be used. +;server=host:11900 +# If a local database is used, also consult these GOSSiP servers about +# domains. Peer reputation is also tracked as to how often they +# agree with us, and weighted accordingly. +;peers=host1:port,host2 -- GitLab