Răsfoiți Sursa

ipcs: Set SO_PASSCRED also on listening socket

This patch is needed for kernel patch
http://patchwork.ozlabs.org/patch/284366/

Signed-off-by: Jan Friesse <jfriesse@redhat.com>
Reviewed-by: Christine Caulfield <ccaulfie@redhat.com>
Jan Friesse 12 ani în urmă
părinte
comite
f11e5bf619
1 a modificat fișierele cu 10 adăugiri și 0 ștergeri
  1. 10 0
      exec/coroipcs.c

+ 10 - 0
exec/coroipcs.c

@@ -1046,6 +1046,9 @@ static void _corosync_ipc_init(void)
 	int server_fd;
 	struct sockaddr_un un_addr;
 	int res;
+#if SO_PASSCRED
+	int on = 1;
+#endif
 
 	/*
 	 * Create socket for IPC clients, name socket, listen for connections
@@ -1101,6 +1104,13 @@ static void _corosync_ipc_init(void)
 	 */
 #if !defined(COROSYNC_LINUX)
 	res = chmod (un_addr.sun_path, S_IRWXU|S_IRWXG|S_IRWXO);
+#endif
+#if SO_PASSCRED
+	res = setsockopt(server_fd, SOL_SOCKET, SO_PASSCRED, &on, sizeof (on));
+	if (res == -1) {
+		LOGSYS_PERROR (errno, LOGSYS_LEVEL_CRIT, "Could not set SO_PASSCRED to AF_UNIX_SOCKET");
+		api->fatal_error ("Could not set SO_PASSCRED to AF_UNIX_SOCKET\n");
+	}
 #endif
 	listen (server_fd, SERVER_BACKLOG);