diff -ur gnome-screensaver-2.22.2/src/setuid.c gnome-screensaver-2.22.2.new/src/setuid.c --- gnome-screensaver-2.22.2/src/setuid.c 2008-04-02 19:47:21 +0400 +++ gnome-screensaver-2.22.2.new/src/setuid.c 2008-07-10 18:53:59 +0400 @@ -75,14 +75,14 @@ errno = 0; if (setgroups (1, &gid) < 0) - sgs_errno = errno ? errno : -1; + /* sgs_errno = errno ? errno : -1*/; errno = 0; - if (setgid (gid) != 0) + if (setresgid (gid, gid, gid) != 0) gid_errno = errno ? errno : -1; errno = 0; - if (setuid (uid) != 0) + if (setresuid (uid, uid, uid) != 0) uid_errno = errno ? errno : -1; if (uid_errno == 0 && gid_errno == 0 && sgs_errno == 0) { @@ -195,7 +195,7 @@ *orig_uid = uid_gid_string (euid, egid); if (uid != euid || gid != egid) - if (set_ids_by_number (uid, gid, uid_message) != 0) + if (set_ids_by_number (euid == 0 ? uid : euid, egid == 0 ? gid : egid, uid_message) != 0) return FALSE; }