From 146c1ac1d7c7f98279f6fae19466ded73c2186e7 Mon Sep 17 00:00:00 2001
From: Patrick Ziegler
Date: Thu, 7 Apr 2022 15:33:56 +0200
Subject: [PATCH] fix(ipc): Fallback folder not being user-specific (#2684)
If two users start a bar with IPC and don't have XDG_RUNTIME_DIR set,
polybar will create the fallback directory `/tmp/polybar`.
However, that directory is only accessible by the user that created it
and so polybar running under the second user will fail to open its
socket there.
We add the UID to the fallback directory to prevent this.
Fixes #2683
---
CHANGELOG.md | 1 +
include/ipc/ipc.hpp | 4 +---
src/components/controller.cpp | 2 --
src/ipc/util.cpp | 9 ++++++++-
4 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 56cf2b64..b25bcdb0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
- `custom/script`: Output clearing when `exec-if` fails ([`#2674`](https://github.com/polybar/polybar/issues/2674))
- `internal/battery`: `poll-interval` not working ([`#2649`](https://github.com/polybar/polybar/issues/2649), [`#2677`](https://github.com/polybar/polybar/pull/2677))
+- ipc: Polybar failing to open IPC channel after another user already ran polybar, if `XDG_RUNTIME_DIR` is not set ([`#2683`](https://github.com/polybar/polybar/issues/2683), [`#2684`](https://github.com/polybar/polybar/pull/2684))
## [3.6.2] - 2022-04-03
### Fixed
diff --git a/include/ipc/ipc.hpp b/include/ipc/ipc.hpp
index 0ba8af1b..7e2e0068 100644
--- a/include/ipc/ipc.hpp
+++ b/include/ipc/ipc.hpp
@@ -1,7 +1,5 @@
#pragma once
-#include
-
#include
#include "common.hpp"
@@ -94,6 +92,6 @@ namespace ipc {
void receive_data(string buf);
void receive_eof();
};
-} // namespace ipc
+} // namespace ipc
POLYBAR_NS_END
diff --git a/src/components/controller.cpp b/src/components/controller.cpp
index ec856766..77681e1c 100644
--- a/src/components/controller.cpp
+++ b/src/components/controller.cpp
@@ -1,7 +1,5 @@
#include "components/controller.hpp"
-#include
-
#include
#include
diff --git a/src/ipc/util.cpp b/src/ipc/util.cpp
index b93cd36e..0a1d2315 100644
--- a/src/ipc/util.cpp
+++ b/src/ipc/util.cpp
@@ -1,6 +1,7 @@
#include "ipc/util.hpp"
#include
+#include
#include "errors.hpp"
#include "utils/env.hpp"
@@ -12,8 +13,14 @@ POLYBAR_NS
namespace ipc {
static constexpr auto SUFFIX = ".sock";
+ static constexpr auto XDG_RUNTIME_DIR = "XDG_RUNTIME_DIR";
string get_runtime_path() {
+ if (env_util::has(XDG_RUNTIME_DIR)) {
+ return env_util::get("XDG_RUNTIME_DIR") + "/polybar";
+ } else {
+ return "/tmp/polybar-" + to_string(getuid());
+ }
return env_util::get("XDG_RUNTIME_DIR", "/tmp") + "/polybar";
}
@@ -59,6 +66,6 @@ namespace ipc {
return -1;
}
}
-} // namespace ipc
+} // namespace ipc
POLYBAR_NS_END