OpenPKG CVS Repository
http://cvs.openpkg.org/
____________________________________________________________________________
Server: cvs.openpkg.org Name: Ralf S. Engelschall
Root: /v/openpkg/cvs Email: [EMAIL PROTECTED]
Module: openpkg-src Date: 30-Dec-2006 17:14:55
Branch: HEAD Handle: 2006123016145500
Modified files:
openpkg-src/amavisd amavisd.patch amavisd.spec rc.amavisd
Log:
add support for running the amavis-milter daemon
Summary:
Revision Changes Path
1.4 +117 -4 openpkg-src/amavisd/amavisd.patch
1.71 +5 -2 openpkg-src/amavisd/amavisd.spec
1.19 +34 -10 openpkg-src/amavisd/rc.amavisd
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: openpkg-src/amavisd/amavisd.patch
============================================================================
$ cvs diff -u -r1.3 -r1.4 amavisd.patch
--- openpkg-src/amavisd/amavisd.patch 30 Sep 2006 15:38:03 -0000 1.3
+++ openpkg-src/amavisd/amavisd.patch 30 Dec 2006 16:14:55 -0000 1.4
@@ -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 @@
# ### 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 @@
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...
[EMAIL PROTECTED]@
++AMAVIS_USER=dummy
++AMAVIS_GROUP=dummy
+ [EMAIL PROTECTED]@
+ [EMAIL PROTECTED]@
+ [EMAIL PROTECTED]@
+@@ -11,7 +12,7 @@
+ [EMAIL PROTECTED]@
+ # 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 */
+
@@ .
patch -p0 <<'@@ .'
Index: openpkg-src/amavisd/amavisd.spec
============================================================================
$ cvs diff -u -r1.70 -r1.71 amavisd.spec
--- openpkg-src/amavisd/amavisd.spec 30 Dec 2006 14:46:42 -0000 1.70
+++ openpkg-src/amavisd/amavisd.spec 30 Dec 2006 16:14:55 -0000 1.71
@@ -130,7 +130,9 @@
--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 @@
%{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 @@
# 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
@@ .
patch -p0 <<'@@ .'
Index: openpkg-src/amavisd/rc.amavisd
============================================================================
$ cvs diff -u -r1.18 -r1.19 rc.amavisd
--- openpkg-src/amavisd/rc.amavisd 30 Dec 2006 14:46:42 -0000 1.18
+++ openpkg-src/amavisd/rc.amavisd 30 Dec 2006 16:14:55 -0000 1.19
@@ -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
@@ .
______________________________________________________________________
The OpenPKG Project www.openpkg.org
CVS Repository Commit List [email protected]