Package: dkimproxy
Version: 1.0.1-6
Severity: normal
Tags: patch

Hello,

I have made several improvements to /etc/init.d/dkimproxy. Many of the problems 
I found are interrelated, so please forgive me for not sending individual 
patches. I've tested the patch on my system, and so far it seems to work, but I 
haven't actually started using dkimproxy yet. If I or anybody else finds 
problems, I'll try to revise my patch later.

Changes:

* Source /etc/default/dkimproxy so that the user can override relevant
  variables used in the init script.

* Build argument lists differently so that variables can be unset in
  /etc/default/default/dkimproxy. This allows the user to specify those
  variables in the dkimproxy configuration files.

* Support variables in /etc/default/dkimproxy to enable/disable
  starting the individual dkimproxy daemons.

* Use "dkimproxy --daemonize" instead of "start-stop-daemon
  --background". With the previous version, start-stop-daemon cannot
  check exit status, and failures starting dkimproxy are silent with no
  way to tell what is causing a failure.

* Don't exit immediately if dkimproxy.in fails to start, and clean/fix
  error checking logic. This was masked by the previous bug.

* Use 'dkimproxy --pidfile" instead of "start-stop-daemon
  --make-pidfile" so the pid is correctly written to the pid file;
  otherwise, start-stop-daemon cannot stop/restart dkimproxy.

* Remove pid files on the "stop" action.


If anybody wants to test the patch, the following commands should
suffice (modify them accordingly):
# cd /etc
# cp -p init.d/dkimproxy init.d/dkimproxy.orig
# patch init.d/dkimproxy /tmp/init_dkimproxy.diff
# mv /tmp/default_dkimproxy default/dkimproxy

Note that if dkimproxy is already running, you'll need to kill it
manually since the PID wasn't properly stored.

Thanks,
Corey



-- System Information:
Debian Release: lenny/sid
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.16.29-xen (SMP w/4 CPU cores)
Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ISO-8859-1)
Shell: /bin/sh linked to /bin/bash

Versions of packages dkimproxy depends on:
ii  adduser                      3.108       add and remove users and groups
ii  liberror-perl                0.17-1      Perl module for error/exception ha
ii  libmail-dkim-perl            0.32-1      cryptographically identify the sen
ii  libnet-server-perl           0.97-1      An extensible, general perl server
ii  libtext-wrapper-perl         1.02-1      Simple word wrapping routine
ii  lsb-base                     3.2-12      Linux Standard Base 3.2 init scrip
ii  openssl                      0.9.8g-10.1 Secure Socket Layer (SSL) binary a
ii  perl                         5.10.0-11   Larry Wall's Practical Extraction 

Versions of packages dkimproxy recommends:
ii  amavisd-new               1:2.6.0.dfsg-2 Interface between MTA and virus sc

dkimproxy suggests no packages.

-- no debconf information
# Default configuration for dkimproxy.

# which daemons whould be run; anything other than '1' will disable a daemon
# default: 1
#RUN_DKIMPROXY_OUT=1
#RUN_DKIMPROXY_IN=1



# The following variables specify configuration to be passed as arguments to
# the dkimproxy daemons. If a variable is commented out, the default value
# within the /etc/init.d/dkimproxy script will be used. If a variable is unset
# or set to an empty value, the corresponding argument will be omitted from
# the dkimproxy command line, and dkimproxy is free to read a value from its
# own configuration file or use its own default value.

# configuration file to use for dkimproxy.in
# default: "/etc/dkimproxy/dkimproxy_in.conf"
#DKIMRPOXY_IN_CONF="/etc/dkimproxy/dkimproxy_in.conf"

# configuration file to use for dkimproxy.out
# default: "/etc/dkimproxy/dkimproxy_ount.conf"
#DKIMRPOXY_OUT_CONF="/etc/dkimproxy/dkimproxy_out.conf"

# user and group of the dkimproxy daemons
# default: dkimproxy
#DKIMPROXYUSER=dkimproxy
#DKIMPROXYGROUP=dkimproxy

