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)

Reply via email to