On Sun, Mar 18, 2007 at 08:57:32PM +0000, Stuart Henderson wrote:
> On 2007/03/18 16:35, Peter wrote:
> > On OpenBSD 4.0, how do I specify what port spamlogd should consider SMTP?
> > My
> > MTA is running on a non-standard port.
>
> edit /usr/src/libexec/spamlogd/spamlogd.c and recompile -
> it's hardcoded "ip and port 25 ..."
Would something like the following not do the trick?
(Warning to the original poster: please wait for a while for more
clueful people to tell me I screwed up before actually trying to run
with this diff - there is no obvious reason why it wouldn't work, but I
didn't test it, can not claim familiarity with this code, and still have
a lot to learn. Stuart seems to think the general idea would work,
though.)
Another warning: this diff is against the version in my (-current)
source tree, which is rather recent. So it might not be the newest, but
it's certainly removed somewhat from the 4.0 spamlogd.
Joachim
Index: spamlogd.8
===================================================================
RCS file: /var/nfs/cvsync/src/libexec/spamlogd/spamlogd.8,v
retrieving revision 1.12
diff -u -b -B -u -r1.12 spamlogd.8
--- spamlogd.8 4 Mar 2007 09:58:22 -0000 1.12
+++ spamlogd.8 18 Mar 2007 21:23:52 -0000
@@ -37,7 +37,7 @@
updates the
.Pa /var/db/spamd
whitelist entries whenever a connection
-to port 25 is logged to the
+to the specified port (port 25 by default) is logged to the
.Xr pflog 4
interface.
The source addresses of inbound connections are whitelisted
@@ -77,6 +77,9 @@
interface to listen for connection notifications.
The default is to watch for connections logged on
.Dq pflog0 .
+.It Fl p mailport
+port on which incoming mail will arrive.
+The default is to watch for connections to port 25.
.It Fl Y Ar synctarget
Add a target to receive synchronisation messages; see
.Sx SYNCHRONISATION
Index: spamlogd.c
===================================================================
RCS file: /var/nfs/cvsync/src/libexec/spamlogd/spamlogd.c,v
retrieving revision 1.19
diff -u -b -B -u -r1.19 spamlogd.c
--- spamlogd.c 5 Mar 2007 14:55:09 -0000 1.19
+++ spamlogd.c 18 Mar 2007 21:21:52 -0000
@@ -70,6 +70,7 @@
u_int8_t flag_inbound = 0;
char *networkif = NULL;
char *pflogif = "pflog0";
+int mailport = 25;
char errbuf[PCAP_ERRBUF_SIZE];
pcap_t *hpcap = NULL;
struct syslog_data sdata = SYSLOG_DATA_INIT;
@@ -109,8 +110,9 @@
init_pcap(void)
{
struct bpf_program bpfp;
- char filter[PCAPFSIZ] = "ip and port 25 and action pass "
- "and tcp[13]&0x12=0x2";
+ char filter[PCAPFSIZ];
+
+ snprintf(filter, sizeof(filter), "ip and port %d and action pass and
tcp[13]&0x12=0x2", mailport);
if ((hpcap = pcap_open_live(pflogif, PCAPSNAP, 1, PCAPTIMO,
errbuf)) == NULL) {
@@ -299,6 +301,7 @@
struct servent *ent;
char *sync_iface = NULL;
char *sync_baddr = NULL;
+ const char *errstr;
if ((ent = getservbyname("spamd-sync", "udp")) == NULL)
errx(1, "Can't find service \"spamd-sync\" in /etc/services");
@@ -317,6 +320,11 @@
break;
case 'l':
pflogif = optarg;
+ break;
+ case 'p':
+ mailport = strtonum(optarg, 0, 65535, &errstr);
+ if (errstr)
+ errx(1, "The mail port is %s: %s", errstr,
optarg);
break;
case 'Y':
if (sync_addhost(optarg, sync_port) != 0)