Hi all,

first thanks to everbody for the valuable input, it helped me a lot to improve
this init script. Please take a look at the third version of my patch and
comment on it.

Thanks and a nice day
Harald
--- /etc/init.d/amavisd-milter	2010-05-12 23:01:42.000000000 +0200
+++ /etc/init.d/amavisd-milter	2011-01-24 15:57:08.000000000 +0100
@@ -21,57 +21,103 @@
 # Description:       milter daemon for sendmail/postfix and amavisd-new
 ### END INIT INFO
 
+# Define LSB functions.
+. /lib/lsb/init-functions
+
 PATH=/sbin:/bin:/usr/sbin:/usr/bin
 DAEMON=/usr/sbin/amavisd-milter
 NAME=amavisd-milter
 DESC="amavisd-milter Daemon"
 USER=amavis
-PIDFILE=/var/run/amavis/$NAME.pid
+PIDFILE=/var/run/amavis/"$NAME".pid
 OPTIONS=""
 
 # Exit if the package is not installed
-[ -x $DAEMON ] || exit 0
+[ -x "$DAEMON" ] || exit 0
 
 # Read configuration variable file if it is present
-[ -r /etc/default/$NAME ] && . /etc/default/$NAME
+[ -r /etc/default/"$NAME" ] && . /etc/default/"$NAME"
 
-[ $PIDFILE != "/var/run/amavis/$NAME.pid" ] && OPTIONS="$OPTIONS -p $PIDFILE"
-[ $MILTERSOCKET ] && OPTIONS="$OPTIONS -s $MILTERSOCKET"
-[ $AMAVISSOCKET ] && OPTIONS="$OPTIONS -S $AMAVISSOCKET"
-[ $WORKINGDIR ] && OPTIONS="$OPTIONS -w $WORKINGDIR"
-[ $EXTRAPARAMS ] && OPTIONS="$OPTIONS $EXTRAPARAMS"
-
-[ $PIDFILE ] && ([ -d $(dirname $PIDFILE) ] || mkdir $(dirname $PIDFILE) && chown $USER:$(id $USER -g -n) $(dirname $PIDFILE))
-[ $MILTERSOCKET ] && ([ -d $(dirname $MILTERSOCKET) ] || mkdir $(dirname $MILTERSOCKET) && chown $USER $(dirname $MILTERSOCKET))
+if [ -n "$PIDFILE" ]; then
+  if [ "$PIDFILE" != "/var/run/amavis/$NAME.pid" ]; then
+    OPTIONS="$OPTIONS -p $PIDFILE"
+  fi
+  if [ ! -e "$(dirname "$PIDFILE")" ]; then
+    mkdir "$(dirname "$PIDFILE")"
+  fi
+  chown "$USER":"$(id "$USER" -g -n)" "$(dirname "$PIDFILE")"
+else
+  log_failure_msg "Error: PIDFILE variable must be defined for correct functionality"
+  exit 1  
+fi
+
+if [ -n "$MILTERSOCKET" ]; then
+  OPTIONS="$OPTIONS -s $MILTERSOCKET"
+  if [ "$(echo $MILTERSOCKET | grep ^inet)" ]; then
+    MILTERSOCKETTYPE=tcp
+  else
+    MILTERSOCKETTYPE=pipe
+    if [ ! -e "$(dirname "$MILTERSOCKET")" ]; then
+      mkdir "$(dirname "$MILTERSOCKET")"
+    fi
+    chown "$USER" "$(dirname "$MILTERSOCKET")"
+  fi
+fi
+   
+[ -n "$AMAVISSOCKET" ] && OPTIONS="$OPTIONS -S $AMAVISSOCKET"
+[ -n "$WORKINGDIR" ] && OPTIONS="$OPTIONS -w $WORKINGDIR"
+[ -n "$EXTRAPARAMS" ] && OPTIONS="$OPTIONS $EXTRAPARAMS"
 
 START="--start --quiet --chuid $USER --pidfile $PIDFILE --startas $DAEMON --name $NAME -- $OPTIONS"
 STOP="--stop --quiet --retry 10 --pidfile $PIDFILE --startas $DAEMON --name $NAME"
 
-# Define LSB functions.
-. /lib/lsb/init-functions
-
 case "$1" in
   start)
 	log_daemon_msg "Starting $DESC:" "$NAME"
-	start-stop-daemon $START 
+	start-stop-daemon $START
+
 	case "$?" in
-		0) log_end_msg 0
-		   [ $MILTERSOCKET ] && [ $MILTERSOCKETOWNER ] && chown $MILTERSOCKETOWNER $MILTERSOCKET
-		   [ $MILTERSOCKET ] && [ $MILTERSOCKETMODE ] && chmod $MILTERSOCKETMODE $MILTERSOCKET ;;
-		1) log_progress_msg "already started"
-		   log_end_msg 0 ;;
-		*) log_end_msg $? ;;
+		0)
+		   log_end_msg 0
+		   if [ "$MILTERSOCKETTYPE" = "pipe" ]; then
+		     if [ "$MILTERSOCKETOWNER" ]; then
+		       chown "$MILTERSOCKETOWNER" "$MILTERSOCKET"
+		     fi
+		     if [ "$MILTERSOCKETMODE" ]; then
+		       chmod "$MILTERSOCKETMODE" "$MILTERSOCKET"
+		     fi
+		   fi
+		   ;;
+
+		1)
+		   log_progress_msg "already started"
+		   log_end_msg 0
+		   ;;
+
+		*)
+		   log_end_msg $?
+		   ;;
+
 	esac
 	;;
 
   stop)
 	log_daemon_msg "Stopping $DESC:" "$NAME"
 	start-stop-daemon $STOP
+
 	case "$?" in
-		0) log_end_msg 0 ;;
-		1) log_progress_msg "already stopped"
-		   log_end_msg 0 ;;
-		*) log_end_msg $? ;;
+		0)
+		   log_end_msg 0
+		   ;;
+
+		1)
+		   log_progress_msg "already stopped"
+		   log_end_msg 0
+		   ;;
+
+		*) log_end_msg $?
+		   ;;
+
 	esac
 	;;
 

Reply via email to