Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions srcpkgs/noctalia-greeter/files/INSTALL.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
To use noctalia-greeter, set the greeter command in /etc/greetd/config.toml:

[default_session]
command = "/usr/bin/noctalia-greeter-session"
user = "_greeter"

Then initialize the greeter state as root:

# GREETER_USER=_greeter noctalia-greeter-apply-appearance --setup-system
38 changes: 38 additions & 0 deletions srcpkgs/noctalia-greeter/patches/polkitd.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
Source: polkit-org/polkit commit 0c7e27b6a806cae728ff05b10b70b5e7a1b4c6a3
Upstream: no
Reason: Adapted from the upstream fix for polkit-org/polkit commit 0c7e27b6.
Void installs /etc/polkit-1/rules.d as 0700 polkitd:polkitd, so the root-only
directory chain check rejects the rules directory.

--- a/src/tools/passwordless_sync_policy.cpp
+++ b/src/tools/passwordless_sync_policy.cpp
@@ -46,6 +46,10 @@ namespace greeter::passwordless_sync {
constexpr std::size_t kMaximumUsers = 256;
constexpr std::size_t kMaximumUserNameLength = 256;
constexpr std::size_t kMaximumPathLength = 4096;
+ const uid_t kPolkitdUid = [] {
+ if (const struct passwd* pw = ::getpwnam("polkitd")) return pw->pw_uid;
+ return static_cast<uid_t>(-1);
+ }();

class UniqueFd {
public:
@@ -420,7 +424,8 @@ namespace greeter::passwordless_sync {
+ ec.message();
return false;
}
- if (!validateTrustedDirectoryChain(canonical, "Polkit rules", errorOut)) {
+ const std::filesystem::path parent = canonical.parent_path();
+ if (!validateTrustedDirectoryChain(parent, "Polkit rules parent", errorOut)) {
return false;
}

@@ -432,7 +437,7 @@ namespace greeter::passwordless_sync {
if (::fstat(directory.get(), &state) != 0) {
return setErrnoError("failed to inspect the Polkit rules directory", errorOut);
}
- if (!S_ISDIR(state.st_mode) || state.st_uid != 0 || (state.st_mode & (S_IWGRP | S_IWOTH)) != 0) {
+ if (!S_ISDIR(state.st_mode) || state.st_uid != kPolkitdUid || (state.st_mode & (S_IWGRP | S_IWOTH)) != 0) {
errorOut = "the Polkit rules directory has unsafe ownership or permissions";
return false;
}
30 changes: 30 additions & 0 deletions srcpkgs/noctalia-greeter/template
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Template file for 'noctalia-greeter'
pkgname=noctalia-greeter
version=1.7.0
revision=1
build_style=meson
hostmakedepends="pkg-config wayland-devel"
makedepends="wayland-devel wayland-protocols wlroots0.20-devel
libinput-devel libglvnd-devel freetype-devel fontconfig-devel
cairo-devel pango-devel harfbuzz-devel librsvg-devel libxml2-devel
libxkbcommon-devel glib-devel tomlplusplus-devel json-c++ stb
libwebp-devel libjxl-devel"
depends="greetd dbus bash"
checkdepends="mesa-dri dejavu-fonts-ttf"
short_desc="Minimal login greeter for greetd matching Noctalia Shell"
maintainer="BlackScorp <cccpmik@gmail.com>"
license="MIT"
homepage="https://github.com/noctalia-dev/noctalia-greeter"
distfiles="https://github.com/noctalia-dev/noctalia-greeter/archive/refs/tags/v${version}.tar.gz
https://raw.githubusercontent.com/google/wuffs/a14745aa458fd2b2785034efa04eab3c7b5b91e0/LICENSE-MIT>wuffs-LICENSE-MIT"
checksum="5b092784c0147bb6739efc2e8146d2d07e3572a59d7a370e93092f9f56d4fcc8
bb811a4b485eac3caeb8bdc58bbafb355fbcb6116010a7ea9179e5c70b0bc878"
skip_extraction="wuffs-LICENSE-MIT"
make_dirs="/var/lib/noctalia-greeter 0750 _greeter _greeter"

post_install() {
# The upstream tmpfiles entry hardcodes "greeter"; Void uses "_greeter".
rm -f "${DESTDIR}/usr/lib/tmpfiles.d/noctalia-greeter.conf"
vlicense LICENSE
vlicense "${XBPS_SRCDISTDIR}/${pkgname}-${version}/wuffs-LICENSE-MIT"
}