Blame SOURCES/bz1021597-set-SO_PASSCRED-sock-option.patch

b3b4e1
From 81ca7d30de95d404b13bc5d61cb3a1a99d3d73ea Mon Sep 17 00:00:00 2001
b3b4e1
From: Jan Friesse <jfriesse@redhat.com>
b3b4e1
Date: Mon, 21 Oct 2013 17:14:02 +0200
b3b4e1
Subject: [PATCH] ipc_setup: Set SO_PASSCRED on listener socket
b3b4e1
b3b4e1
This is needed, because newer kernels doesn't correctly support setting
b3b4e1
SO_PASSCRED on sockets returned by accept call, but socket option must
b3b4e1
be set on server socket (before accept call).
b3b4e1
b3b4e1
For more details, see:
b3b4e1
http://patchwork.ozlabs.org/patch/284366/
b3b4e1
b3b4e1
Signed-off-by: Jan Friesse <jfriesse@redhat.com>
b3b4e1
---
b3b4e1
 lib/ipc_setup.c |    6 ++++++
b3b4e1
 1 files changed, 6 insertions(+), 0 deletions(-)
b3b4e1
b3b4e1
diff --git a/lib/ipc_setup.c b/lib/ipc_setup.c
b3b4e1
index 97c858c..b6beb6a 100644
b3b4e1
--- a/lib/ipc_setup.c
b3b4e1
+++ b/lib/ipc_setup.c
b3b4e1
@@ -349,6 +349,9 @@ qb_ipcs_us_publish(struct qb_ipcs_service * s)
b3b4e1
 {
b3b4e1
 	struct sockaddr_un un_addr;
b3b4e1
 	int32_t res;
b3b4e1
+#ifdef SO_PASSCRED
b3b4e1
+	int on = 1;
b3b4e1
+#endif
b3b4e1
 
b3b4e1
 	/*
b3b4e1
 	 * Create socket for IPC clients, name socket, listen for connections
b3b4e1
@@ -407,6 +410,9 @@ qb_ipcs_us_publish(struct qb_ipcs_service * s)
b3b4e1
 #if !defined(QB_LINUX) && !defined(QB_CYGWIN)
b3b4e1
 	res = chmod(un_addr.sun_path, S_IRWXU | S_IRWXG | S_IRWXO);
b3b4e1
 #endif
b3b4e1
+#ifdef SO_PASSCRED
b3b4e1
+	setsockopt(s->server_sock, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on));
b3b4e1
+#endif
b3b4e1
 	if (listen(s->server_sock, SERVER_BACKLOG) == -1) {
b3b4e1
 		qb_util_perror(LOG_ERR, "socket listen failed");
b3b4e1
 	}
b3b4e1
-- 
b3b4e1
1.7.1
b3b4e1