mirror of
https://github.com/swaywm/sway.git
synced 2024-11-30 03:41:27 +00:00
Merge pull request #2146 from tobiasblass/prepare_server_before_dropping_privileges
Perform (partial) server initialization before dropping privileges.
This commit is contained in:
commit
e8fbda4d21
|
@ -47,6 +47,8 @@ struct sway_server {
|
||||||
|
|
||||||
struct sway_server server;
|
struct sway_server server;
|
||||||
|
|
||||||
|
/* Prepares an unprivileged server_init by performing all privileged operations in advance */
|
||||||
|
bool server_privileged_prepare(struct sway_server *server);
|
||||||
bool server_init(struct sway_server *server);
|
bool server_init(struct sway_server *server);
|
||||||
void server_fini(struct sway_server *server);
|
void server_fini(struct sway_server *server);
|
||||||
void server_run(struct sway_server *server);
|
void server_run(struct sway_server *server);
|
||||||
|
|
|
@ -359,6 +359,11 @@ int main(int argc, char **argv) {
|
||||||
|
|
||||||
executable_sanity_check();
|
executable_sanity_check();
|
||||||
bool suid = false;
|
bool suid = false;
|
||||||
|
|
||||||
|
if (!server_privileged_prepare(&server)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
if (getuid() != geteuid() || getgid() != getegid()) {
|
if (getuid() != geteuid() || getgid() != getegid()) {
|
||||||
// Retain capabilities after setuid()
|
// Retain capabilities after setuid()
|
||||||
|
|
|
@ -26,9 +26,8 @@
|
||||||
#include "sway/tree/layout.h"
|
#include "sway/tree/layout.h"
|
||||||
|
|
||||||
|
|
||||||
bool server_init(struct sway_server *server) {
|
bool server_privileged_prepare(struct sway_server *server) {
|
||||||
wlr_log(L_DEBUG, "Initializing Wayland server");
|
wlr_log(L_DEBUG, "Preparing Wayland server initialization");
|
||||||
|
|
||||||
server->wl_display = wl_display_create();
|
server->wl_display = wl_display_create();
|
||||||
server->wl_event_loop = wl_display_get_event_loop(server->wl_display);
|
server->wl_event_loop = wl_display_get_event_loop(server->wl_display);
|
||||||
server->backend = wlr_backend_autocreate(server->wl_display, NULL);
|
server->backend = wlr_backend_autocreate(server->wl_display, NULL);
|
||||||
|
@ -37,6 +36,12 @@ bool server_init(struct sway_server *server) {
|
||||||
wlr_log(L_ERROR, "Unable to create backend");
|
wlr_log(L_ERROR, "Unable to create backend");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool server_init(struct sway_server *server) {
|
||||||
|
wlr_log(L_DEBUG, "Initializing Wayland server");
|
||||||
|
|
||||||
struct wlr_renderer *renderer = wlr_backend_get_renderer(server->backend);
|
struct wlr_renderer *renderer = wlr_backend_get_renderer(server->backend);
|
||||||
assert(renderer);
|
assert(renderer);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue