tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Kernel or userland bug: file descript passing in Postfix



[Re-sent with correct recipient addresses.]

        Hello,

it seems that support for "milters" is currently broken in Postfix under at
least NetBSD/amd64 5.0_RC2. "postfix/cleanup" dies with this error message
like this one:

        warning: cannot receive milters via service cleanup socket socket

After a lot of debugging and by comparing with a demo program kindly
provided by Michael van Elst I came up with the attached patch for
Postfix which seems to fix the problem.

Is this really a bug in Postfix (in which I case I will commit the patch)
or is it a kernel bug?

        Kind regards

-- 
Matthias Scheler                                  http://zhadum.org.uk/
Index: gnu/dist/postfix/src/util/unix_recv_fd.c
===================================================================
RCS file: /cvsroot/src/gnu/dist/postfix/src/util/unix_recv_fd.c,v
retrieving revision 1.1.1.3
diff -u -r1.1.1.3 unix_recv_fd.c
--- gnu/dist/postfix/src/util/unix_recv_fd.c    30 Aug 2008 10:33:33 -0000      
1.1.1.3
+++ gnu/dist/postfix/src/util/unix_recv_fd.c    7 Mar 2009 23:36:44 -0000
@@ -74,7 +74,7 @@
 
     memset((char *) &msg, 0, sizeof(msg));     /* Fix 200512 */
     msg.msg_control = control_un.control;
-    msg.msg_controllen = CMSG_LEN(sizeof(newfd));      /* Fix 200506 */
+    msg.msg_controllen = sizeof(control_un.control);   /* Fix 200506 */
 #else
     msg.msg_accrights = (char *) &newfd;
     msg.msg_accrightslen = sizeof(newfd);
Index: gnu/dist/postfix/src/util/unix_send_fd.c
===================================================================
RCS file: /cvsroot/src/gnu/dist/postfix/src/util/unix_send_fd.c,v
retrieving revision 1.1.1.3
diff -u -r1.1.1.3 unix_send_fd.c
--- gnu/dist/postfix/src/util/unix_send_fd.c    30 Aug 2008 10:33:34 -0000      
1.1.1.3
+++ gnu/dist/postfix/src/util/unix_send_fd.c    7 Mar 2009 23:36:44 -0000
@@ -76,7 +76,7 @@
 
     memset((char *) &msg, 0, sizeof(msg));             /* Fix 200512 */
     msg.msg_control = control_un.control;
-    msg.msg_controllen = CMSG_LEN(sizeof(sendfd));     /* Fix 200506 */
+    msg.msg_controllen = sizeof(control_un.control);   /* Fix 200506 */
 
     cmptr = CMSG_FIRSTHDR(&msg);
     cmptr->cmsg_len = CMSG_LEN(sizeof(sendfd));


Home | Main Index | Thread Index | Old Index