Subversion Repositories

?revision_form?Rev ?revision_input??revision_submit??revision_endform?

Rev 90 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
70 magnus 1
Description: Changes needed because Exim now exports only the symbols
2
 that are part of the official API.
3
Author: Magnus Holmgren <holmgren@debian.org>
4
Bug-Debian: http://bugs.debian.org/420443
5
Bug-Debian: http://bugs.debian.org/420555
6
Bug-Debian: http://bugs.debian.org/420736
7
 
90 magnus 8
--- a/sa-exim.c
9
+++ b/sa-exim.c
10
@@ -29,10 +29,7 @@ http://lists.merlins.org/lists/listinfo/
70 magnus 11
 #include "sa-exim.h"
12
 
13
 /* Exim includes */
14
-#include "local_scan.h"
15
-extern FILE   *smtp_out;               /* Exim's incoming SMTP output file */
16
-extern int     body_linecount;         /* Line count in body */
17
-extern uschar *primary_hostname;
18
+#include <local_scan.h>
19
 
20
 #ifdef DLOPEN_LOCAL_SCAN
21
 
90 magnus 22
@@ -602,6 +599,10 @@ int local_scan(volatile int fd, uschar *
70 magnus 23
     /* Do not put a %s in there, or you'll segfault */
24
     static char *SAmsgerror="Temporary local error while processing message, please contact postmaster";
25
 
26
+    /* This needs to be retrieved through expand_string in order
27
+       not to violate the API. */
90 magnus 28
+    uschar *primary_hostname=expand_string("$primary_hostname");
70 magnus 29
+
30
     /* New values we read from spamassassin */
31
     char *xspamstatus=NULL;
32
     char *xspamflag=NULL;
91 magnus 33
@@ -1229,18 +1230,20 @@ restart:
34
            }
35
        }
36
 
37
+       
38
        if (SAEximDebug > 1)
70 magnus 39
        {
91 magnus 40
            log_write(0, LOG_MAIN, "SA: Debug2: body_linecount before SA: %d", body_linecount);
41
        }
42
 
43
        /* update global variable $body_linecount to reflect the new body size*/
44
-       body_linecount = (line - 1);
45
+       if (body_linecount > 0) body_linecount = (line - 1); // Not updating if zero, indicating spool_wireformat
46
 
47
        if (SAEximDebug > 1)
48
        {
70 magnus 49
            log_write(0, LOG_MAIN, "SA: Debug2: body_linecount after SA: %d", body_linecount);
50
        }
90 magnus 51
+
70 magnus 52
     }
53
 
54
     fclose((FILE *)readfh);
91 magnus 55
@@ -1331,6 +1334,9 @@ restart:
70 magnus 56
 
57
        if (dorej && doteergrube)
58
        {
59
+           char *teergrubewaitstr;
60
+           teergrubewaitstr=string_sprintf(SAmsgteergrubewait, spamstatus);
61
+
62
            /* By default, we'll only save temp bounces by message ID so
63
             * that when the same message is submitted several times, we
64
             * overwrite the same file on disk and not create a brand new
91 magnus 65
@@ -1353,20 +1359,8 @@ restart:
70 magnus 66
 
67
            for (i=0;i<SAteergrubetime/10;i++)
68
            {
69
-               char *str;
70
-               
71
-               /* Unfortunately, we can't use exim's smtp_printf because it
72
-                * doesn't return an error code if the write gets an EPIPE.
73
-                * So, we write ourselves, but this won't work if you have a
74
-                * TLS connection opened (that said, if you are teergrubing
75
-                * a TLS connection, it's probably a relay host, not a
76
-                * spammer, and in this case you should not teergrube a
77
-                * friendly relay, so basically we should be ok).
78
-                * If you do teergrube an SSL connection with the current
79
-                * code, you will break it, but that's acceptable */
80
-               str=string_sprintf(string_sprintf("451- %s\r\n",SAmsgteergrubewait), spamstatus);
81
-               fprintf(smtp_out, str);
82
-               ret=fflush(smtp_out);
83
+               smtp_printf("451-%s\r\n", teergrubewaitstr);
84
+               ret=smtp_fflush();
85
                if (ret != 0)
86
                {
87
                    log_write(0, LOG_MAIN | LOG_REJECT, "SA: Action: teergrubed sender for %d secs until it closed the connection: %s (scanned in %d/%d secs | Message-Id: %s). %s", i*10, spamstatus, scantime, fulltime, safemesgid, mailinfo);