From 0cda785bc8d2a05cdbe9cab735de1fe69acbb2e6 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sun, 6 Jul 2025 18:00:33 +0200 Subject: kms: use /tmp directory for temporary unix domain socket to fix too long path with AppImage portable home --- kms/client/kms_client.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'kms/client/kms_client.c') diff --git a/kms/client/kms_client.c b/kms/client/kms_client.c index 57afd04..593c152 100644 --- a/kms/client/kms_client.c +++ b/kms/client/kms_client.c @@ -119,8 +119,11 @@ static int recv_msg_from_server(int server_pid, int server_fd, gsr_kms_response /* We have to use $HOME because in flatpak there is no simple path that is accessible, read and write, that multiple flatpak instances can access */ static bool create_socket_path(char *output_path, size_t output_path_size) { + const bool inside_flatpak = getenv("FLATPAK_ID") != NULL; const char *home = getenv("HOME"); - if(!home) + // Portable home with AppImage can cause the socket path to be longer than 108 characters (unix domain socket path max length). + // Using gsr-kms-socket in $HOME is only needed in flatpak, so use /tmp everywhere else instead. + if(!home || !inside_flatpak) home = "/tmp"; char random_characters[11]; @@ -318,6 +321,8 @@ int gsr_kms_client_init(gsr_kms_client *self, const char *card_path) { self->kms_server_pid = pid; } + // We need this dumb-shit retardation with unix domain socket and then replace it with socketpair because + // pkexec doesn't work with socketpair................ fprintf(stderr, "gsr info: gsr_kms_client_init: waiting for server to connect\n"); struct pollfd poll_fd = { .fd = self->initial_socket_fd, -- cgit v1.2.3-70-g09d2