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