diff options
author | Drew DeVault <sir@cmpwn.com> | 2018-06-22 06:41:34 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-22 06:41:34 -0700 |
commit | e8fbda4d21305d0e85ff57aa93fca2520437ddc0 (patch) | |
tree | fa6c907e611ed5bc2eafd5a399528dcffa3e60f7 | |
parent | Merge pull request #2152 from atomnuker/master (diff) | |
parent | Perform (partial) server initialization before dropping privileges. (diff) | |
download | sway-e8fbda4d21305d0e85ff57aa93fca2520437ddc0.tar.gz sway-e8fbda4d21305d0e85ff57aa93fca2520437ddc0.tar.zst sway-e8fbda4d21305d0e85ff57aa93fca2520437ddc0.zip |
Merge pull request #2146 from tobiasblass/prepare_server_before_dropping_privileges
Perform (partial) server initialization before dropping privileges.
-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 8af0bc5b..a467283b 100644 --- a/sway/server.c +++ b/sway/server.c | |||
@@ -26,9 +26,8 @@ | |||
26 | #include "sway/tree/layout.h" | 26 | #include "sway/tree/layout.h" |
27 | 27 | ||
28 | 28 | ||
29 | bool server_init(struct sway_server *server) { | 29 | bool server_privileged_prepare(struct sway_server *server) { |
30 | wlr_log(L_DEBUG, "Initializing Wayland server"); | 30 | wlr_log(L_DEBUG, "Preparing Wayland server initialization"); |
31 | |||
32 | server->wl_display = wl_display_create(); | 31 | server->wl_display = wl_display_create(); |
33 | server->wl_event_loop = wl_display_get_event_loop(server->wl_display); | 32 | server->wl_event_loop = wl_display_get_event_loop(server->wl_display); |
34 | server->backend = wlr_backend_autocreate(server->wl_display, NULL); | 33 | server->backend = wlr_backend_autocreate(server->wl_display, NULL); |
@@ -37,6 +36,12 @@ bool server_init(struct sway_server *server) { | |||
37 | wlr_log(L_ERROR, "Unable to create backend"); | 36 | wlr_log(L_ERROR, "Unable to create backend"); |
38 | return false; | 37 | return false; |
39 | } | 38 | } |
39 | return true; | ||
40 | } | ||
41 | |||
42 | bool server_init(struct sway_server *server) { | ||
43 | wlr_log(L_DEBUG, "Initializing Wayland server"); | ||
44 | |||
40 | struct wlr_renderer *renderer = wlr_backend_get_renderer(server->backend); | 45 | struct wlr_renderer *renderer = wlr_backend_get_renderer(server->backend); |
41 | assert(renderer); | 46 | assert(renderer); |
42 | 47 | ||