Browse Source

add support for running the amavis-milter daemon

master
parent
commit
9f3b05d7b0
  1. 121
      amavisd/amavisd.patch
  2. 7
      amavisd/amavisd.spec
  3. 44
      amavisd/rc.amavisd

121
amavisd/amavisd.patch

@ -1,6 +1,6 @@
Index: amavisd.conf
--- amavisd.conf.orig 2006-09-30 11:29:20 +0200
+++ amavisd.conf 2006-09-30 17:36:20 +0200
--- amavisd.conf.orig 2006-11-20 18:35:32 +0100
+++ amavisd.conf 2006-12-30 17:09:37 +0100
@@ -317,16 +317,16 @@
# ### http://www.csupomona.edu/~henson/www/projects/SAVI-Perl/
# ['Sophos SAVI', \&sophos_savi ],
@ -29,8 +29,8 @@ Index: amavisd.conf
# ### http://www.clamav.net/ and CPAN (memory-hungry! clamd is preferred)
# ['Mail::ClamAV', \&ask_clamav, "*", [0], [1], qr/^INFECTED: (.+)/],
Index: amavislogsumm
--- amavislogsumm.orig 2006-04-04 08:33:40 +0200
+++ amavislogsumm 2006-04-04 08:33:40 +0200
--- amavislogsumm.orig 2006-12-30 17:09:37 +0100
+++ amavislogsumm 2006-12-30 17:09:37 +0100
@@ -309,7 +309,7 @@
if ($spamCount > 0) {
printf "\tSPAM : %5.2f\n", ($spamHitSum / $spamCount);
@ -40,3 +40,116 @@ Index: amavislogsumm
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 2006-12-30 17:09:37 +0100
@@ -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 2004-07-02 16:44:26 +0200
+++ helper-progs/amavis-milter.c 2006-12-30 17:11:24 +0100
@@ -928,13 +928,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)
@@ -969,6 +970,9 @@
}
milter_socket = strdup(optarg);
break;
+ case 'P':
+ pidfile = strdup(optarg);
+ break;
case 'v':
verbosity++;
break;
@@ -998,23 +1002,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();
@@ -1115,11 +1116,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 */

7
amavisd/amavisd.spec

