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