summaryrefslogtreecommitdiff
path: root/src/evdev.c
diff options
context:
space:
mode:
authorBenjamin Franzke <benjaminfranzke@googlemail.com>2012-01-24 16:37:15 +0100
committerKristian Høgsberg <krh@bitplanet.net>2012-01-24 11:26:41 -0500
commitfc6ccb868fa735ee9c6592806f381aa1262bf0b2 (patch)
tree18efad5653209b6e8c242b2b33dcad8caa5300d1 /src/evdev.c
parentef548fd3cad98ea98220f59eb7ce8b41afb2305a (diff)
weston: Drop priviledges early, and seteuid when needed
Diffstat (limited to 'src/evdev.c')
-rw-r--r--src/evdev.c6
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;