# private key to use for signing
# default: "/var/lib/dkimproxy/private.key"
#DKIMPROXY_OUT_PRIVKEY="/var/lib/dkimproxy/private.key"

# hostname for verification "Authentication-Results" header
# default: `hostname -f`
#DKIM_HOSTNAME=`hostname -f`

# domains to sign for; specify multiple domains separated by commas
# default: `hostname -d` and domains parsed from /var/lib/dtc/etc/local_domains
#DOMAIN=`hostname -d`
--- dkimproxy.orig      2008-04-19 09:41:10.000000000 -0500
+++ dkimproxy   2008-08-04 21:15:59.000000000 -0500
@@ -21,6 +21,9 @@
 
 . /lib/lsb/init-functions
 
+DKIMPROXY_IN_CONF="/etc/dkimproxy/dkimproxy_in.conf"
+DKIMPROXY_OUT_CONF="/etc/dkimproxy/dkimproxy_out.conf"
+
 DKIMPROXYUSER=dkimproxy
 DKIMPROXYGROUP=dkimproxy
 DKIMPROXY_OUT_PRIVKEY="/var/lib/dkimproxy/private.key"
@@ -39,14 +42,33 @@
 fi
 DOMAIN=${DTC_DOMAIN}${HOST_DOMAIN}
 
-DKIMPROXY_IN_ARGS="--hostname=${DKIM_HOSTNAME} --conf_file 
/etc/dkimproxy/dkimproxy_in.conf --user=${DKIMPROXYUSER} 
--group=${DKIMPROXYGROUP}"
-DKIMPROXY_OUT_ARGS="--domain=${DOMAIN} --method=simple --conf_file 
/etc/dkimproxy/dkimproxy_out.conf --user=${DKIMPROXYUSER} 
--group=${DKIMPROXYGROUP}"
-
 DKIMPROXY_IN_BIN="/usr/sbin/dkimproxy.in"
 DKIMPROXY_OUT_BIN="/usr/sbin/dkimproxy.out"
 PIDDKIMPROXY_IN="/var/run/dkimproxy.in"
 PIDDKIMPROXY_OUT="/var/run/dkimproxy.out"
 
+RUN_DKIMPROXY_IN=1
+RUN_DKIMPROXY_OUT=1
+
+# source default file, possibly overriding variables set above
+DEFAULT_FILE="/etc/default/dkimproxy"
+[ -f "${DEFAULT_FILE}" ] && . "${DEFAULT_FILE}"
+
+# Build arguments based on configuration variables; empty variables result in
+# the argument being omitted.
+[ -n "${DKIMPROXY_IN_CONF}" ] && 
DKIMPROXY_IN_CONF_ARG="--conf_file=${DKIMPROXY_IN_CONF}"
+[ -n "${DKIMPROXY_OUT_CONF}" ] && 
DKIMPROXY_OUT_CONF_ARG="--conf_file=${DKIMPROXY_OUT_CONF}"
+[ -n "${DKIMPROXYUSER}" ] && DKIMPROXYUSER_ARG="--user=${DKIMPROXYUSER}"
+[ -n "${DKIMPROXYGROUP}" ] && DKIMPROXYGROUP_ARG="--group=${DKIMPROXYGROUP}"
+[ -n "${DKIMPROXY_OUT_PRIVKEY}" ] && 
DKIMPROXY_OUT_PRIVKEY_ARG="--keyfile=${DKIMPROXY_OUT_PRIVKEY}"
+[ -n "${DKIM_HOSTNAME}" ] && DKIM_HOSTNAME_ARG="--hostname=${DKIM_HOSTNAME}"
+[ -n "${DOMAIN}" ] && DOMAIN_ARG="--domain=${DOMAIN}"
+
+COMMON_ARGS="${DKIMPROXYUSER_ARG} ${DKIMPROXYGROUP_ARG} --daemonize"
+DKIMPROXY_IN_ARGS="${COMMON_ARGS} ${DKIMPROXY_IN_CONF_ARG} 
${DKIM_HOSTNAME_ARG} --pidfile=${PIDDKIMPROXY_IN}"
+DKIMPROXY_OUT_ARGS="${COMMON_ARGS} ${DKIMPROXY_OUT_CONF_ARG} ${DOMAIN_ARG} 
--pidfile=${PIDDKIMPROXY_OUT}"
+
+
 if [ -x /sbin/start-stop-daemon ] ; then
        STRT_STP_DMN=/sbin/start-stop-daemon
 else