@ -130,7 +130,9 @@ AutoReqProv: no
--with-user="%{l_rusr}" \
--with-milterinc="%{l_prefix}/include/milter" \
--with-milterlib="%{l_prefix}/lib"
%{l_make} %{l_mflags}
%{l_make} %{l_mflags} \
AMAVIS_USER="%{l_rusr}" \
AMAVIS_GROUP="%{l_mgrp}"
) || exit $?
%endif
@ -176,7 +178,7 @@ AutoReqProv: no
%{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT %{l_files_std} \
'%config %{l_prefix}/etc/amavisd/amavisd.conf' \
'%doc %{l_prefix}/share/amavisd/*' \
'%attr(0750,%{l_rusr},%{l_rgrp}) %{l_prefix}/var/amavisd' \
'%attr(0750,%{l_rusr},%{l_mgrp}) %{l_prefix}/var/amavisd' \
'%attr(0750,%{l_rusr},%{l_rgrp}) %{l_prefix}/var/amavisd/*'
%files -f files
@ -202,6 +204,7 @@ AutoReqProv: no
# before erase, stop service and remove log files
[ $1 -eq 0 ] || exit 0
%{l_rc} amavisd stop 2>/dev/null
rm -f $RPM_INSTALL_PREFIX/var/amavisd/.spamassassin >/dev/null 2>&1 || true
rm -f $RPM_INSTALL_PREFIX/var/amavisd/*.log* >/dev/null 2>&1 || true
rm -f $RPM_INSTALL_PREFIX/var/amavisd/*.sum* >/dev/null 2>&1 || true
exit 0

44
amavisd/rc.amavisd

@ -5,6 +5,7 @@
%config
amavisd_enable="$openpkg_rc_def"
amavisd_daemons="amavisd amavis-milter"
amavisd_log_prolog="true"
amavisd_log_epilog="true"
amavisd_log_numfiles="10"
@ -13,10 +14,19 @@
amavisd_sum_flags=""
%common
amavisd_pidfile="@l_prefix@/var/amavisd/amavisd.pid"
amavisd_cfgfile="@l_prefix@/etc/amavisd/amavisd.conf"
amavisd_pidfile_amavisd="@l_prefix@/var/amavisd/amavisd.pid"
amavisd_pidfile_amavis_milter="@l_prefix@/var/amavisd/amavis-milter.pid"
amavisd_socket_amavis_milter="@l_prefix@/var/amavisd/amavis-milter.socket"
amavisd_signal () {
[ -f $amavisd_pidfile ] && kill -$1 `cat $amavisd_pidfile`
[ -f $amavisd_pidfile_amavisd ] \
&& kill -$1 `cat $amavisd_pidfile_amavisd`
local rc_amavisd_amavisd=$?
[ -f $amavisd_pidfile_amavis_milter ] \
&& kill -$1 `cat $amavisd_pidfile_amavis_milter`
local rc_amavisd_amavis_milter=$?
[ $rc_amavisd_amavisd -eq 0 \
-o $rc_amavisd_amavis_milter -eq 0 ]
}
%status -u @l_rusr@ -o
@ -28,28 +38,42 @@
echo "amavisd_usable=\"$amavisd_usable\""
echo "amavisd_active=\"$amavisd_active\""
%start -u @l_rusr@
%start -u @l_susr@
rcService amavisd enable yes || exit 0
rcService amavisd active yes && exit 0
@l_prefix@/sbin/amavisd -c $amavisd_cfgfile
for daemon in $amavisd_daemons; do
if [ ".$daemon" = ".amavisd" ]; then
@l_prefix@/sbin/amavisd -c $amavisd_cfgfile
elif [ ".$daemon" = ".amavis-milter" -a -x @l_prefix@/sbin/amavis-milter ]; then
rm -f $amavisd_socket_amavis_milter
( umask 002
@l_prefix@/sbin/amavis-milter \
-p local:$amavisd_socket_amavis_milter \
-P $amavisd_pidfile_amavis_milter
) || exit $?
fi
done
%stop -u @l_rusr@
%stop -u @l_susr@
rcService amavisd enable yes || exit 0
rcService amavisd active no && exit 0
@l_prefix@/sbin/amavisd -c $amavisd_cfgfile stop
amavisd_signal TERM
sleep 1
rm -f $amavisd_socket_amavis_milter
%restart -u @l_rusr@
%restart -u @l_susr@
rcService amavisd enable yes || exit 0
rcService amavisd active no && exit 0
rc amavisd stop
sleep 4
sleep 2
rc amavisd start
%daily -u @l_rusr@
%daily -u @l_susr@
rcService amavisd enable yes || exit 0
shtool rotate -f \
-n ${amavisd_log_numfiles} -s 0 \
-z ${amavisd_log_complevel} -m 640 \
-z ${amavisd_log_complevel} -m 640 -o @l_rusr@ -g @l_rgrp@ \
@l_prefix@/var/amavisd/amavisd.sum
logfiles="@l_prefix@/var/amavisd/amavisd.log"
if [ -f "@l_prefix@/var/amavisd/amavisd.log.0" ]; then
@ -60,7 +84,7 @@
>@l_prefix@/var/amavisd/amavisd.sum 2>/dev/null
shtool rotate -f \
-n ${amavisd_log_numfiles} -s ${amavisd_log_minsize} -d \
-z ${amavisd_log_complevel} -m 640 \
-z ${amavisd_log_complevel} -m 640 -o @l_rusr@ -g @l_rgrp@ \
-P "${amavisd_log_prolog}" \
-E "${amavisd_log_epilog}; rc amavisd restart" \
@l_prefix@/var/amavisd/amavisd.log

Loading…
Cancel
Save