--- examples/init-script.in.orig	2017-09-07 17:52:24 UTC
+++ examples/init-script.in
@@ -7,6 +7,14 @@
 # BEFORE: mail
 # KEYWORD: shutdown
 
+. /etc/rc.subr
+
+# read settings, set default values
+load_rc_config "$name"
+
+: ${mimedefang_mx_max_rss=100000}
+: ${mimedefang_mx_max_as=300000}
+
 RETVAL=0
 prog='mimedefang'
 SPOOLDIR='@SPOOLDIR@'
@@ -41,6 +49,12 @@ export LC_ALL
 # The socket used by mimedefang to communicate with sendmail
 # SOCKET=$SPOOLDIR/mimedefang.sock
 
+# Timeout while waiting for socket to appear
+# SOCKET_TIMEOUT=60
+
+# The value of socket file access mode
+# SOCKET_MODE=600
+
 # Run the multiplexor and filters as this user, not root.  RECOMMENDED
 MX_USER=@DEFANGUSER@
 
@@ -138,11 +152,11 @@ MX_MAXIMUM=10
 
 # Limit worker processes' resident-set size to this many kilobytes.  Default
 # is unlimited.
-# MX_MAX_RSS=10000
+MX_MAX_RSS=${mimedefang_mx_max_rss}
 
 # Limit total size of worker processes' memory space to this many kilobytes.
 # Default is unlimited.
-# MX_MAX_AS=30000
+MX_MAX_AS=${mimedefang_mx_max_as}
 
 # If you want to use the "notification" facility, set the appropriate port.
 # See the mimedefang-notify man page for details.
@@ -189,7 +203,7 @@ then
     . /etc/rc.subr
 
     name=$prog
-    rcvar=`set_rcvar`
+    rcvar=${prog}_enable
     # default to not enabled, enable in rc.conf
     eval $rcvar=\${$rcvar:-NO}
 
@@ -199,6 +213,7 @@ then
     procname=$PROGDIR/$prog-multiplexor
     start_cmd="start_it"
     stop_cmd="stop_it"
+    restart_cmd="restart_it"
     sig_reload="INT"
     reread_cmd="reread_it"
     # provide both "reload", the FreeBSD default, with a direct signal to
@@ -209,6 +224,8 @@ fi
 # Make sure required vars are set
 SOCKET=${SOCKET:=$SPOOLDIR/$prog.sock}
 MX_SOCKET=${MX_SOCKET:=$SPOOLDIR/$prog-multiplexor.sock}
+SOCKET_TIMEOUT=${SOCKET_TIMEOUT:=60}
+SOCKET_MODE=${SOCKET_MODE:=600}
 
 start_it() {
     if test -r $PID ; then
@@ -294,6 +311,29 @@ start_it() {
 	kill `cat $MXPID`
 	return 1
     fi
+
+    SOCKET_PREFIX=${SOCKET%:*}
+    # We can have inet or inet6, try to remove 6
+    SOCKET_PREFIX=${SOCKET_PREFIX%6}
+
+    if [ "x$SOCKET" != "x" -a "${SOCKET_PREFIX}" != "inet" ] ; then
+        printf "Waiting for $prog socket."
+        i=${SOCKET_TIMEOUT}
+        while [ $i -ne 0 ]
+        do
+            [ -S "$SOCKET" ] && break
+            printf "."
+            sleep 1
+            i=$(($i-1))
+        done
+        echo ""
+        if [ $i -eq 0 ] ; then
+            echo "There is no $prog socket (${SOCKET})!"
+            return 1
+        fi
+        %%CHMOD%% ${SOCKET_MODE} ${SOCKET} > /dev/null 2>&1
+    fi
+
     return 0
 }
 
@@ -329,7 +369,7 @@ stop_it() {
     rm -f $MX_SOCKET > /dev/null 2>&1
     rm -f $SOCKET > /dev/null 2>&1
 
-    if [ "$1" = "wait" ] ; then
+    if [ 1 ] ; then
 	printf "Waiting for daemons to exit."
 	WAITPID=""
 	test -f $PID && WAITPID=`cat $PID`
@@ -379,6 +419,12 @@ reread_it() {
 		echo "Could not find process-ID of $prog-multiplexor"
 	    fi
 	fi
+}
+
+restart_it() {
+    stop_it wait
+    start_it
+    RETVAL=$?
 }
 
 if type run_rc_command > /dev/null 2>&1