@@ -58,27 +80,30 @@
 
 case "$1" in
        start)
-               log_daemon_msg "Starting inbound DomainKeys-filter" 
"dkimproxy.in"
-               ${STRT_STP_DMN} --background --make-pidfile --start -p 
${PIDDKIMPROXY_IN} -u ${DKIMPROXYUSER} -g ${DKIMPROXYGROUP} -x 
${DKIMPROXY_IN_BIN} -- ${DKIMPROXY_IN_ARGS}
-               RETVAL=$?
-               START_ERROR=${RETVAL}
-               log_end_msg ${RETVAL}
-               if ! [ "${RETVAL}" -eq 0 ] ; then
-                       exit ${RETVAL}
-               fi
-
-               log_daemon_msg "Starting outbound DomainKeys-filter" 
"dkimproxy.out"
-               ${STRT_STP_DMN} --background --make-pidfile --start -p 
${PIDDKIMPROXY_OUT} -u ${DKIMPROXYUSER} -g ${DKIMPROXYGROUP} -x 
${DKIMPROXY_OUT_BIN} -- ${DKIMPROXY_OUT_ARGS}
-               RETVAL=$?
-               log_end_msg ${RETVAL}
-               if ! [ "${RETVAL}" -eq 0 -a "${START_ERROR}" -eq 0 ] ; then
+               if [ -n "${RUN_DKIMPROXY_IN}" ] && [ "${RUN_DKIMPROXY_IN}" = 
"1" ] ; then
+                       log_daemon_msg "Starting inbound DomainKeys-filter" 
"dkimproxy.in"
+                       ${STRT_STP_DMN} --start -p ${PIDDKIMPROXY_IN} -u 
${DKIMPROXYUSER} -g ${DKIMPROXYGROUP} -x ${DKIMPROXY_IN_BIN} -- 
${DKIMPROXY_IN_ARGS}
+                       RETVAL=$?
+                       log_end_msg ${RETVAL}
                        if ! [ ${RETVAL} -eq 0 ] ; then
                                echo "Error ${RETVAL} when starting 
${DKIMPROXY_IN_BIN}"
                        fi
-                       if ! [ "${START_ERROR}" -eq 0 ] ; then
+               else
+                       echo "Inbound DomainKeys-filter disabled in 
${DEFAULT_FILE}"
+               fi
+
+               if [ -n "${RUN_DKIMPROXY_OUT}" ] && [ "${RUN_DKIMPROXY_OUT}" = 
"1" ] ; then
+                       log_daemon_msg "Starting outbound DomainKeys-filter" 
"dkimproxy.out"
+                       ${STRT_STP_DMN} --start -p ${PIDDKIMPROXY_OUT} -u 
${DKIMPROXYUSER} -g ${DKIMPROXYGROUP} -x ${DKIMPROXY_OUT_BIN} -- 
${DKIMPROXY_OUT_ARGS}
+                       RETVAL=$?
+                       log_end_msg ${RETVAL}
+                       if ! [ "${RETVAL}" -eq 0 ] ; then
                                echo "Error ${START_ERROR} when starting 
${DKIMPROXY_OUT_BIN}"
                        fi
+               else
+                       echo "Outbound DomainKeys-filter disabled in 
${DEFAULT_FILE}"
                fi
+
                ;;
 
        stop)
@@ -98,6 +123,7 @@
                                echo "Error ${RETVALOUT} when shutting down 
${PIDDKIMPROXY_OUT}"
                        fi
                fi
+               rm -f "${PIDDKIMPROXY_IN}" "${PIDDKIMPROXY_OUT}"
                ;;
        force-reload)
                $0 stop

Reply via email to