|
|
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 |
|