You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
5.3 KiB
167 lines
5.3 KiB
Index: amavisd.conf |
|
--- amavisd.conf.orig 2009-04-22 02:24:04 +0200 |
|
+++ amavisd.conf 2009-04-22 19:46:28 +0200 |
|
@@ -360,10 +360,10 @@ |
|
# ['Sophos SAVI', \&sophos_savi ], |
|
|
|
# ### http://www.clamav.net/ |
|
-# ['ClamAV-clamd', |
|
-# \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"], |
|
-# qr/\bOK$/m, qr/\bFOUND$/m, |
|
-# qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ], |
|
+['ClamAV-clamd', |
|
+ \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"], |
|
+ qr/\bOK$/m, qr/\bFOUND$/m, |
|
+ qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ], |
|
# # NOTE: run clamd under the same user as amavisd, or run it under its own |
|
# # uid such as clamav, add user clamav to the amavis group, and then add |
|
# # AllowSupplementaryGroups to clamd.conf; |
|
Index: amavisd |
|
--- amavisd.orig 2009-04-22 02:24:12 +0200 |
|
+++ amavisd 2009-04-22 19:36:50 +0200 |
|
@@ -12048,7 +12048,10 @@ |
|
if ($subject_tag ne '') { |
|
if (defined $msginfo->get_header_field('subject')) { |
|
$hdr_edits->edit_header('Subject', |
|
- sub { $_[1]=~/^([ \t]?)(.*)\z/s; ' '.$subject_tag.$2 }); |
|
+ sub { $_[1]=~/^([ \t]?)(.*)\z/s; |
|
+ my $subj = $2; |
|
+ $subj=~s/\Q$subject_tag\E//sg; |
|
+ ' '.$subject_tag.$subj }); |
|
} else { # no Subject header field present, insert one |
|
$subject_tag =~ s/[ \t]+\z//; # trim |
|
$hdr_edits->add_header('Subject', $subject_tag); |
|
Index: amavislogsumm |
|
--- amavislogsumm.orig 2009-04-22 19:36:50 +0200 |
|
+++ amavislogsumm 2009-04-22 19:36:50 +0200 |
|
@@ -309,7 +309,7 @@ |
|
if ($spamCount > 0) { |
|
printf "\tSPAM : %5.2f\n", ($spamHitSum / $spamCount); |
|
} |
|
- if (($timeLineCount - $spamCount) > 0) { |
|
+ if (($timeLineCount - $spamCount - $unscoredMail) > 0) { |
|
printf "\tHAM : %5.2f\n", ($noneSpamHitSum / ($timeLineCount - $spamCount - $unscoredMail)); |
|
print "\n"; |
|
} |
|
Index: helper-progs/Makefile.in |
|
--- helper-progs/Makefile.in.orig 2004-04-11 01:51:52 +0200 |
|
+++ helper-progs/Makefile.in 2009-04-22 19:36:50 +0200 |
|
@@ -2,7 +2,8 @@ |
|
# Makefile.in for amavisd-new helper-progs |
|
|
|
# Needed for autoconf to behave properly... |
|
-AMAVISUSER=@AMAVISUSER@ |
|
+AMAVIS_USER=dummy |
|
+AMAVIS_GROUP=dummy |
|
prefix=@prefix@ |
|
exec_prefix=@exec_prefix@ |
|
sbindir=@sbindir@ |
|
@@ -11,7 +12,7 @@ |
|
MINCLUDE=@MINCLUDE@ |
|
# TODO : use some VERSION variable DEFS= -DVERSION=\"@VERSION@ and in the 2 .c helper programs |
|
# additional flags |
|
-DEFS=-D_POSIX_PTHREAD_SEMANTICS |
|
+DEFS=-D_POSIX_PTHREAD_SEMANTICS -DAMAVIS_USER=\"$(AMAVIS_USER)\" -DMILTER_SOCKET_GROUP=\"$(AMAVIS_GROUP)\" |
|
|
|
all: amavis-milter amavis |
|
|
|
Index: helper-progs/amavis-milter.c |
|
--- helper-progs/amavis-milter.c.orig 2008-06-27 15:31:45 +0200 |
|
+++ helper-progs/amavis-milter.c 2009-04-22 19:36:50 +0200 |
|
@@ -52,7 +52,7 @@ |
|
#ifdef HAVE_SM_GEN_H |
|
# include "sm/gen.h" |
|
#endif |
|
-#include "libmilter/mfapi.h" |
|
+#include "milter/mfapi.h" |
|
|
|
typedef int mybool; |
|
|
|
@@ -929,13 +929,14 @@ |
|
int |
|
main(int argc, char *argv[]) |
|
{ |
|
-/* struct passwd *userinfo; *amavis uid* */ |
|
+ struct passwd *userinfo; |
|
int c, i; |
|
char *p, *milter_socket = NULL, *milter_socket_group = NULL; |
|
/* const char *args = "dg:p:vx"; */ |
|
- const char *args = ":hdg:p:Dvx"; /* some mix of old and new options!!! */ |
|
+ const char *args = ":hdg:p:DvxP:"; /* some mix of old and new options!!! */ |
|
|
|
pid_t pid; |
|
+ char *pidfile = NULL; |
|
int devnull; |
|
|
|
#if !defined(HAVE_MKDTEMP) && !defined(HAVE_MKTEMP) |
|
@@ -970,6 +971,9 @@ |
|
} |
|
milter_socket = strdup(optarg); |
|
break; |
|
+ case 'P': |
|
+ pidfile = strdup(optarg); |
|
+ break; |
|
case 'v': |
|
verbosity++; |
|
break; |
|
@@ -999,23 +1003,20 @@ |
|
uname(&amavis_uts); |
|
|
|
/* check user and group */ |
|
-/* if (!(userinfo = getpwnam(AMAVIS_USER))) { |
|
- * perror("getpwnam"); |
|
- * exit(EXIT_FAILURE); |
|
- * } |
|
- * amavis_gid = userinfo->pw_gid; |
|
- * if (!milter_socket_group) { |
|
- * milter_socket_group = strdup(MILTER_SOCKET_GROUP); |
|
- * if (!milter_socket_group) { |
|
- * perror("strdup"); |
|
- * exit(EXIT_FAILURE); |
|
- * } |
|
- * } |
|
- * if (group_member(milter_socket_group) < 0) { |
|
- * fprintf(stderr, "%s not member of %s group\n", AMAVIS_USER, milter_socket_group); |
|
- * exit(EXIT_FAILURE); |
|
- * } |
|
- */ |
|
+ if (!(userinfo = getpwnam(AMAVIS_USER))) { |
|
+ perror("getpwnam"); |
|
+ exit(EXIT_FAILURE); |
|
+ } |
|
+ amavis_gid = userinfo->pw_gid; |
|
+ if (!milter_socket_group) { |
|
+ milter_socket_group = strdup(MILTER_SOCKET_GROUP); |
|
+ if (!milter_socket_group) { |
|
+ perror("strdup"); |
|
+ exit(EXIT_FAILURE); |
|
+ } |
|
+ } |
|
+ group_member(milter_socket_group); |
|
+ |
|
if (!milter_socket) { |
|
fprintf(stderr, "%s: no milter socket specified (missing option -p)\n\n", argv[0]); |
|
usage(); |
|
@@ -1116,11 +1117,22 @@ |
|
} |
|
} |
|
|
|
+ if (pidfile != NULL) { |
|
+ FILE *fp; |
|
+ if ((fp = fopen(pidfile, "w")) == NULL) { |
|
+ amavis_syslog(DBG_FATAL, "Unable to write PID to file \"%s\": %s", pidfile, strerror(errno)); |
|
+ exit(EXIT_FAILURE); |
|
+ } |
|
+ fprintf(fp, "%ld", (long)getpid()); |
|
+ fclose(fp); |
|
+ } |
|
+ |
|
/* change process group id */ |
|
if (miltergroup && (setgid(miltergroup->gr_gid)) < 0) { |
|
amavis_syslog(DBG_FATAL, "setgid(%d): %s", miltergroup->gr_gid, strerror(errno)); |
|
exit(EX_UNAVAILABLE); |
|
} |
|
+ setuid(userinfo->pw_uid); |
|
|
|
/* smfi_settimeout(1800); */ /* defaults to 7210 seconds */ |
|
|
|
|