diff -Naur amavisd-milter-1.3.1.orig/amavisd-milter/main.c amavisd-milter-1.3.1/amavisd-milter/main.c
--- amavisd-milter-1.3.1.orig/amavisd-milter/main.c	2008-04-21 10:30:52.000000000 +0200
+++ amavisd-milter-1.3.1/amavisd-milter/main.c	2008-05-06 09:26:16.000000000 +0200
@@ -115,7 +115,7 @@
 int
 main(int argc, char *argv[])
 {
-    static	const char *args = "d:fhm:M:p:s:S:t:T:vw:";
+    static	const char *args = "D:d:fhm:M:p:s:S:t:T:vw:";
 
     int		c, rstat;
     char       *p;
@@ -159,7 +159,7 @@
 		usageerr(progname, "option requires an argument -- %c",
 		    (char)c);
 	    }
-	    if (! strcmp(optarg, "client") || ! strcmp(optarg, "server")) {
+	    if (strcmp(optarg, "client") != 0 && strcmp(optarg, "server") != 0) {
 		usageerr(progname, "unknown delivery mechanism '%s'", optarg);
 	    }
 	    delivery_care_of = optarg;
@@ -298,10 +298,13 @@
 	logmsg(LOG_ERR, "%s is not directory", work_dir);
 	exit(EX_SOFTWARE);
     }
+    /* This is a problem for the UTM architecture */
+    /*
     if ((st.st_mode & S_IRWXO) != 0) {
 	logmsg(LOG_ERR, "work directory %s is world accessible", work_dir);
 	exit(EX_SOFTWARE);
     }
+    */
 
     /* Configure milter */
     socket_name = NULL;
@@ -390,6 +393,10 @@
 	}
 	umask(save_umask);
     }
+    if(chmod(socket_name, 0666) < 0) {
+    	logmsg(LOG_WARNING, "could not change socket permission: %s",
+	  strerror(errno));
+    }
 
     /* Run milter */
     if ((rstat = smfi_main()) != MI_SUCCESS) {

