diff options
author | Benjamin Franzke <benjaminfranzke@googlemail.com> | 2012-01-24 16:37:15 +0100 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2012-01-24 11:26:41 -0500 |
commit | fc6ccb868fa735ee9c6592806f381aa1262bf0b2 (patch) | |
tree | 18efad5653209b6e8c242b2b33dcad8caa5300d1 /src/evdev.c | |
parent | ef548fd3cad98ea98220f59eb7ce8b41afb2305a (diff) |
weston: Drop priviledges early, and seteuid when needed
Diffstat (limited to 'src/evdev.c')
-rw-r--r-- | src/evdev.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/evdev.c b/src/evdev.c index f489ede..101b63f 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -20,6 +20,8 @@ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#define _GNU_SOURCE + #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -439,6 +441,7 @@ evdev_input_device_create(struct evdev_input *master, struct evdev_input_device *device; struct wl_event_loop *loop; struct weston_compositor *ec; + uid_t saved_uid, uid, euid; device = malloc(sizeof *device); if (device == NULL) @@ -456,7 +459,10 @@ evdev_input_device_create(struct evdev_input *master, device->rel.dx = 0; device->rel.dy = 0; + getresuid(&uid, &euid, &saved_uid); + seteuid(saved_uid); device->fd = open(path, O_RDONLY); + seteuid(euid); if (device->fd < 0) goto err0; |