summaryrefslogtreecommitdiffstats
path: root/dbus/dbus-sysdeps.c
diff options
context:
space:
mode:
Diffstat (limited to 'dbus/dbus-sysdeps.c')
-rw-r--r--dbus/dbus-sysdeps.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/dbus/dbus-sysdeps.c b/dbus/dbus-sysdeps.c
index 71863ef6..8aa91811 100644
--- a/dbus/dbus-sysdeps.c
+++ b/dbus/dbus-sysdeps.c
@@ -3185,18 +3185,21 @@ _dbus_change_identity (unsigned long uid,
unsigned long gid,
DBusError *error)
{
- if (setuid (uid) < 0)
+ /* Set GID first, or the setuid may remove our permission
+ * to change the GID
+ */
+ if (setgid (gid) < 0)
{
dbus_set_error (error, _dbus_error_from_errno (errno),
- "Failed to set UID to %lu: %s", uid,
+ "Failed to set GID to %lu: %s", gid,
_dbus_strerror (errno));
return FALSE;
}
-
- if (setgid (gid) < 0)
+
+ if (setuid (uid) < 0)
{
dbus_set_error (error, _dbus_error_from_errno (errno),
- "Failed to set GID to %lu: %s", gid,
+ "Failed to set UID to %lu: %s", uid,
_dbus_strerror (errno));
return FALSE;
}