Explorar o código

- openbsd 64 tcp fix

Andrei Pelinescu-Onciul %!s(int64=20) %!d(string=hai) anos
pai
achega
1d5ef18969
Modificáronse 2 ficheiros con 5 adicións e 2 borrados
  1. 1 1
      Makefile.defs
  2. 4 1
      pass_fd.c

+ 1 - 1
Makefile.defs

@@ -59,7 +59,7 @@ MAIN_NAME=ser
 VERSION = 0
 VERSION = 0
 PATCHLEVEL = 10
 PATCHLEVEL = 10
 SUBLEVEL =   99
 SUBLEVEL =   99
-EXTRAVERSION = -dev14-tcp
+EXTRAVERSION = -dev15-tcp
 
 
 RELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
 RELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
 OS = $(shell uname -s | sed -e s/SunOS/solaris/ | tr "[A-Z]" "[a-z]")
 OS = $(shell uname -s | sed -e s/SunOS/solaris/ | tr "[A-Z]" "[a-z]")

+ 4 - 1
pass_fd.c

@@ -124,13 +124,16 @@ int send_fd(int unix_socket, void* data, int data_len, int fd)
 	int ret;
 	int ret;
 #ifdef HAVE_MSGHDR_MSG_CONTROL
 #ifdef HAVE_MSGHDR_MSG_CONTROL
 	struct cmsghdr* cmsg;
 	struct cmsghdr* cmsg;
+	/* make sure msg_control will point to properly aligned data */
 	union {
 	union {
 		struct cmsghdr cm;
 		struct cmsghdr cm;
 		char control[CMSG_SPACE(sizeof(fd))];
 		char control[CMSG_SPACE(sizeof(fd))];
 	}control_un;
 	}control_un;
 	
 	
 	msg.msg_control=control_un.control;
 	msg.msg_control=control_un.control;
-	msg.msg_controllen=sizeof(control_un.control);
+	/* openbsd doesn't like "more space", msg_controllen must not
+	 * include the end padding */
+	msg.msg_controllen=CMSG_LEN(sizeof(fd));
 	
 	
 	cmsg=CMSG_FIRSTHDR(&msg);
 	cmsg=CMSG_FIRSTHDR(&msg);
 	cmsg->cmsg_level = SOL_SOCKET;
 	cmsg->cmsg_level = SOL_SOCKET;