summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorJan Holesovsky <kendy@collabora.com>2020-06-12 12:19:50 +0200
committerJan Holesovsky <kendy@collabora.com>2020-06-12 12:53:07 +0200
commit9cfdba5f56c5da3a5e6b6f947a251647db367e4f (patch)
treedfeb46ace38df87a9b9d1c0affde49b84e7f7f63 /net
parent117bf1c351813d5aba65b3330c7eb9e5ed076c2c (diff)
Snap needs a specific unix socket name.
Change-Id: I7fd816eb6d23df0f27e40f345181833dbe85e022 Reviewed-on: https://gerrit.libreoffice.org/c/online/+/96197 Tested-by: Jenkins Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Jan Holesovsky <kendy@collabora.com>
Diffstat (limited to 'net')
-rw-r--r--net/Socket.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/net/Socket.cpp b/net/Socket.cpp
index ee76a5a1a..0d0b3ed0b 100644
--- a/net/Socket.cpp
+++ b/net/Socket.cpp
@@ -755,15 +755,22 @@ std::string LocalServerSocket::bind()
{
int rc;
struct sockaddr_un addrunix;
+
+ // snap needs a specific socket name
+ std::string socketAbstractUnixName(SOCKET_ABSTRACT_UNIX_NAME);
+ const char* snapInstanceName = std::getenv("SNAP_INSTANCE_NAME");
+ if (snapInstanceName && snapInstanceName[0])
+ socketAbstractUnixName = std::string("0snap.") + snapInstanceName + ".loolwsd-";
+
do
{
std::memset(&addrunix, 0, sizeof(addrunix));
addrunix.sun_family = AF_UNIX;
- std::memcpy(addrunix.sun_path, SOCKET_ABSTRACT_UNIX_NAME, sizeof(SOCKET_ABSTRACT_UNIX_NAME));
+ std::memcpy(addrunix.sun_path, socketAbstractUnixName.c_str(), socketAbstractUnixName.length());
addrunix.sun_path[0] = '\0'; // abstract name
std::string rand = Util::rng::getFilename(8);
- memcpy(addrunix.sun_path + sizeof(SOCKET_ABSTRACT_UNIX_NAME) - 1, rand.c_str(), 8);
+ memcpy(addrunix.sun_path + socketAbstractUnixName.length(), rand.c_str(), 8);
rc = ::bind(getFD(), (const sockaddr *)&addrunix, sizeof(struct sockaddr_un));
LOG_TRC("Bind to location " << std::string(&addrunix.sun_path[1]) <<