ports/150574: [PATCH] mail/dkimproxy: Simplify the rc scripts
Erik Steigler
erik at okcupid.com
Tue Sep 14 19:20:01 UTC 2010
>Number: 150574
>Category: ports
>Synopsis: [PATCH] mail/dkimproxy: Simplify the rc scripts
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Tue Sep 14 19:20:00 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator: Erik Steigler
>Release: FreeBSD 8.0-RELEASE amd64
>Organization:
OkCupid.com
>Environment:
System: FreeBSD mx1.okcupid.com 8.0-RELEASE FreeBSD 8.0-RELEASE #0: Sat Nov 21 15:02:08 UTC 2009 root at mason.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64
>Description:
When using dkimproxy.out I found that it was creating a temporary file and then directing std error to the file. Later the dkimproxy_out script would remove that file resulting in a file handle which is still growing in size but isn't visable anywhere.
>How-To-Repeat:
Start dkimproxy_out, examine the open files via lsof and notice the dangling file handle.
>Fix:
It appeared the rc.d scripts for dkimproxy were written before it had the ability to be easily run as a daemon and create its own pid file. I modified the scripts to provide the proper flags in the flags variable and pass the pidfile configuration option in there also. A patch is provided below
--- dkimproxy.patch begins here ---
diff -ruN dkimproxy.orig/files/dkimproxy_in.in dkimproxy/files/dkimproxy_in.in
--- dkimproxy.orig/files/dkimproxy_in.in 2010-09-14 13:18:44.000000000 -0400
+++ dkimproxy/files/dkimproxy_in.in 2010-09-14 14:13:10.000000000 -0400
@@ -21,9 +21,10 @@
# set defaults
: ${dkimproxy_in_enable="NO"}
-: ${dkimproxy_in_flags="--conf_file=/usr/local/etc/dkimproxy_in.conf"}
: ${dkimproxy_in_pidfile="/var/run/dkimproxy_in.pid"}
: ${dkimproxy_in_user="dkimproxy"}
+: ${dkimproxy_in_flags="--conf_file=/usr/local/etc/dkimproxy_in.conf \
+ --daemonize --pidfile=${dkimproxy_in_pidfile} --user=${dkimproxy_in_user}"}
start_cmd="dkimproxy_in_start"
stop_cmd="dkimproxy_in_stop"
@@ -40,32 +41,16 @@
fi
echo "Starting ${name}"
logger -t ${name} "Starting ${name}"
- touch ${dkimproxy_in_pidfile}
- chown ${dkimproxy_in_user} ${dkimproxy_in_pidfile}
- tmpfile=`mktemp /tmp/${name}.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX`
- su -m ${dkimproxy_in_user} -c "daemon -c -p ${dkimproxy_in_pidfile} \
- %%PREFIX%%/bin/dkimproxy.in ${dkimproxy_in_flags}" \
- > /dev/null 2> ${tmpfile}
- # wait until dkimproxy start.
- while true
- do
- filesize=`ls -l ${tmpfile}|awk '{print $5}'`
- if [ ${filesize} -gt 0 ]; then
- break
- fi
- done
-
- logger -t ${name} "`cat ${tmpfile}`"
- err=`grep Error ${tmpfile}`
- if [ "${err}" ]; then
+
+ %%PREFIX%%/bin/dkimproxy.in ${dkimproxy_in_flags}
+
+ if [ ! $? ]; then
echo "Failed to start ${name}."
- echo "${err}"
rm -f ${dkimproxy_in_pidfile}
else
# To prevent DoS attack by dkimproxy_in_user.
chown root:wheel ${dkimproxy_in_pidfile}
fi
- rm -f ${tmpfile}
}
dkimproxy_in_stop()
diff -ruN dkimproxy.orig/files/dkimproxy_out.in dkimproxy/files/dkimproxy_out.in
--- dkimproxy.orig/files/dkimproxy_out.in 2010-09-14 13:18:44.000000000 -0400
+++ dkimproxy/files/dkimproxy_out.in 2010-09-14 14:13:22.000000000 -0400
@@ -24,9 +24,10 @@
# set defaults
: ${dkimproxy_out_enable="NO"}
-: ${dkimproxy_out_flags="--conf_file=/usr/local/etc/dkimproxy_out.conf"}
: ${dkimproxy_out_pidfile="/var/run/dkimproxy_out.pid"}
: ${dkimproxy_out_user="dkimproxy"}
+: ${dkimproxy_out_flags="--conf_file=/usr/local/etc/dkimproxy_out.conf \
+ --daemonize --pidfile=${dkimproxy_out_pidfile} --user=${dkimproxy_out_user}"}
start_cmd="dkimproxy_out_start"
stop_cmd="dkimproxy_out_stop"
@@ -43,32 +44,16 @@
fi
echo "Starting ${name}"
logger -t ${name} "Starting ${name}"
- touch ${dkimproxy_out_pidfile}
- chown ${dkimproxy_out_user} ${dkimproxy_out_pidfile}
- tmpfile=`mktemp /tmp/${name}.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX`
- su -m ${dkimproxy_out_user} -c "daemon -c -p ${dkimproxy_out_pidfile} \
- %%PREFIX%%/bin/dkimproxy.out ${dkimproxy_out_flags}" \
- > /dev/null 2> ${tmpfile}
- # wait until dkimproxy start.
- while true
- do
- filesize=`ls -l ${tmpfile}|awk '{print $5}'`
- if [ ${filesize} -gt 0 ]; then
- break
- fi
- done
-
- logger -t ${name} "`cat ${tmpfile}`"
- err=`grep Error ${tmpfile}`
- if [ "${err}" ]; then
+
+ %%PREFIX%%/bin/dkimproxy.out ${dkimproxy_out_flags}
+
+ if [ ! $? ]; then
echo "Failed to start ${name}."
- echo "${err}"
rm -f ${dkimproxy_out_pidfile}
else
# To prevent DoS attack by dkimproxy_out_user.
chown root:wheel ${dkimproxy_out_pidfile}
fi
- rm -f ${tmpfile}
}
dkimproxy_out_stop()
--- dkimproxy.patch ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list