diff options
-rw-r--r-- | include/sway/server.h | 2 | ||||
-rw-r--r-- | sway/main.c | 5 | ||||
-rw-r--r-- | sway/server.c | 11 |
3 files changed, 15 insertions, 3 deletions
diff --git a/include/sway/server.h b/include/sway/server.h index 65d96e7a..963d4dc1 100644 --- a/include/sway/server.h +++ b/include/sway/server.h | |||
@@ -47,6 +47,8 @@ struct sway_server { | |||
47 | 47 | ||
48 | struct sway_server server; | 48 | struct sway_server server; |
49 | 49 | ||
50 | /* Prepares an unprivileged server_init by performing all privileged operations in advance */ | ||
51 | bool server_privileged_prepare(struct sway_server *server); | ||
50 | bool server_init(struct sway_server *server); | 52 | bool server_init(struct sway_server *server); |
51 | void server_fini(struct sway_server *server); | 53 | void server_fini(struct sway_server *server); |
52 | void server_run(struct sway_server *server); | 54 | void server_run(struct sway_server *server); |
diff --git a/sway/main.c b/sway/main.c index a7e808ad..a325dc3a 100644 --- a/sway/main.c +++ b/sway/main.c | |||
@@ -359,6 +359,11 @@ int main(int argc, char **argv) { | |||
359 | 359 | ||
360 | executable_sanity_check(); | 360 | executable_sanity_check(); |
361 | bool suid = false; | 361 | bool suid = false; |
362 | |||
363 | if (!server_privileged_prepare(&server)) { | ||
364 | return 1; | ||
365 | } | ||
366 | |||
362 | #ifdef __linux__ | 367 | #ifdef __linux__ |
363 | if (getuid() != geteuid() || getgid() != getegid()) { | 368 | if (getuid() != geteuid() || getgid() != getegid()) { |
364 | // Retain capabilities after setuid() | 369 | // Retain capabilities after setuid() |
diff --git a/sway/server.c b/sway/server.c index 824b1d8e..4745ab6e 100644 --- a/sway/server.c +++ b/sway/server.c | |||
@@ -25,9 +25,8 @@ | |||
25 | #include "sway/tree/layout.h" | 25 | #include "sway/tree/layout.h" |
26 | 26 | ||
27 | 27 | ||
28 | bool server_init(struct sway_server *server) { | 28 | bool server_privileged_prepare(struct sway_server *server) { |
29 | wlr_log(L_DEBUG, "Initializing Wayland server"); | 29 | wlr_log(L_DEBUG, "Preparing Wayland server initialization"); |
30 | |||
31 | server->wl_display = wl_display_create(); | 30 | server->wl_display = wl_display_create(); |
32 | server->wl_event_loop = wl_display_get_event_loop(server->wl_display); | 31 | server->wl_event_loop = wl_display_get_event_loop(server->wl_display); |
33 | server->backend = wlr_backend_autocreate(server->wl_display, NULL); | 32 | server->backend = wlr_backend_autocreate(server->wl_display, NULL); |
@@ -36,6 +35,12 @@ bool server_init(struct sway_server *server) { | |||
36 | wlr_log(L_ERROR, "Unable to create backend"); | 35 | wlr_log(L_ERROR, "Unable to create backend"); |
37 | return false; | 36 | return false; |
38 | } | 37 | } |
38 | return true; | ||
39 | } | ||
40 | |||
41 | bool server_init(struct sway_server *server) { | ||
42 | wlr_log(L_DEBUG, "Initializing Wayland server"); | ||
43 | |||
39 | struct wlr_renderer *renderer = wlr_backend_get_renderer(server->backend); | 44 | struct wlr_renderer *renderer = wlr_backend_get_renderer(server->backend); |
40 | assert(renderer); | 45 | assert(renderer); |
41 | 46 | ||