qmail-smtpd.spam.patch
author Tomas Zeman <tzeman@volny.cz>
Tue, 17 Jul 2012 07:19:48 +0200
changeset 5 4c75df3b7bbb
parent 3 a7d3f30999ff
permissions -rw-r--r--
pristine/qmail-103-oversize-dns.patch: +fix
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     1
stika.net antispam
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     2
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     3
diff -r 72430e923db2 qmail-smtpd.c
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     4
--- a/qmail-smtpd.c	Thu Nov 01 16:46:06 2007 +0100
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     5
+++ b/qmail-smtpd.c	Thu Nov 01 16:54:59 2007 +0100
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     6
@@ -31,6 +31,7 @@
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     7
 #define BMCHECK_BMT 2
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     8
 #define BMCHECK_BMTNR 3
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     9
 #define BMCHECK_BHELO 4
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    10
+#define BMCHECK_GMF 5	// 20041202 tz - goodmailfrom functionality
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    11
     
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    12
 
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    13
 #define MAXHOPS 100
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    14
@@ -108,6 +109,9 @@ int bmfok = 0;
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    15
 int bmfok = 0;
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    16
 stralloc bmf = {0};
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    17
 
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    18
+int gmfok = 0;
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    19
+stralloc gmf = {0};
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    20
+
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    21
 int bmfnrok = 0;
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    22
 stralloc bmfnr = {0};
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    23
 
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    24
@@ -140,6 +144,9 @@ void setup()
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    25
 
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    26
   bmfok = control_readfile(&bmf,"control/badmailfrom",0);
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    27
   if (bmfok == -1) die_control();
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    28
+
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    29
+  gmfok = control_readfile(&gmf,"control/goodmailfrom",0);
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    30
+  if (gmfok == -1) die_control();
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    31
 
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    32
   bmfnrok = control_readfile(&bmfnr,"control/badmailfromnorelay",0);
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    33
   if (bmfnrok == -1) die_control();
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    34
@@ -247,6 +254,8 @@ int bmcheck(which) int which;
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    35
 
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    36
   if (which == BMCHECK_BMF) {
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    37
     if (!stralloc_copy(&bmb,&bmf)) die_nomem();
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    38
+  } else if (which == BMCHECK_GMF) {		// 20041202 tz - goodmailfrom
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    39
+    if (!stralloc_copy(&bmb,&gmf)) die_nomem();
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    40
   } else if (which == BMCHECK_BMFNR) {
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    41
     if (!stralloc_copy(&bmb,&bmfnr)) die_nomem();
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    42
   } else if (which == BMCHECK_BMT) {
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    43
@@ -304,6 +313,7 @@ int flagbarfbhelo;
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    44
 int flagbarfbhelo;
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    45
 stralloc mailfrom = {0};
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    46
 stralloc rcptto = {0};
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    47
+int senderallowed = 0;	/* 20021121 tz - our anti-spam */
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    48
 
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    49
 void smtp_helo(arg) char *arg;
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    50
 {
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    51
@@ -327,6 +337,7 @@ void smtp_mail(arg) char *arg;
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    52
   if (!addrparse(arg)) { err_syntax(); return; }
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    53
   flagbarfbmf = 0; /* bmcheck is skipped for empty envelope senders */
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    54
   if ((bmfok) && (addr.len != 1)) flagbarfbmf = bmcheck(BMCHECK_BMF);
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    55
+  if (flagbarfbmf && gmfok) flagbarfbmf = !bmcheck(BMCHECK_GMF);	// 20041202 tz - goodmailfrom
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    56
   if ((!flagbarfbmf) && (bmfnrok) && (addr.len != 1) && (!relayclient)) {
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    57
     flagbarfbmf = bmcheck(BMCHECK_BMFNR);
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    58
   }
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    59
@@ -334,6 +345,7 @@ void smtp_mail(arg) char *arg;
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    60
   if (!stralloc_copys(&rcptto,"")) die_nomem();
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    61
   if (!stralloc_copys(&mailfrom,addr.s)) die_nomem();
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    62
   if (!stralloc_0(&mailfrom)) die_nomem();
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    63
+  senderallowed = addrallowed();			/* 20021121 tz - our anti-spam */
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    64
   out("250 ok\r\n");
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    65
 }
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    66
 void smtp_rcpt(arg) char *arg; {
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    67
@@ -377,6 +389,7 @@ void smtp_rcpt(arg) char *arg; {
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    68
   }
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    69
   else
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    70
     if (!addrallowed()) { err_nogateway(); return; }
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    71
+  if (!(addrallowed() || senderallowed)) { err_nogateway(); return; }	/* 20021121 tz - our anti-spam */
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    72
   if (!stralloc_cats(&rcptto,"T")) die_nomem();
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    73
   if (!stralloc_cats(&rcptto,addr.s)) die_nomem();
a7d3f30999ff qmail-smtpd.spam: out antispam (control/goodmailfrom)
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    74
   if (!stralloc_0(&rcptto)) die_nomem();