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

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 */